On Jul 13, 2010, at 22:17, Edward Z. Yang wrote:
Excerpts from Axel Simon's message of Tue Jul 13 16:03:01 -0400 2010:
If your C code has a way to properly unref a pointer then you could
wrap your ForeignPtr in a StablePtr and pass that to C land. Once C
has freed the StablePtr the ForeignPtr can become dead when Haskell
has dropped all references and it will be garbage collected.
Does ForeignPtr have a guaranteed representation from C land? I feel
like you want to create a stable pointer and then unsafely cast the
foreign pointer into a real pointer, which would effectively fizzle
the original foreign pointer's finalizer.
Well, if the C code hangs on to the StablePtr that wraps the
ForeignPtr, its finalizer won't be run. But can run again once the
StablePtr is freed. So you can take out the Ptr in the ForeignPtr and
use it in C land as long as C holds on to the StablePtr.
Cheers,
Axel
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users