diff --git a/src/GF.hs b/src/GF.hs index e0788744c..951bf4b52 100644 --- a/src/GF.hs +++ b/src/GF.hs @@ -28,6 +28,7 @@ import GF.Shell.SubShell import GF.Shell.ShellCommands import GF.Shell.PShell import GF.Shell.JGF +import GF.System.Signal import GF.Text.UTF8 import GF.Today (today,version) @@ -84,7 +85,7 @@ main = do st <- useIOE st0 $ foldM (shellStateFromFiles os) st0 fs if null fs then return () else (ifNotSil putCPU) - gfInteract (initHState st) + blockInterrupt (gfInteract (initHState st)) return () -- preprocessing gfe if opt fromExamples 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