cvs commit: src/sys/kern kern_fork.c
davidxu at FreeBSD.org
Wed Oct 24 19:32:20 PDT 2007
Alfred Perlstein wrote:
> * David Xu <davidxu at FreeBSD.org> [071024 18:34] wrote:
>>Julian Elischer wrote:
>>>julian 2007-10-23 17:54:16 UTC
>>> FreeBSD src repository
>>> Modified files:
>>> sys/kern kern_fork.c
>>> Take out the single-threading code in fork.
>>> After discussions with jeff, alc, (various Ironport people), david Xu,
>>> and mostly Alfred (who found the problem) it has been demonstrated that
>>> is not needed for our implementations of threads and represents a real
>>> (as in we've seen it happen a lot) deadlock danger.
>>I think if process is forking a thread, that says flag RFPROC is not
>>set and flags RFCFDG or RFCFDG is set, you still need to call
>>thread_single(SINGLE_BOUNDARY), otherwise, for a threaded process,
>>the memory pointed by p_fd is freed while other threads are using it,
>>it will cause kernel to panic.
> This is unlikely to be fixed by SINGLE_BOUNDARY and will likely require
> refcounting to fix. SINGLE_BOUNDARY will not fix the locations where
> this happens:
> p = td->td_proc;
> fdp = p->p_fd;
> do something that blocks...
> re-use fdp.
thread_suspend_check() with SINGLE_BOUNDARY is used is only called
in userret() where I don't think any code is still using the p_fd.
More information about the cvs-src