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