daemon threads bug with libpthread

Daniel Eischen deischen at freebsd.org
Wed Sep 22 04:59:36 PDT 2004

On Wed, 22 Sep 2004, Chris Stenton wrote:

> If you create a thread before calling daemon then the next thread you
> create after the daemon call will cause the following error from the
> libpthread library.

daemon() calls fork().  I don't think you can create a threaded
program after a fork if you are already threaded.  You have to
wait to do any threading (including mutexes and stuff) until
after the fork.

When you call daemon() there is already a thread and perhaps
some locks in the library (libc and libpthread).  After the
fork, the parent exits and the child is left.  You are single
threaded after the fork (as defined by POSIX), but libpthread
and libc have locks that may be locked by threads created
before the fork.

> Fatal error 'mutex is on list' at line 516 in file
> /usr/src/lib/libpthread/thread/thr_mutex.c (errno = 0)
> This error does not occur if you link with -lc_r, linking with -lthr
> causes a core dump. -lthr does not look very stable.
> Here is some test code. I am running FreeBSD 5.3-beta
> Please reply directly as I am not on the mailing list

Dan Eischen

More information about the freebsd-threads mailing list