git.iko.soy/distributed-process
on master help sign in
Node.runProcess propagates exceptions to its caller - [DP-58 #resolve]
commit6bd32f84597adb4cd793e906c77accb9924093b8 authorTim Watson <watson.timothy@gmail.com> dateWed 15 May 2013, 14:47 (13 years ago) parent4f4c392
1 file changed+6−2
src/Control/Distributed/Process/Node.hs+6−2
src/Control/Distributed/Process/Node.hs+6−2
@@ -57,7 +57,7 @@ import Control.Exception
5757 , throwTo
5858 )
5959import qualified Control.Exception as Exception (catch, finally)
60−import Control.Concurrent (forkIO)
60+import Control.Concurrent (forkIO, myThreadId)
6161import Control.Distributed.Process.Internal.StrictMVar
6262 ( newMVar
6363 , withMVar
@@ -176,6 +176,7 @@ import Control.Distributed.Process.Internal.Primitives
176176 , receiveWait
177177 , match
178178 , sendChan
179+ , catch
179180 )
180181import Control.Distributed.Process.Internal.Types (SendPort)
181182import qualified Control.Distributed.Process.Internal.Closure.BuiltIn as BuiltIn (remoteTable)
@@ -314,7 +315,10 @@ closeLocalNode node =
314315runProcess :: LocalNode -> Process () -> IO ()
315316runProcess node proc = do
316317 done <- newEmptyMVar
317− void $ forkProcess node (proc `finally` liftIO (putMVar done ()))
318+ tid <- myThreadId
319+ void $ forkProcess node $ do
320+ catch (proc `finally` liftIO (putMVar done ()))
321+ (\(ex :: SomeException) -> liftIO $ throwTo tid ex)
318322 takeMVar done
319323
320324-- | Spawn a new process on a local node