On Thu, Feb 09, 2017 at 09:20:53AM +0100, Martin Husemann wrote: > On Wed, Feb 08, 2017 at 10:36:37PM +0100, Joerg Sonnenberger wrote: > > Sorry, wrong rant. That was for the TLS destructor problem where similar > > crude hacks exist. The FreeBSD "solution" is still wrong. Introducing > > __pthread_cxa_finalize or even a public interface for that is fine. > > Iterating over all text segments to guess what handlers to remove is > > definitely not fine. > > If we are not going to do what all others do, I would suggest the very > most simple solution: > > Add > > int > pthread_atfork_deregister(void (*prepare)(void), void (*parent)(void), > void (*child)(void)); > > and make it remove the handlers from the internal list if != NULL. > > Then the DSO can just handle it all "manually" in a destructor function.
This is quite fragile as it effectively means that the handler should only ever be a function the current DSO, since other modules may want to register the very same handler too. Joerg