@@ -86,7 +86,7 @@ import qualified Data.ByteString.Lazy as BSL ( ByteString
8686 )
8787import Data.Binary (Binary, decode, encode, put, get, putWord8, getWord8)
8888import Data.Map (Map)
89−import qualified Data.Map as Map (empty, lookup, insert, delete, keys, toList)
89+import qualified Data.Map as Map (empty, lookup, insert, delete, toList)
9090import qualified Data.List as List (delete)
9191import Data.Set (Set)
9292import qualified Data.Set as Set (empty, insert, delete, member)
@@ -186,7 +186,6 @@ data LocalNodeState = LocalNodeState
186186 { _localProcesses :: Map LocalProcessId LocalProcess
187187 , _localPidCounter :: Int32
188188 , _localPidUnique :: Int32
189− , _monitorActions :: Map ProcessId [IO ()]
190189 , _localMonitorCounter :: Int32
191190 }
192191
@@ -232,6 +231,7 @@ send them msg = do
232231getSelfPid :: Process ProcessId
233232getSelfPid = processId <$> ask
234233
234+-- | Monitor another process
235235monitor :: ProcessId -> Process MonitorRef
236236monitor them = do
237237 us <- getSelfPid
@@ -269,7 +269,6 @@ expectTimeout timeout = do
269269 dequeueMatching queue (Just timeout) ((== fp) . messageFingerprint)
270270 return $ fmap (decode . messageEncoding) msg
271271
272−
273272--------------------------------------------------------------------------------
274273-- The node controller --
275274--------------------------------------------------------------------------------
@@ -488,7 +487,6 @@ newLocalNode transport = do
488487 { _localProcesses = Map.empty
489488 , _localPidCounter = 0
490489 , _localPidUnique = unq
491− , _monitorActions = Map.empty
492490 , _localMonitorCounter = 0
493491 }
494492 ctrlChan <- newChan
@@ -587,12 +585,12 @@ handleIncomingMessages node = go [] Map.empty Set.empty
587585 (Map.delete cid procConns)
588586 (Set.delete cid ctrlConns)
589587 NT.ErrorEvent (NT.TransportError (NT.EventConnectionLost (Just theirAddr) _) _) -> do
590− -- TODO: we could cache this information
591− pids <- withMVar state $ \st ->
592− return $ filter ((== theirAddr) . nodeAddress . processNodeId)
593− . Map.keys
594− $ st ^. monitorActions
595− forM_ pids $ remoteProcessFailed node
588+ -- [Unified table 9, rule node_disconnect]
589+ let nid = Right $ NodeId theirAddr
590+ writeChan ctrlChan NCMsg
591+ { ctrlMsgSender = nid
592+ , ctrlMsgSignal = Died nid DiedDisconnect
593+ }
596594 NT.ErrorEvent _ ->
597595 fail "handleIncomingMessages: TODO 4"
598596 NT.EndPointClosed ->
@@ -774,18 +772,12 @@ localPidCounter = accessor _localPidCounter (\ctr st -> st { _localPidCounter =
774772localPidUnique :: Accessor LocalNodeState Int32
775773localPidUnique = accessor _localPidUnique (\unq st -> st { _localPidUnique = unq })
776774
777−monitorActions :: Accessor LocalNodeState (Map ProcessId [IO ()])
778−monitorActions = accessor _monitorActions (\as st -> st { _monitorActions = as })
779−
780775localMonitorCounter :: Accessor LocalNodeState Int32
781776localMonitorCounter = accessor _localMonitorCounter (\ctr st -> st { _localMonitorCounter = ctr })
782777
783778localProcessWithId :: LocalProcessId -> Accessor LocalNodeState (Maybe LocalProcess)
784779localProcessWithId lpid = localProcesses >>> DAC.mapMaybe lpid
785780
786−monitorActionsFor :: ProcessId -> Accessor LocalNodeState [IO ()]
787−monitorActionsFor pid = monitorActions >>> DAC.mapDefault [] pid
788−
789781connections :: Accessor LocalProcessState (Map ProcessId NT.Connection)
790782connections = accessor _connections (\conns st -> st { _connections = conns })
791783