summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_sig.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2002-05-02 15:00:14 +0000
committerjhb <jhb@FreeBSD.org>2002-05-02 15:00:14 +0000
commitce5fb0dc3a9dceadd1025cd914419a513a3cd2e8 (patch)
treec7dd403e494562a62be2fbe834e937947ade7cb0 /sys/kern/kern_sig.c
parenta17be2ef95a46ba15dde9b606a54d90d9055efbf (diff)
downloadFreeBSD-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.c3
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);
}
/*
OpenPOWER on IntegriCloud