daemon threads bug with libpthread

Chris Stenton jacs at gnome.co.uk
Wed Sep 22 07:29:40 PDT 2004

Thanks Dan,

As you can see I do a pthread_join before the daemon call so all threads 
should be closed at that point. There must be some residual state left.


----- Original Message ----- 
From: "Daniel Eischen" <deischen at freebsd.org>
To: "Chris Stenton" <jacs at gnome.co.uk>
Cc: <freebsd-current at freebsd.org>; <threads at freebsd.org>
Sent: Wednesday, September 22, 2004 12:59 PM
Subject: Re: daemon threads bug with libpthread

> 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