summaryrefslogtreecommitdiffstats
path: root/sys/sys/signalvar.h
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2009-10-30 10:10:39 +0000
committerkib <kib@FreeBSD.org>2009-10-30 10:10:39 +0000
commitf2a32c79ab8801e28a77d82b70d9621cbc93bc1e (patch)
tree71a761f08c33278d7e27caa229231c7844e1d897 /sys/sys/signalvar.h
parent0f387cfc4635b54215dfea282d0cc03d4012fba0 (diff)
downloadFreeBSD-src-f2a32c79ab8801e28a77d82b70d9621cbc93bc1e.zip
FreeBSD-src-f2a32c79ab8801e28a77d82b70d9621cbc93bc1e.tar.gz
Trapsignal() and postsig() call kern_sigprocmask() with both process
lock and curproc->p_sigacts->ps_mtx. Reschedule_signals may need to have ps_mtx locked to decide and wakeup a thread, causing recursion on the mutex. Inform kern_sigprocmask() and reschedule_signals() about lock state of the ps_mtx by new flag SIGPROCMASK_PS_LOCKED to avoid recursion. Reported and tested by: keramida MFC after: 1 month
Diffstat (limited to 'sys/sys/signalvar.h')
-rw-r--r--sys/sys/signalvar.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/sys/signalvar.h b/sys/sys/signalvar.h
index b9a54f0..c27a128 100644
--- a/sys/sys/signalvar.h
+++ b/sys/sys/signalvar.h
@@ -319,6 +319,7 @@ extern int kern_logsigexit; /* Sysctl variable kern.logsigexit */
/* flags for kern_sigprocmask */
#define SIGPROCMASK_OLD 0x0001
#define SIGPROCMASK_PROC_LOCKED 0x0002
+#define SIGPROCMASK_PS_LOCKED 0x0004
/*
* Machine-independent functions:
OpenPOWER on IntegriCloud