git: kernel - Add requires p->p_token locking and holds around fork()'s child proc
dillon at crater.dragonflybsd.org
Wed Nov 30 17:35:19 PST 2011
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Wed Nov 30 17:24:11 2011 -0800
kernel - Add requires p->p_token locking and holds around fork()'s child proc
* fork() and vfork() allocate a new process, p2, initialize, and add it to
the allproc list as well as other lists.
* These functions failed to acquire p2's token, p2 becomes visible to the
rest of the system when it's added to the allproc list. Even though p2's
state is set to SIDL, this is insufficient protection.
Acquire the token prior to adding p2 to allproc and keep holding the token
until after we have finished initializing p2.
* We must also PHOLD()/PRELE() p2 around the start_forked_proc() call
to prevent it from getting ripped out from under us (if it exits
quickly and/or detaches itself from its parent).
* Possibly fixes the random seg-faulting issue we've seen under very heavy
fork/exec (parallel compile) loads on the 48-core monster.
Summary of changes:
sys/kern/kern_fork.c | 88 ++++++++++++++++++++++++++++++++-----------------
1 files changed, 57 insertions(+), 31 deletions(-)
DragonFly BSD source repository
More information about the Commits