Releasing resources associated with a RTS worker thread?
Joe Hendrix
jhendrix at galois.com
Mon Aug 24 06:23:40 UTC 2015
I am working on FFI bindings to C++ code that associates several memory pools to each thread using the library. When a thread is done using the library, it can call a C function to release the memory pool objects.
In the Haskell bindings, I’d like to be able to attach a finalizer that called this cleanup code whenever an RTS OS thread is shutdown. It appeared that the main place that happens is here:
https://github.com/ghc/ghc/blob/master/rts/Capability.c#L562-L577
I did not see a way to register a finalizer that is run before the call to shutdownThread. Could this be something worth adding to the RTS?
It seems like the most straightforward way would be to add a finalizer list to each task object, and expose a C function for adding callbacks to it.
As a fallback, it should be possible to modify the memory pools in the C++ code so that they can be disabled. According to the author of the C++ code, this should have about a 10% slowdown on execution, so it would be nice if I could keep them enabled without a risk of memory leaks.
Regards,
Joe
More information about the ghc-devs
mailing list