@@ -56,7 +56,7 @@ import Control.Exception
56 , Exception
56 , Exception
59−import qualified Control.Exception as Exception (catch, finally)
59+import qualified Control.Exception as Exception (Handler(..), catch, catches, finally)
60import Control.Concurrent (forkIO, myThreadId)
60import Control.Concurrent (forkIO, myThreadId)
61import Control.Distributed.Process.Internal.StrictMVar
61import Control.Distributed.Process.Internal.StrictMVar
@@ -177,6 +177,7 @@ import Control.Distributed.Process.Internal.Primitives
178 , sendChan
178 , sendChan
181import Control.Distributed.Process.Internal.Types (SendPort)
182import Control.Distributed.Process.Internal.Types (SendPort)
182import qualified Control.Distributed.Process.Internal.Closure.BuiltIn as BuiltIn (remoteTable)
183import qualified Control.Distributed.Process.Internal.Closure.BuiltIn as BuiltIn (remoteTable)
@@ -349,9 +350,15 @@ forkProcess node proc = modifyMVar (localState node) startProcess
349 , processNode = node
350 , processNode = node
351 tid' <- forkIO $ do
352 tid' <- forkIO $ do
352− reason <- Exception.catch
353+ reason <- Exception.catches
353 (runLocalProcess lproc proc >> return DiedNormal)
354 (runLocalProcess lproc proc >> return DiedNormal)
355+ [ (Exception.Handler (\ex@(ProcessExitException from msg) -> do
356+ mMsg <- unwrapMessage msg :: IO (Maybe String)
358+ Nothing -> return $ DiedException $ show ex
359+ Just m -> return $ DiedException ("exit-from=" ++ (show from) ++ ",reason=" ++ m)))
360+ , (Exception.Handler
354− (return . DiedException . (show :: SomeException -> String))
361+ (return . DiedException . (show :: SomeException -> String)))]
356 -- [Unified: Table 4, rules termination and exiting]
363 -- [Unified: Table 4, rules termination and exiting]
357 modifyMVar_ (localState node) (cleanupProcess pid)
364 modifyMVar_ (localState node) (cleanupProcess pid)