blob: 0be6f31d7a360d599d72baafc9cab6a2cadf96b7 (
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
|
-- Tests Foreign.Concurrent finalizers
import Text.Printf
import Foreign.Concurrent as Conc
import Foreign
import GHC.TopHandler
import Control.Concurrent
import Data.List
import System.Mem
-- This finalizer calls back into Haskell, so we can't use
-- the ordinary newForeignPtr.
foreign export ccall fin :: Ptr Int -> Ptr Int -> IO ()
foreign import ccall "fin" finptr :: Ptr Int -> Ptr Int -> IO ()
fin :: Ptr Int -> Ptr Int -> IO ()
fin envp ap = runIO $ do
env <- peek envp
a <- peek ap
printf "%d %d\n" env a
return ()
main = do
a <- new (55 :: Int)
env <- new (66 :: Int)
fp <- Conc.newForeignPtr a (finptr env a)
performGC
threadDelay 100000
|