> At 2001-09-20 02:14, Simon Marlow wrote:
> 
> >I'll just add that the docs have been updated for 5.02,
> 
> Do you have a URL for that?

Not yet, but the release is imminent (really!) so it'll be up on the web
site shortly.

> >And don't forget that using foreignPtrToPtr is quite dangerous; much
> >better to use withForeignPtr instead, otherwise you might find the
> >ForeignPtr being finalised earlier than you expect.
> 
> This is because foreignPtrToPtr is not in the IO monad, correct?
> 
>      foreignPtrToPtr :: ForeignPtr a -> Ptr a;
> 
> A function like this:
> 
>      ioForeignPtrToPtr :: ForeignPtr a -> IO (Ptr a);
>      ioForeignPtrToPtr fp = withForeignPtr fp return;
> 
> ...would surely be safe? The 5.00 documentation claims that it isn't, 
> however, but I don't see why.

No, it's not safe.  The reason is that the compiler can track a
ForeignPtr to discover when it dies, in order to run the finalizer, but
it can't track a Ptr.  As soon as you drop all references to the
ForeignPtr then the finalizer will run, even if you converted it to a
Ptr and you're still using it.

withForeignPtr is safe to use because it ensures that the ForeignPtr is
kept live until it returns.  The documentation is a little terse on this
issue; I'll see if I can improve it.

Cheers,
        Simon


_______________________________________________
Glasgow-haskell-users mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to