@@ -14,7 +14,7 @@ import Data.IORef
14
14
, writeIORef
15
15
, newIORef
16
16
)
17
- import Control.Concurrent (forkIO , threadDelay , myThreadId , throwTo , ThreadId )
17
+ import Control.Concurrent (forkIO , threadDelay , myThreadId , throwTo , ThreadId , yield )
18
18
import Control.Concurrent.MVar
19
19
( MVar
20
20
, newEmptyMVar
@@ -1397,12 +1397,11 @@ testCallLocal TestTransport{..} = do
1397
1397
send keeper caller
1398
1398
onException
1399
1399
(callLocal $ do
1400
- onException (do send keeper ()
1400
+ onException (do send keeper caller
1401
1401
expect)
1402
1402
(do liftIO $ writeIORef ibox True ))
1403
1403
(send keeper () )
1404
1404
caller <- expect
1405
- () <- expect
1406
1405
exit caller " test"
1407
1406
() <- expect
1408
1407
return ()
@@ -1417,6 +1416,40 @@ testCallLocal TestTransport{..} = do
1417
1416
True <- readIORef ibox
1418
1417
return ()
1419
1418
1419
+ -- Test that caller waits for the worker in correct situation
1420
+ ibox3 <- newIORef False
1421
+ result3 <- newEmptyMVar
1422
+ runProcess node $ do
1423
+ keeper <- getSelfPid
1424
+ spawnLocal $ do
1425
+ callLocal $
1426
+ (do us <- getSelfPid
1427
+ send keeper us
1428
+ () <- expect
1429
+ liftIO yield)
1430
+ `finally` (liftIO $ writeIORef ibox3 True )
1431
+ liftIO $ putMVar result3 =<< readIORef ibox3
1432
+ worker <- expect
1433
+ send worker ()
1434
+ True <- takeMVar result3
1435
+ return ()
1436
+
1437
+ -- Test that caller waits for the worker in case when caller gets an exception
1438
+ ibox4 <- newIORef False
1439
+ result4 <- newEmptyMVar
1440
+ runProcess node $ do
1441
+ keeper <- getSelfPid
1442
+ spawnLocal $ do
1443
+ caller <- getSelfPid
1444
+ callLocal
1445
+ ((do send keeper caller
1446
+ expect)
1447
+ `finally` (liftIO $ writeIORef ibox4 True ))
1448
+ `finally` (liftIO $ putMVar result4 =<< readIORef ibox4)
1449
+ caller <- expect
1450
+ exit caller " hi!"
1451
+ True <- takeMVar result4
1452
+ return ()
1420
1453
-- XXX: Testing that when mask_ $ callLocal p runs p in masked state.
1421
1454
1422
1455
0 commit comments