[Fencommits] fenfire-hs: catch exceptions in event handlers
Tuukka Hastrup
Tuukka.Hastrup at iki.fi
Wed Feb 21 12:52:17 EET 2007
Wed Feb 21 12:52:31 EET 2007 Tuukka Hastrup <Tuukka.Hastrup at iki.fi>
* catch exceptions in event handlers
diff -rN -u old-fenfire-hs/Vobs.fhs new-fenfire-hs/Vobs.fhs
--- old-fenfire-hs/Vobs.fhs 2007-02-21 12:52:16.000000000 +0200
+++ new-fenfire-hs/Vobs.fhs 2007-02-21 12:52:16.000000000 +0200
@@ -47,6 +47,7 @@
import Control.Monad.State
import Control.Monad.Reader
+import qualified Control.Exception
type Scene k = Map k (Maybe (Matrix, Size))
data Vob k = Vob { defaultSize :: Size,
@@ -366,15 +367,20 @@
handle handler event = do
state <- readIORef stateRef
-
- (state', interpolate', handled) <-
- runHandler handler state event
-
- when handled $ do writeIORef stateRef state'
- stateChanged state state'
- updateAnim interpolate'
-
- return handled
+ Control.Exception.catch
+ (do (state', interpolate', handled) <-
+ runHandler handler state event
+
+ when handled $ do writeIORef stateRef state'
+ stateChanged state state'
+ updateAnim interpolate'
+
+ return handled )
+ (\e -> do
+ putStr ("Exception in event: ") >> print e
+ writeIORef stateRef state
+ stateChanged state state -- XXX how to write this?
+ return True )
handleEvent = handle eventHandler
More information about the Fencommits
mailing list