Date: Thu, 24 Jan 2008 17:32:51 -0500 (EST) From: Daniel Eischen <deischen@freebsd.org> To: Alfred Perlstein <alfred@freebsd.org> Cc: Gary Stanley <gary@velocity-servers.net>, Julian Elischer <julian@elischer.org>, freebsd-threads@freebsd.org Subject: Re: threads/119920: fork broken in libpthread Message-ID: <Pine.GSO.4.64.0801241732070.16957@sea.ntplx.net> In-Reply-To: <20080124222339.GT99258@elvis.mu.org> References: <200801240850.m0O8o2JQ023500@freefall.freebsd.org> <4798564B.7070500@elischer.org> <20080124222339.GT99258@elvis.mu.org>
index | next in thread | previous in thread | raw e-mail
[-- Attachment #1 --] On Thu, 24 Jan 2008, Alfred Perlstein wrote: > * Julian Elischer <julian@elischer.org> [080124 01:17] wrote: >> Gary Stanley wrote: >>> The following reply was made to PR threads/119920; it has been noted by >>> GNATS. >>> >>> From: Gary Stanley <gary@velocity-servers.net> >>> To: bug-followup@FreeBSD.org >>> Cc: >>> Subject: Re: threads/119920: fork broken in libpthread >>> Date: Thu, 24 Jan 2008 03:24:47 -0500 >>> >>> I also have this problem, see threads/118715 >>> >>> I was able to grab some ktrace info, but most of the time the process >>> is stuck, and ktrace doesn't display any data. >>> >>> _______________________________________________ >>> freebsd-threads@freebsd.org mailing list >>> http://lists.freebsd.org/mailman/listinfo/freebsd-threads >>> To unsubscribe, send any mail to "freebsd-threads-unsubscribe@freebsd.org" >> >> dan what IS the fix for this? I assume you must have fixed it in >> -current/7 >> >> what was YOUR fix alfred? > > Attached. Which isn't a correct fix, BTW. It is possible that the unlock can try to give the lock to a non-existent thread. -- DE [-- Attachment #2 --] Index: thr_fork.c =================================================================== RCS file: /home/ncvs/src/lib/libpthread/thread/Attic/thr_fork.c,v retrieving revision 1.35 diff -u -r1.35 thr_fork.c --- thr_fork.c 18 Dec 2004 18:07:37 -0000 1.35 +++ thr_fork.c 29 Oct 2007 05:25:32 -0000 @@ -93,7 +93,10 @@ if (_kse_isthreaded() != 0) { _spinlock(__malloc_lock); } - if ((ret = __sys_fork()) == 0) { + THR_SCHED_LOCK(curthread, curthread); + ret = __sys_fork(); + THR_SCHED_UNLOCK(curthread, curthread); + if (ret == 0) { /* Child process */ errsave = errno;help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.64.0801241732070.16957>
