[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