Re: daemon threads bug with libpthread

From: Chris Stenton <jacs_at_gnome.co.uk>
Date: Wed, 22 Sep 2004 15:29:32 +0100
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.

Chris

----- 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
> 
Received on Wed Sep 22 2004 - 12:29:40 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:13 UTC