git.iko.soy/distributed-process
on master help sign in
Don't hold the localState MVar while calling blocking operations.
d9b3631Facundo Domínguez
src/Control/Distributed/Process/Internal/Messaging.hs+4−4
@@ -18,7 +18,7 @@ import Control.Distributed.Process.Serializable ()
18import Control.Concurrent (forkIO)
18import Control.Concurrent (forkIO)
19import Control.Concurrent.Chan (writeChan)
19import Control.Concurrent.Chan (writeChan)
20import Control.Exception (mask_)
20import Control.Exception (mask_)
21−import Control.Monad (unless)
21+import Control.Monad (unless, void)
22import Control.Monad.IO.Class (liftIO)
22import Control.Monad.IO.Class (liftIO)
23import Control.Monad.Reader (ask)
23import Control.Monad.Reader (ask)
24import qualified Network.Transport as NT
24import qualified Network.Transport as NT
@@ -30,7 +30,7 @@ import qualified Network.Transport as NT
30 , close
30 , close
31 )
31 )
32import Control.Distributed.Process.Internal.Types
32import Control.Distributed.Process.Internal.Types
33− ( LocalNode(localState, localEndPoint, localCtrlChan)
33+ ( LocalNode(localEndPoint, localCtrlChan)
34 , withValidLocalState
34 , withValidLocalState
35 , modifyValidLocalState
35 , modifyValidLocalState
36 , modifyValidLocalState_
36 , modifyValidLocalState_
@@ -146,9 +146,9 @@ disconnect node from to = mask_ $ do
146 return (vst, return ())
146 return (vst, return ())
147 Just (conn, _) -> do
147 Just (conn, _) -> do
148 return ( localConnectionBetween from to ^= Nothing $ vst
148 return ( localConnectionBetween from to ^= Nothing $ vst
149− , NT.close conn
149+ , void $ forkIO $ NT.close conn
150 )
150 )
151− forM_ mio forkIO
151+ forM_ mio id
152
152
153closeImplicitReconnections :: LocalNode -> Identifier -> IO ()
153closeImplicitReconnections :: LocalNode -> Identifier -> IO ()
154closeImplicitReconnections node to = mask_ $ do
154closeImplicitReconnections node to = mask_ $ do