addForeignPtrFinalizer - finalizers run in FIFO or LIFO order?

Henning Thielemann lemming at henning-thielemann.de
Fri Aug 17 17:34:05 CEST 2012


On Fri, 17 Aug 2012, Henning Thielemann wrote:

> The doc of base-4.5:Foreign.ForeignPtr.addForeignPtrFinalizer states:
>   "This function adds a finalizer to the given foreign object. The finalizer 
> will run before all other finalizers for the same object which have already 
> been registered."
>
>
> I do
>
>  addForeignPtrFinalizer finalize1 fp
>  addForeignPtrFinalizer finalize2 fp
>
> and let the finalizers print something when they are started.
> I get the output:
>
>  finalizer1
>  finalizer2
>
> This indicates that the newly added finalizer is run _after_ the finalizers 
> that are already registered. Is this a documentation bug or a bug in the base 
> library?


Hm, it seems to depend on the context. In some situations I get the 
correct (reversed) order

   finalizer2
   finalizer1

and in others I get finalizer1 first and then finalizer2. Any hint what 
can change the order of finalizers?



More information about the FFI mailing list