diff options
author | jhb <jhb@FreeBSD.org> | 2001-09-06 22:20:41 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2001-09-06 22:20:41 +0000 |
commit | 054237d0bedad367db7ff79d400580da3e2f908f (patch) | |
tree | 81a6a9426eb4bd4704877e5d2c62645d4c91f07e /sys/i386/linux | |
parent | fc76d31ce4a861706e4b49312b7a2f88a61bd53d (diff) | |
download | FreeBSD-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.c | 4 |
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); } |