diff options
author | davidxu <davidxu@FreeBSD.org> | 2003-06-06 02:17:38 +0000 |
---|---|---|
committer | davidxu <davidxu@FreeBSD.org> | 2003-06-06 02:17:38 +0000 |
commit | 9a8a455a6a40bd0f5b70e3d3a8bdbf6f4eaaebf5 (patch) | |
tree | 4e197ab2b4ad10978ab2ac28f8de56906212c113 /sys/kern/kern_thread.c | |
parent | 760be5c8cae4dbbdebbf5710ff2278fcecdd114b (diff) | |
download | FreeBSD-src-9a8a455a6a40bd0f5b70e3d3a8bdbf6f4eaaebf5.zip FreeBSD-src-9a8a455a6a40bd0f5b70e3d3a8bdbf6f4eaaebf5.tar.gz |
thread_signal_add now is called with ps_mtx held, unlock it before
calling copyin.
Diffstat (limited to 'sys/kern/kern_thread.c')
-rw-r--r-- | sys/kern/kern_thread.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c index 0dcadeb..ed37c48 100644 --- a/sys/kern/kern_thread.c +++ b/sys/kern/kern_thread.c @@ -1397,11 +1397,12 @@ thread_signal_add(struct thread *td, int sig) sigset_t ss; int error; - PROC_LOCK_ASSERT(td->td_proc, MA_OWNED); + p = td->td_proc; + PROC_LOCK_ASSERT(p, MA_OWNED); + mtx_assert(&p->p_sigacts->ps_mtx, MA_OWNED); td = curthread; ku = td->td_upcall; - p = td->td_proc; - + mtx_unlock(&p->p_sigacts->ps_mtx); PROC_UNLOCK(p); error = copyin(&ku->ku_mailbox->km_sigscaught, &ss, sizeof(sigset_t)); if (error) @@ -1414,6 +1415,7 @@ thread_signal_add(struct thread *td, int sig) goto error; PROC_LOCK(p); + mtx_lock(&p->p_sigacts->ps_mtx); return; error: PROC_LOCK(p); |