summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2003-03-04 20:30:30 +0000
committerjhb <jhb@FreeBSD.org>2003-03-04 20:30:30 +0000
commit3b2bb7e47b9eeacda34542c9c0135f7cff2bbeab (patch)
treebfadcba251e0434b249b1568c7be8a0e8f454a12 /sys
parent1ccbcbaf68651bd65369b9652ccc30689893ec82 (diff)
downloadFreeBSD-src-3b2bb7e47b9eeacda34542c9c0135f7cff2bbeab.zip
FreeBSD-src-3b2bb7e47b9eeacda34542c9c0135f7cff2bbeab.tar.gz
Properly assert that mtx_trylock() is not called on a mutex we already
owned. Previously the KASSERT would only trigger if we successfully acquired a lock that we already held. However, _obtain_lock() fails to acquire locks that we already hold, so the KASSERT was never checked in the case it was supposed to fail.
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/kern_mutex.c12
-rw-r--r--sys/kern/subr_turnstile.c12
2 files changed, 8 insertions, 16 deletions
diff --git a/sys/kern/kern_mutex.c b/sys/kern/kern_mutex.c
index 039621b..f5641c5 100644
--- a/sys/kern/kern_mutex.c
+++ b/sys/kern/kern_mutex.c
@@ -464,19 +464,15 @@ _mtx_trylock(struct mtx *m, int opts, const char *file, int line)
MPASS(curthread != NULL);
+ KASSERT(!mtx_owned(m),
+ ("mtx_trylock() called on a mutex already owned"));
+
rval = _obtain_lock(m, curthread);
LOCK_LOG_TRY("LOCK", &m->mtx_object, opts, rval, file, line);
- if (rval) {
- /*
- * We do not handle recursion in _mtx_trylock; see the
- * note at the top of the routine.
- */
- KASSERT(!mtx_recursed(m),
- ("mtx_trylock() called on a recursed mutex"));
+ if (rval)
WITNESS_LOCK(&m->mtx_object, opts | LOP_EXCLUSIVE | LOP_TRYLOCK,
file, line);
- }
return (rval);
}
diff --git a/sys/kern/subr_turnstile.c b/sys/kern/subr_turnstile.c
index 039621b..f5641c5 100644
--- a/sys/kern/subr_turnstile.c
+++ b/sys/kern/subr_turnstile.c
@@ -464,19 +464,15 @@ _mtx_trylock(struct mtx *m, int opts, const char *file, int line)
MPASS(curthread != NULL);
+ KASSERT(!mtx_owned(m),
+ ("mtx_trylock() called on a mutex already owned"));
+
rval = _obtain_lock(m, curthread);
LOCK_LOG_TRY("LOCK", &m->mtx_object, opts, rval, file, line);
- if (rval) {
- /*
- * We do not handle recursion in _mtx_trylock; see the
- * note at the top of the routine.
- */
- KASSERT(!mtx_recursed(m),
- ("mtx_trylock() called on a recursed mutex"));
+ if (rval)
WITNESS_LOCK(&m->mtx_object, opts | LOP_EXCLUSIVE | LOP_TRYLOCK,
file, line);
- }
return (rval);
}
OpenPOWER on IntegriCloud