diff options
author | jhb <jhb@FreeBSD.org> | 2002-05-02 15:00:14 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2002-05-02 15:00:14 +0000 |
commit | ce5fb0dc3a9dceadd1025cd914419a513a3cd2e8 (patch) | |
tree | c7dd403e494562a62be2fbe834e937947ade7cb0 /sys/kern/kern_sig.c | |
parent | a17be2ef95a46ba15dde9b606a54d90d9055efbf (diff) | |
download | FreeBSD-src-ce5fb0dc3a9dceadd1025cd914419a513a3cd2e8.zip FreeBSD-src-ce5fb0dc3a9dceadd1025cd914419a513a3cd2e8.tar.gz |
- Reorder execve() so that it performs blocking operations before it
locks the process.
- Defer other blocking operations such as vrele()'s until after we
release locks.
- execsigs() now requires the proc lock to be held when it is called
rather than locking the process internally.
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r-- | sys/kern/kern_sig.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c index 4c1b683..5cb7ed0 100644 --- a/sys/kern/kern_sig.c +++ b/sys/kern/kern_sig.c @@ -479,7 +479,7 @@ execsigs(p) * through p_sigmask (unless they were caught, * and are now ignored by default). */ - PROC_LOCK(p); + PROC_LOCK_ASSERT(p, MA_OWNED); ps = p->p_sigacts; while (SIGNOTEMPTY(p->p_sigcatch)) { sig = sig_ffs(&p->p_sigcatch); @@ -505,7 +505,6 @@ execsigs(p) p->p_procsig->ps_flag &= ~(PS_NOCLDWAIT | PS_CLDSIGIGN); if (ps->ps_sigact[_SIG_IDX(SIGCHLD)] == SIG_IGN) ps->ps_sigact[_SIG_IDX(SIGCHLD)] = SIG_DFL; - PROC_UNLOCK(p); } /* |