From ecf3d153674b49adf8ef27d654c8732e7f7fbdd0 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Mon, 20 Mar 2006 12:43:33 +0000 Subject: [PATCH] add runIOFastExit :: IO a -> IO a Similar to runIO, but calls stg_exit() directly to exit, rather than shutdownHaskellAndExit(). Needed for running GHCi in the test suite. --- GHC/TopHandler.lhs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/GHC/TopHandler.lhs b/GHC/TopHandler.lhs index b1ac1b8..4785f61 100644 --- a/GHC/TopHandler.lhs +++ b/GHC/TopHandler.lhs @@ -16,7 +16,7 @@ -- #hide module GHC.TopHandler ( - runMainIO, runIO, runNonIO, reportStackOverflow, reportError + runMainIO, runIO, runIOFastExit, runNonIO, reportStackOverflow, reportError ) where import Prelude @@ -24,6 +24,7 @@ import Prelude import System.IO import Control.Exception +import Foreign.C ( CInt ) import GHC.IOBase import GHC.Exception import GHC.Prim (unsafeCoerce#) @@ -43,6 +44,22 @@ runMainIO main = (do a <- main; cleanUp; return a) `catchException` topHandler runIO :: IO a -> IO a runIO main = catchException main topHandler +-- | Like 'runIO', but in the event of an exception that causes an exit, +-- we don't shut down the system cleanly, we just exit. This is +-- useful in some cases, because the safe exit version will give other +-- threads a chance to clean up first, which might shut down the +-- system in a different way. For example, try +-- +-- main = forkIO (runIO (exitWith (ExitFailure 1))) >> threadDelay 10000 +-- +-- This will sometimes exit with "interrupted" and code 0, because the +-- main thread is given a chance to shut down when the child thread calls +-- safeExit. There is a race to shut down between the main and child threads. +-- +runIOFastExit :: IO a -> IO a +runIOFastExit main = catchException main topHandlerFastExit + -- NB. this is used by the testsuite driver + -- | The same as 'runIO', but for non-IO computations. Used for -- wrapping @foreign export@ and @foreign import \"wrapper\"@ when these -- are used to export Haskell functions with non-IO types. -- 1.7.10.4