@@ -1556,22 +1556,24 @@ testRegistryMonitoring :: TestTransport -> Assertion
1556
1556
testRegistryMonitoring TestTransport {.. } = do
1557
1557
node1 <- newLocalNode testTransport initRemoteTable
1558
1558
node2 <- newLocalNode testTransport initRemoteTable
1559
- waitH <- newEmptyMVar
1560
1559
1561
1560
let nid = localNodeId node2
1562
1561
pid <- forkProcess node1 $ do
1563
1562
self <- getSelfPid
1564
1563
runUntilRegistered nid self
1565
- say $ regName ++ " registered to " ++ show self
1566
- liftIO $ takeMVar waitH
1564
+ say $ (show self) ++ " registered as " ++ regName
1565
+ expect :: Process ()
1566
+ say $ (show self) ++ " exiting normally"
1567
1567
1568
1568
runProcess node2 $ do
1569
1569
register regName pid
1570
+ say $ regName ++ " registered to " ++ show pid
1570
1571
res <- whereis regName
1572
+ send pid ()
1573
+ say $ " sent finish signal to " ++ show pid
1571
1574
us <- getSelfPid
1572
- liftIO $ do
1573
- putMVar waitH ()
1574
- assertBool " expected (Just pid)" $ res == (Just pid)
1575
+ liftIO $ assertBool " expected (Just pid)" $ res == (Just pid)
1576
+
1575
1577
1576
1578
-- This delay isn't essential!
1577
1579
-- The test case passes perfectly fine without it (feel free to comment out
@@ -1610,11 +1612,13 @@ testRegistryMonitoring TestTransport{..} = do
1610
1612
1611
1613
delayUntilMaybeUnregistered nid p = do
1612
1614
whereisRemoteAsync nid regName
1613
- receiveTimeout 20000000 {- 20 sec delay -} [
1615
+ res <- receiveTimeout 20000000 {- 20 sec delay -} [
1614
1616
matchIf (\ (WhereIsReply n p) -> n == regName && isNothing p)
1615
1617
(const $ return () )
1616
1618
]
1617
- return ()
1619
+ case res of
1620
+ Just () -> return ()
1621
+ Nothing -> delayUntilMaybeUnregistered nid p
1618
1622
1619
1623
regName = " testRegisterRemote"
1620
1624
0 commit comments