summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_mutex.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-03-07 02:45:15 +0000
committerjhb <jhb@FreeBSD.org>2001-03-07 02:45:15 +0000
commit46333fa556c039ed915ed4cab16345fcb3a7c0c1 (patch)
tree05e1ba57500c4661d59795459d46748138d63705 /sys/kern/kern_mutex.c
parentd936d6d9be7bab125a42add7b5c3e4fbaa4a35d0 (diff)
downloadFreeBSD-src-46333fa556c039ed915ed4cab16345fcb3a7c0c1.zip
FreeBSD-src-46333fa556c039ed915ed4cab16345fcb3a7c0c1.tar.gz
- Add an extra check in priority_propagation() for UP systems to ensure we
don't end up back at ourselves which would indicate deadlock. - Add the proc lock to the witness dup_list as we may hold more than one process lock at a time. - Don't assert a mutex is owned in _mtx_unlock_sleep() as that is too late. We do the checks in the macros instead.
Diffstat (limited to 'sys/kern/kern_mutex.c')
-rw-r--r--sys/kern/kern_mutex.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/sys/kern/kern_mutex.c b/sys/kern/kern_mutex.c
index 2142de0..1ca5cca 100644
--- a/sys/kern/kern_mutex.c
+++ b/sys/kern/kern_mutex.c
@@ -216,6 +216,14 @@ propagate_priority(struct proc *p)
return;
}
+#ifndef SMP
+ /*
+ * For UP, we check to see if p is curproc (this shouldn't
+ * ever happen however as it would mean we are in a deadlock.)
+ */
+ KASSERT(p != curproc, ("Deadlock detected"));
+#endif
+
/*
* If on run queue move to new run queue, and
* quit.
@@ -501,7 +509,6 @@ _mtx_unlock_sleep(struct mtx *m, int opts, const char *file, int line)
int pri;
p = curproc;
- MPASS4(mtx_owned(m), "mtx_owned(mpp)", file, line);
if (mtx_recursed(m)) {
if (--(m->mtx_recurse) == 0)
@@ -949,6 +956,7 @@ static char *order_list[] = {
};
static char *dup_list[] = {
+ "process lock",
NULL
};
OpenPOWER on IntegriCloud