Date: Thu, 17 Jan 2008 17:42:58 -0800 From: Julian Elischer <julian@elischer.org> To: Landon Fuller <landonf@threerings.net> Cc: nate@yogotech.com, ivo@scito.com, Alfred Perlstein <alfred@freebsd.org>, Daniel Eischen <deischen@freebsd.org>, davidxu@freebsd.org, java@freebsd.org, julian@freebsd.org Subject: Re: cvs commit: src/lib/libkse/thread thr_kern.c Message-ID: <47900422.9050905@elischer.org> In-Reply-To: <478FFF09.7020207@elischer.org> References: <200711301716.lAUHGEV1064334@repoman.freebsd.org> <wpprxrto0s.fsf@heho.snv.jussieu.fr> <Pine.GSO.4.64.0711301659060.5465@sea.ntplx.net> <wpwsrz9uyr.fsf@heho.snv.jussieu.fr> <Pine.GSO.4.64.0711301849310.6581@sea.ntplx.net> <wphcj2plsx.fsf@heho.snv.jussieu.fr> <Pine.GSO.4.64.0712011824130.11446@sea.ntplx.net> <wphcj1dmvz.fsf@heho.snv.jussieu.fr> <90584F61-91FE-446E-978E-FD234553E8FC@threerings.net> <478FFC91.4050508@elischer.org> <4E316E30-3A6B-4E58-A701-E85389BEC6EE@threerings.net> <478FFF09.7020207@elischer.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Julian Elischer wrote:
> Landon Fuller wrote:
>>
>> On Jan 17, 2008, at 17:10, Julian Elischer wrote:
>>
>>> I gather it is the PARENT that hangs here?
>>>
>>
>> Parent continues, the child hangs in fork().
>
> no the child hangs in mutex_lock_common()
>
> please do a ktrace of the program and send that to me
>
Here's my guess as to what is happening:
thos is not based on code..
thread 1 calls the dummy fork(3)
thread 2 calls the dummy fork(3)
thread 1 calls fork(2), (the syscall, from within the dummy fork)
thread2 calls fork(2) (the real one in the kernel)
thread 1 proceeds
thread 2 blocks on a VM lock until thread 1 completes
kernel duplicates the memory space
thread 1 returns from fork(2)
thread 1 takes out mutex X inside dummy fork(3)
thread 2 proceeeds in the kernel on forking.
kernel duplicates the memory space (including mutex X)
thread 2 returns from kernel and looks for mutex X
thread 2 in client tries to take out mutex X inside dummy fork(3) and
waits.
thread 1 releases mutex X
thread 2 proceeeds
================================
in child1 thread1 runs fine.
in child2 thread2 waits for thread 1 to drop the mutex
(there is no thread1)
the question is: what is the mutex being acquired AFTER forking?
Dan?
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?47900422.9050905>
