Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/kern_fork.c
Show First 20 Lines • Show All 522 Lines • ▼ Show 20 Lines | else | ||||
p2->p_sigparent = SIGCHLD; | p2->p_sigparent = SIGCHLD; | ||||
if ((fr->fr_flags2 & FR2_KPROC) != 0) { | if ((fr->fr_flags2 & FR2_KPROC) != 0) { | ||||
p2->p_flag |= P_SYSTEM | P_KPROC; | p2->p_flag |= P_SYSTEM | P_KPROC; | ||||
td2->td_pflags |= TDP_KTHREAD; | td2->td_pflags |= TDP_KTHREAD; | ||||
} | } | ||||
p2->p_textvp = p1->p_textvp; | p2->p_textvp = p1->p_textvp; | ||||
p2->p_textdvp = p1->p_textdvp; | |||||
p2->p_fd = fd; | p2->p_fd = fd; | ||||
p2->p_fdtol = fdtol; | p2->p_fdtol = fdtol; | ||||
p2->p_pd = pd; | p2->p_pd = pd; | ||||
if (p1->p_flag2 & P2_INHERIT_PROTECTED) { | if (p1->p_flag2 & P2_INHERIT_PROTECTED) { | ||||
p2->p_flag |= P_PROTECTED; | p2->p_flag |= P_PROTECTED; | ||||
p2->p_flag2 |= P2_INHERIT_PROTECTED; | p2->p_flag2 |= P2_INHERIT_PROTECTED; | ||||
} | } | ||||
/* | /* | ||||
* p_limit is copy-on-write. Bump its refcount. | * p_limit is copy-on-write. Bump its refcount. | ||||
*/ | */ | ||||
lim_fork(p1, p2); | lim_fork(p1, p2); | ||||
thread_cow_get_proc(td2, p2); | thread_cow_get_proc(td2, p2); | ||||
pstats_fork(p1->p_stats, p2->p_stats); | pstats_fork(p1->p_stats, p2->p_stats); | ||||
PROC_UNLOCK(p1); | PROC_UNLOCK(p1); | ||||
PROC_UNLOCK(p2); | PROC_UNLOCK(p2); | ||||
/* Bump references to the text vnode (for procfs). */ | /* | ||||
if (p2->p_textvp) | * Bump references to the text vnode and directory, and copy | ||||
* the hardlink name. | |||||
*/ | |||||
if (p2->p_textvp != NULL) | |||||
vrefact(p2->p_textvp); | vrefact(p2->p_textvp); | ||||
if (p2->p_textdvp != NULL) | |||||
vrefact(p2->p_textdvp); | |||||
p2->p_binname = p1->p_binname == NULL ? NULL : | |||||
strdup(p1->p_binname, M_PARGS); | |||||
/* | /* | ||||
* Set up linkage for kernel based threading. | * Set up linkage for kernel based threading. | ||||
*/ | */ | ||||
if ((fr->fr_flags & RFTHREAD) != 0) { | if ((fr->fr_flags & RFTHREAD) != 0) { | ||||
mtx_lock(&ppeers_lock); | mtx_lock(&ppeers_lock); | ||||
p2->p_peers = p1->p_peers; | p2->p_peers = p1->p_peers; | ||||
p1->p_peers = p2; | p1->p_peers = p2; | ||||
▲ Show 20 Lines • Show All 597 Lines • Show Last 20 Lines |