From afac97b82181e2db14226d854761e53c66d98094 Mon Sep 17 00:00:00 2001 From: bringert Date: Thu, 15 Jun 2006 01:41:18 +0000 Subject: Block SIGINT while running gfInteract, as suggested by Peter. --- src/GF/System/NoSignal.hs | 3 +++ src/GF/System/Signal.hs | 6 +++--- src/GF/System/UseSignal.hs | 8 ++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) (limited to 'src/GF/System') diff --git a/src/GF/System/NoSignal.hs b/src/GF/System/NoSignal.hs index 5b7827f32..fdad89b27 100644 --- a/src/GF/System/NoSignal.hs +++ b/src/GF/System/NoSignal.hs @@ -24,3 +24,6 @@ runInterruptibly a = p `catch` h where p = a >>= \x -> return $! Right $! x h e = return $ Left e + +blockInterrupt :: IO a -> IO a +blockInterrupt = id \ No newline at end of file diff --git a/src/GF/System/Signal.hs b/src/GF/System/Signal.hs index 3d9e6ef40..fe8a12483 100644 --- a/src/GF/System/Signal.hs +++ b/src/GF/System/Signal.hs @@ -14,14 +14,14 @@ -- Import the right singal handling module. ----------------------------------------------------------------------------- -module GF.System.Signal (runInterruptibly) where +module GF.System.Signal (runInterruptibly,blockInterrupt) where #ifdef USE_INTERRUPT -import GF.System.UseSignal (runInterruptibly) +import GF.System.UseSignal (runInterruptibly,blockInterrupt) #else -import GF.System.NoSignal (runInterruptibly) +import GF.System.NoSignal (runInterruptibly,blockInterrupt) #endif diff --git a/src/GF/System/UseSignal.hs b/src/GF/System/UseSignal.hs index 8f3874711..5e6d81237 100644 --- a/src/GF/System/UseSignal.hs +++ b/src/GF/System/UseSignal.hs @@ -48,3 +48,11 @@ runInterruptibly a = -- the computation fails or not. runInterruptibly_ :: IO () -> IO () runInterruptibly_ = fmap (either (const ()) id) . runInterruptibly + +-- | Run an action with SIGINT blocked. +blockInterrupt :: IO a -> IO a +blockInterrupt a = + do oldH <- installHandler sigINT Ignore Nothing + x <- a + installHandler sigINT oldH Nothing + return x -- cgit v1.2.3