"Simon Marlow" <[EMAIL PROTECTED]> writes:
> No, unfortunately not.  You have foo's finalizer which refers to bar via
> a touchForeignPtr.  If both foo and bar are unreachable (references from
> finalizers don't count), then both foo and bar's finalizers will be
> started together, and may run in any order.

I didn't realize the "references from finalizers don't count" rule.
What would happen if the finalizer of foo would resurrect bar after 
bar's finalizer has been run?

> So touchForeignPtr does only one thing: it expresses the precise
> relationship "bar is alive if foo is alive".  If both are not alive,
> then both finalizers can run, in any order.

So reference counting the objects is the solution?

> I realise this is very subtle.  By all means suggest improvements to the
> docs.

Mentioning that references from finalizers don't count could help
someone not to repeat my mistakes.

- Einar Karttunen
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to