pthread_atfork vs dlopen/dlclose
Kevin Schnitzius
kometes@yahoo.com
Thu Apr 10 06:04:34 GMT 2025
On Wednesday, April 9, 2025 at 06:54:34 PM EDT, Jeremy Drake via Cygwin <cygwin@cygwin.com> wrote:
> The recent issue with pthread_atfork handlers reminded me of a scenario
> that I know glibc handles, but it seems that Cygwin does not. Test case:
<... code that loads a shared lib, registers some functions in shared lib with pthread_atfork(), unloads the shared lib, and crashes on fork...>
Calling functions in an unloaded library should result in undefined behavior.
However, further investigation reveals that the Linux pthread_atfork() registered functions are not being called and POSIX does not proved a mechanism for un-registering these functions. Note: pthread_atfork() is not bumping the ref count on the shared lib--those functions are definitely unavailable after the dlclose()
In the Cygwin version, calling the functions in the unloaded library when the fork happens causes the crash.
This seems to be a bug with fork(), if it is a bug at all.
Kevin
More information about the Cygwin
mailing list