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