Rodrigo Mesquita pushed to branch wip/romes/27514 at Glasgow Haskell Compiler / GHC
Commits:
-
68c0ac0b
by Rodrigo Mesquita at 2026-08-13T16:40:54+01:00
1 changed file:
Changes:
| ... | ... | @@ -62,7 +62,7 @@ import GHC.Data.OsPath ( OsPath, unsafeEncodeUtf ) |
| 62 | 62 | import GHC.Data.StringBuffer
|
| 63 | 63 | import GHC.Data.Graph.Directed.Reachability
|
| 64 | 64 | |
| 65 | -import GHC.Utils.Exception ( throwIO, SomeAsyncException )
|
|
| 65 | +import GHC.Utils.Exception ( throwIO, SomeAsyncException, AsyncException (..) )
|
|
| 66 | 66 | import GHC.Utils.Outputable
|
| 67 | 67 | import GHC.Utils.Panic
|
| 68 | 68 | import GHC.Utils.Misc
|
| ... | ... | @@ -1786,7 +1786,12 @@ parDfsBuild base_map roots key expand = ReaderT $ \ds_env -> do |
| 1786 | 1786 | worklist <- newTQueueIO
|
| 1787 | 1787 | coord_tid <- forkIO $
|
| 1788 | 1788 | coordinator ds_env exc_var visited_var worklist pending
|
| 1789 | - `MC.catch` \(e::MC.SomeException) -> atomically (modifyTVar' exc_var (<|> Just e))
|
|
| 1789 | + `MC.catch` \case
|
|
| 1790 | + (e::MC.SomeException)
|
|
| 1791 | + -- exit cleanly when killed
|
|
| 1792 | + | Just ThreadKilled <- fromException e -> pure ()
|
|
| 1793 | + -- otherwise signal exc_var for the main thread to throw it
|
|
| 1794 | + | otherwise -> atomically (modifyTVar' exc_var (<|> Just e))
|
|
| 1790 | 1795 | mapM_ (atomically . writeTQueue worklist) roots
|
| 1791 | 1796 | mb_exc <- atomically $ do
|
| 1792 | 1797 | readTVar exc_var >>= \case
|
| ... | ... | @@ -1829,6 +1834,7 @@ parDfsBuild base_map roots key expand = ReaderT $ \ds_env -> do |
| 1829 | 1834 | forkIO $
|
| 1830 | 1835 | worker ds_env{ds_make_env = make_env} exc_var visvar
|
| 1831 | 1836 | worklist pendvar k node
|
| 1837 | + `MC.catch` \(e::MC.SomeException) -> atomically (modifyTVar' exc_var (<|> Just e))
|
|
| 1832 | 1838 | return ()
|
| 1833 | 1839 | |
| 1834 | 1840 | worker ds_env@DownsweepEnv{..} exc_var visvar worklist pendvar k node =
|