From 639511b265b50c78aafb0bd7c872f536dff25e14 Mon Sep 17 00:00:00 2001 From: simonmar Date: Tue, 25 Oct 2005 11:13:53 +0000 Subject: [PATCH] [project @ 2005-10-25 11:13:53 by simonmar] forkIO the signal handlers directly from the IO manager thread, rather than calling an RTS function to do the same thing. --- GHC/Conc.lhs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/GHC/Conc.lhs b/GHC/Conc.lhs index 28a2016..f1b4d61 100644 --- a/GHC/Conc.lhs +++ b/GHC/Conc.lhs @@ -619,7 +619,9 @@ service_loop wakeup readfds writefds ptimeval old_reqs old_delays = do s <- peek p if (s == 0xff) then return () - else c_startSignalHandler (fromIntegral s) + else do sp <- peekElemOff handlers (fromIntegral s) + quickForkIO (deRefStablePtr sp) + return () takeMVar prodding putMVar prodding False @@ -644,8 +646,7 @@ prodServiceThread = do else return () putMVar prodding True -foreign import ccall unsafe "startSignalHandler" - c_startSignalHandler :: CInt -> IO () +foreign import ccall "&signal_handlers" handlers :: Ptr (StablePtr (IO ())) foreign import ccall "setIOManagerPipe" c_setIOManagerPipe :: CInt -> IO () -- 1.7.10.4