Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Sep 2004 07:59:34 -0400 (EDT)
From:      Daniel Eischen <deischen@freebsd.org>
To:        Chris Stenton <jacs@gnome.co.uk>
Cc:        freebsd-current@freebsd.org
Subject:   Re: daemon threads bug with libpthread
Message-ID:  <Pine.GSO.4.43.0409220753140.857-100000@sea.ntplx.net>
In-Reply-To: <1095840348.23443.14.camel@hawk.gnome.co.uk>

next in thread | previous in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.43.0409220753140.857-100000>