Simon Marlow simonmar at
Tue Oct 15 05:44:39 EDT 2002

> I dont have cvs write access but you should mention something about
> expressing gc dependencies between ForeignPtr's. the only two 
> ways to do
> this in the current haskell systems are
> * weak pointers
> * touchForeignPtr from the finalizer of another ForeignPtr

Actually I have a feeling that in GHC it doesn't work to use
touchForeignPtr from the finalizer of one ForeignPtr in order to keep
another alive.  According to our semantics for weak pointers, I think
the two finalizers can still be run together, because pointers from a
finalizer are not followed when calculating reachability.

Hmm.  I'm not sure what to do about this.

> if the second one is not allowed by restricting us to C only 
> finalizers,
> then the first needs to be added into the FFI, (or some other 
> mechanism
> invented). I consider this functionality vital for any non-trivial use
> of ForeignPtr, and it becomes more important as we move more 
> stuff to C
> land, as C structures become more common.

Yes, this is a good point.  I'll add it to the document.

> for more info on the use of this, see the FFI touchForeignPtr
> documentation and the paper describing Weak pointers in ghc. the fact
> that multiple people saw the need for this and came up with solutions
> probably says something about its usefulness. 


More information about the FFI mailing list