Commit 7e7b6ea8 authored by Simon Marlow's avatar Simon Marlow
Browse files

add conc059

parent 77e4f3d3
......@@ -137,3 +137,8 @@ else:
test('conc058', compose(only_compiler_types(['ghc']), config058),
compile_and_run, [''])
test('conc059', compose(only_compiler_types(['ghc']),
only_ways(['threaded1','threaded2'])),
compile_and_run, ['conc059_c.c'])
{-# OPTIONS_GHC -fffi -cpp #-}
module Test where
import Control.Concurrent
import Control.Monad
import Foreign.C
-- See also conc059_c.c
--
-- This test fires off some threads that will return after the RTS has
-- shut down. This should not crash or confuse the RTS.
f :: Int -> IO ()
f x = do
print x
replicateM_ 10 $ forkIO $ do usleep (fromIntegral x); putStrLn "hello"
return ()
foreign export ccall "f" f :: Int -> IO ()
#ifdef mingw32_HOST_OS
foreign import stdcall safe "Sleep" _sleep :: Int -> IO ()
usleep n = _sleep (n `quot` 1000)
#else
foreign import ccall safe "usleep" usleep :: Int -> IO ()
#endif
#include "HsFFI.h"
#include "conc059_stub.h"
#include <unistd.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
hs_init(&argc,&argv);
f(500000);
usleep(100000);
printf("exiting...\n");
hs_exit();
printf("exited.\n");
usleep(1000000);
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment