git.iko.soy/distributed-process
on master help sign in
Merge pull request #162 from tweag/forkprocess-async-exc

Make forkProcess exception-safe. Thanks Mathieu Boespflug

commitcdf5af43c9675c1e373ee6971390ee05d7c9b245 authorTim Watson <watson.timothy@gmail.com> dateSun 30 Nov 2014, 14:44 (12 years ago) parent1ce7462770da54
1 file changed+4−3
src/Control/Distributed/Process/Node.hs+4−3
src/Control/Distributed/Process/Node.hs+4−3
@@ -64,9 +64,10 @@ import Control.Exception
6464 , SomeException
6565 , Exception
6666 , throwTo
67+ , uninterruptibleMask_
6768 )
6869import qualified Control.Exception as Exception (Handler(..), catches, finally)
69−import Control.Concurrent (forkIO, myThreadId)
70+import Control.Concurrent (forkIO, forkIOWithUnmask, myThreadId)
7071import Control.Distributed.Process.Internal.StrictMVar
7172 ( newMVar
7273 , withMVar
@@ -356,9 +357,9 @@ forkProcess node proc = modifyMVar (localState node) startProcess
356357 , processThread = tid
357358 , processNode = node
358359 }
359− tid' <- forkIO $ do
360+ tid' <- uninterruptibleMask_ $ forkIOWithUnmask $ \unmask -> do
360361 reason <- Exception.catches
361− (runLocalProcess lproc proc >> return DiedNormal)
362+ (unmask $ runLocalProcess lproc proc >> return DiedNormal)
362363 [ (Exception.Handler (\ex@(ProcessExitException from msg) -> do
363364 mMsg <- unwrapMessage msg :: IO (Maybe String)
364365 case mMsg of