diff --git a/client/src/GHC/Debug/ParTrace.hs b/client/src/GHC/Debug/ParTrace.hs index ca3cbb6bbcb4a3eb6f46f7778e106f99494eb4f5..d92de3f2e57f208743e00c0e633d40ec0763d436 100644 --- a/client/src/GHC/Debug/ParTrace.hs +++ b/client/src/GHC/Debug/ParTrace.hs @@ -266,8 +266,9 @@ traceParFromM k cps = do go = sendToChan (TraceState ts_map) as <- sequence (map ($ go) start ) mapM_ go cps - unsafeLiftIO $ waitFinish work_actives - unsafeLiftIO $ mapM_ cancel as + wait_finish <- unsafeLiftIO $ async (waitFinish work_actives) + unsafeLiftIO $ waitAny $ (() <$ wait_finish) : (map ((<$) ()) as) + unsafeLiftIO $ mconcat <$> mapM cancel as unsafeLiftIO $ mconcat <$> mapM wait as waitFinish :: [STM Bool] -> IO ()