Skip to content
Commits on Source (2)
......@@ -4,12 +4,12 @@ import Control.Concurrent
import Foreign.C
import System.IO
#ifdef mingw32_HOST_OS
#if defined(mingw32_HOST_OS)
sleep n = sleepBlock (n*1000)
foreign import stdcall unsafe "Sleep" sleepBlock :: Int -> IO ()
foreign import stdcall safe "Sleep" sleepBlock :: Int -> IO ()
#else
sleep n = sleepBlock n
foreign import ccall unsafe "sleep" sleepBlock :: Int -> IO ()
foreign import ccall safe "sleep" sleepBlock :: Int -> IO ()
#endif
main :: IO ()
......
-- The same as T5611 but with unsafe calls.
{-# LANGUAGE CPP,ForeignFunctionInterface #-}
import Control.Concurrent
import Foreign.C
import System.IO
#if defined(mingw32_HOST_OS)
sleep n = sleepBlock (n*1000)
foreign import stdcall unsafe "Sleep" sleepBlock :: Int -> IO ()
#else
sleep n = sleepBlock n
foreign import ccall unsafe "sleep" sleepBlock :: Int -> IO ()
#endif
main :: IO ()
main = do
hSetBuffering stdout LineBuffering
tid <- forkIO $ do
putStrLn "child: Sleeping"
_ <- sleep 1
-- The following lines should not happen after the killThread from the
-- parent thread completes. However, they do...
-- putStrLn "child: Done sleeping"
threadDelay 100000
putStrLn "child: Done waiting"
threadDelay 100000
-- putStrLn $ "parent: Throwing exception to thread " ++ show tid
throwTo tid $ userError "Exception delivered successfully"
putStrLn "parent: Done throwing exception"
threadDelay 200000
T5611a: user error (Exception delivered successfully)
T5611a: <stdout>: commitBuffer: user error (Exception delivered successfully)
child: Sleeping
parent: Done throwing exception
......@@ -75,6 +75,7 @@ test('T5558',
test('T5421', normal, compile_and_run, [''])
test('T5611', when(opsys('darwin'), fragile(12751)) , compile_and_run, [''])
test('T5611a', when(opsys('darwin'), fragile(12751)) , compile_and_run, [''])
test('T5238', normal, compile_and_run, [''])
test('T5866', exit_code(1), compile_and_run, [''])
......