git.iko.soy/distributed-process
on master help sign in
Merge pull request #162 from tweag/forkprocess-async-exc
cdf5af4Tim Watson
src/Control/Distributed/Process/Node.hs+4−3
@@ -64,9 +64,10 @@ import Control.Exception
64 , SomeException
64 , SomeException
65 , Exception
65 , Exception
66 , throwTo
66 , throwTo
67+ , uninterruptibleMask_
67 )
68 )
68import qualified Control.Exception as Exception (Handler(..), catches, finally)
69import qualified Control.Exception as Exception (Handler(..), catches, finally)
69−import Control.Concurrent (forkIO, myThreadId)
70+import Control.Concurrent (forkIO, forkIOWithUnmask, myThreadId)
70import Control.Distributed.Process.Internal.StrictMVar
71import Control.Distributed.Process.Internal.StrictMVar
71 ( newMVar
72 ( newMVar
72 , withMVar
73 , withMVar
@@ -356,9 +357,9 @@ forkProcess node proc = modifyMVar (localState node) startProcess
356 , processThread = tid
357 , processThread = tid
357 , processNode = node
358 , processNode = node
358 }
359 }
359− tid' <- forkIO $ do
360+ tid' <- uninterruptibleMask_ $ forkIOWithUnmask $ \unmask -> do
360 reason <- Exception.catches
361 reason <- Exception.catches
361− (runLocalProcess lproc proc >> return DiedNormal)
362+ (unmask $ runLocalProcess lproc proc >> return DiedNormal)
362 [ (Exception.Handler (\ex@(ProcessExitException from msg) -> do
363 [ (Exception.Handler (\ex@(ProcessExitException from msg) -> do
363 mMsg <- unwrapMessage msg :: IO (Maybe String)
364 mMsg <- unwrapMessage msg :: IO (Maybe String)
364 case mMsg of
365 case mMsg of