Skip site navigation (1)Skip section navigation (2)
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>