blob: 4434bef21a0ada21ddd95fe4e177ffcd783af589 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
-- exposed a bug in GHC 6.4 threaded RTS, fixed in Schedule.c rev. 1.232
module Main where
import Control.Concurrent
import Control.Monad
import Foreign.Ptr
import Data.IORef
main = do
ms <- replicateM 100 $ do putStrLn "."
m <- newEmptyMVar
forkOS (thread >> putMVar m ())
thread
return m
mapM takeMVar ms
thread = do var <- newIORef 0
let f = modifyIORef var (1+)
callC =<< mkFunc f
type FUNC = IO ()
foreign import ccall unsafe "wrapper"
mkFunc :: FUNC -> IO (FunPtr FUNC)
foreign import ccall safe "ffi014_cbits.h callC"
callC:: FunPtr FUNC -> IO ()
|