diff options
Diffstat (limited to 'sys/kern/kern_fork.c')
-rw-r--r-- | sys/kern/kern_fork.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index 2ab9b363f8b5..7f6abae187b3 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -610,10 +610,12 @@ do_fork(struct thread *td, struct fork_req *fr, struct proc *p2, struct thread * p2->p_flag |= p1->p_flag & P_SUGID; td2->td_pflags |= td->td_pflags & (TDP_ALTSTACK | TDP_SIGFASTBLOCK); td2->td_pflags2 |= td->td_pflags2 & TDP2_UEXTERR; - SESS_LOCK(p1->p_session); - if (p1->p_session->s_ttyvp != NULL && p1->p_flag & P_CONTROLT) - p2->p_flag |= P_CONTROLT; - SESS_UNLOCK(p1->p_session); + if (p1->p_flag & P_CONTROLT) { + SESS_LOCK(p1->p_session); + if (p1->p_session->s_ttyvp != NULL) + p2->p_flag |= P_CONTROLT; + SESS_UNLOCK(p1->p_session); + } if (fr->fr_flags & RFPPWAIT) p2->p_flag |= P_PPWAIT; |