summaryrefslogtreecommitdiffstats
path: root/sys/i386/linux
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-09-06 22:20:41 +0000
committerjhb <jhb@FreeBSD.org>2001-09-06 22:20:41 +0000
commit054237d0bedad367db7ff79d400580da3e2f908f (patch)
tree81a6a9426eb4bd4704877e5d2c62645d4c91f07e /sys/i386/linux
parentfc76d31ce4a861706e4b49312b7a2f88a61bd53d (diff)
downloadFreeBSD-src-054237d0bedad367db7ff79d400580da3e2f908f.zip
FreeBSD-src-054237d0bedad367db7ff79d400580da3e2f908f.tar.gz
Call sendsig() with the proc lock held and return with it held.
Diffstat (limited to 'sys/i386/linux')
-rw-r--r--sys/i386/linux/linux_sysvec.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/i386/linux/linux_sysvec.c b/sys/i386/linux/linux_sysvec.c
index fbb6d6f..306b411 100644
--- a/sys/i386/linux/linux_sysvec.c
+++ b/sys/i386/linux/linux_sysvec.c
@@ -215,6 +215,7 @@ linux_rt_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
struct linux_rt_sigframe *fp, frame;
int oonstack;
+ PROC_LOCK_ASSERT(p, MA_OWNED);
regs = p->p_frame;
oonstack = sigonstack(regs->tf_esp);
@@ -226,7 +227,6 @@ linux_rt_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
/*
* Allocate space for the signal handler context.
*/
- PROC_LOCK(p);
if ((p->p_flag & P_ALTSTACK) && !oonstack &&
SIGISMEMBER(p->p_sigacts->ps_sigonstack, sig)) {
fp = (struct linux_rt_sigframe *)(p->p_sigstk.ss_sp +
@@ -258,7 +258,6 @@ linux_rt_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
fp, oonstack);
#endif
psignal(p, SIGILL);
- PROC_UNLOCK(p);
return;
}
@@ -343,6 +342,7 @@ linux_rt_sendsig(sig_t catcher, int sig, sigset_t *mask, u_long code)
regs->tf_es = _udatasel;
regs->tf_fs = _udatasel;
regs->tf_ss = _udatasel;
+ PROC_LOCK(p);
}
OpenPOWER on IntegriCloud