Finalizers and FFI
Alastair Reid
alastair at reid-consulting-uk.ltd.uk
Thu Jun 10 06:22:37 EDT 2004
> [program deleted]
>
> So, this basically means that my finalizer did not get run :(
> [...]
> It should run, in separate thread or not, it doesn't matter here.
>
> Any ideas why doesn't it work?
Hopefully the GHC folk will correct me if I'm wrong but I think what happens
is:
- you allocate object with finalizer
- the object becomes inaccessible
- performGC causes the object to be freed by the garbage collector
- the garbage collector schedules a thread to run your finalizer
BUT
- before the finalizer thread has a chance to be scheduled, your
program exits.
You could give the finalizer thread a chance to run by calling
Control.Concurrent.yield before exiting:
http://etudiants.insia.org/~jbobbio/pafp/docs/base/Control.Concurrent.html#v%
3Ayield
That is, call yield just after calling performGC.
--
Alastair Reid
More information about the Glasgow-haskell-users
mailing list