git.iko.soy/distributed-process
on master help sign in
Shut down the logger process before exiting.
53b2be7Simon Marlow
distributed-process-simplelocalnet/src/Control/Distributed/Process/Backend/SimpleLocalnet.hs+18−1
@@ -127,6 +127,11 @@ import Control.Distributed.Process
127 , monitorNode
127 , monitorNode
128 , unmonitor
128 , unmonitor
129 , NodeMonitorNotification(..)
129 , NodeMonitorNotification(..)
130+ , finally
131+ , newChan
132+ , receiveChan
133+ , nsend
134+ , SendPort
130 )
135 )
131import qualified Control.Distributed.Process.Node as Node
136import qualified Control.Distributed.Process.Node as Node
132 ( LocalNode
137 ( LocalNode
@@ -349,7 +354,19 @@ startMaster backend proc = do
349 Node.runProcess node $ do
354 Node.runProcess node $ do
350 slaves <- findSlaves backend
355 slaves <- findSlaves backend
351 redirectLogsHere backend
356 redirectLogsHere backend
352− proc slaves
357+ proc slaves `finally` shutdownLogger
358+
359+--
360+-- | shut down the logger process. This ensures that any pending
361+-- messages are flushed before the process exits.
362+--
363+shutdownLogger :: Process ()
364+shutdownLogger = do
365+ (sport,rport) <- newChan
366+ nsend "logger" (sport :: SendPort ())
367+ receiveChan rport
368+ -- TODO: we should monitor the logger process so we don't deadlock if
369+ -- it has already died.
353
370
354--------------------------------------------------------------------------------
371--------------------------------------------------------------------------------
355-- Accessors --
372-- Accessors --