summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordavidxu <davidxu@FreeBSD.org>2003-06-06 02:17:38 +0000
committerdavidxu <davidxu@FreeBSD.org>2003-06-06 02:17:38 +0000
commit9a8a455a6a40bd0f5b70e3d3a8bdbf6f4eaaebf5 (patch)
tree4e197ab2b4ad10978ab2ac28f8de56906212c113 /sys
parent760be5c8cae4dbbdebbf5710ff2278fcecdd114b (diff)
downloadFreeBSD-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')
-rw-r--r--sys/kern/kern_kse.c8
-rw-r--r--sys/kern/kern_thread.c8
2 files changed, 10 insertions, 6 deletions
diff --git a/sys/kern/kern_kse.c b/sys/kern/kern_kse.c
index 0dcadeb..ed37c48 100644
--- a/sys/kern/kern_kse.c
+++ b/sys/kern/kern_kse.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);
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);
OpenPOWER on IntegriCloud