From 510ea89038fd81452a841691fb9aa10382725d7b Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Fri, 1 Aug 2008 20:01:23 +0000 Subject: [PATCH] Don't import Control.Concurrent.MVar in GHC.TopHandler --- GHC/TopHandler.lhs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/GHC/TopHandler.lhs b/GHC/TopHandler.lhs index 236f5ff..ac6523b 100644 --- a/GHC/TopHandler.lhs +++ b/GHC/TopHandler.lhs @@ -27,7 +27,6 @@ module GHC.TopHandler ( import Control.Exception import Data.Maybe -import Control.Concurrent.MVar import Foreign import Foreign.C @@ -77,13 +76,20 @@ install_interrupt_handler handler = do -- isn't available here. install_interrupt_handler handler = do let sig = CONST_SIGINT :: CInt - withMVar signalHandlerLock $ \_ -> + withSignalHandlerLock $ alloca $ \p_sp -> do sptr <- newStablePtr handler poke p_sp sptr stg_sig_install sig STG_SIG_RST p_sp nullPtr return () +withSignalHandlerLock :: IO () -> IO () +withSignalHandlerLock io + = block $ do + takeMVar signalHandlerLock + catchAny (unblock io) (\e -> do putMVar signalHandlerLock (); throw e) + putMVar signalHandlerLock () + foreign import ccall unsafe stg_sig_install :: CInt -- sig no. -- 1.7.10.4