Finalizers and FFI

Arjan van IJzendoorn afie at cs.uu.nl
Wed Jun 9 14:40:00 EDT 2004


HI Gracjan,

> I would like to attach finalizer (written in Haskell) to some pointer. 
> When the pointer won't be needed any more, finalizer should run. So 
> here is the code:

> import Foreign.ForeignPtr

I couldn't get finalisers to work either with the newForeignPtr from 
this module. I didn't know how to create a proper FunPtr. In 
Foreign.Concurrent there is a newForeignPtr that is easier to use:

newForeignPtr :: Ptr a -> IO () -> IO (ForeignPtr a)

This one worked beautifully for me. In your code something like:

import Foreign.ForeignPtr hiding (newForeignPtr)
import Foreign.Concurrent

    ... fptr <- newForeignPtr ptr (finDoIt ptr)

Hope this helps,
   Arjan



More information about the Glasgow-haskell-users mailing list