diff --git a/libraries/ghc-internal/src/GHC/Internal/Conc/Signal.hs b/libraries/ghc-internal/src/GHC/Internal/Conc/Signal.hs index 9d9da660c1fad5e6ebfb2be892b8fbbfa583cc93..59265201b874a2ca944b8a26465cea9a4290feed 100644 --- a/libraries/ghc-internal/src/GHC/Internal/Conc/Signal.hs +++ b/libraries/ghc-internal/src/GHC/Internal/Conc/Signal.hs @@ -19,7 +19,7 @@ import GHC.Internal.Foreign.Ptr (Ptr, castPtr) import GHC.Internal.Foreign.Marshal.Alloc (finalizerFree) import GHC.Internal.Arr (inRange) import GHC.Internal.Base -import GHC.Internal.Conc.Sync (forkIO) +import GHC.Internal.Conc.Sync (myThreadId, labelThread, forkIO) import GHC.Internal.IO (mask_, unsafePerformIO) import GHC.Internal.IOArray (IOArray, boundsIOArray, newIOArray, unsafeReadIOArray, unsafeWriteIOArray) @@ -69,7 +69,10 @@ runHandlers p_info sig = do else do handler <- unsafeReadIOArray arr int case handler of Nothing -> return () - Just (f,_) -> do _ <- forkIO (f p_info) + Just (f,_) -> do _ <- forkIO $ do + tid <- myThreadId + labelThread tid "signal handler" + f p_info return () -- It is our responsibility to free the memory buffer, so we create a