Re: daemon threads bug with libpthread

From: Daniel Eischen <deischen_at_freebsd.org>
Date: Wed, 22 Sep 2004 07:59:34 -0400 (EDT)
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 - 09:59:36 UTC

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