From 02315a6759bbdad0ce55b2dbc76dbe2037fb6611 Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Sat, 10 Dec 2016 02:59:34 +0000 Subject: [PATCH] Use a consistent snapshot of the lock state in owner_mtx(). MFC after: 2 weeks --- sys/kern/kern_mutex.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sys/kern/kern_mutex.c b/sys/kern/kern_mutex.c index bd053c7bb7b..41b88213632 100644 --- a/sys/kern/kern_mutex.c +++ b/sys/kern/kern_mutex.c @@ -249,10 +249,13 @@ unlock_spin(struct lock_object *lock) int owner_mtx(const struct lock_object *lock, struct thread **owner) { - const struct mtx *m = (const struct mtx *)lock; + const struct mtx *m; + uintptr_t x; - *owner = mtx_owner(m); - return (mtx_unowned(m) == 0); + m = (const struct mtx *)lock; + x = m->mtx_lock; + *owner = (struct thread *)(x & ~MTX_FLAGMASK); + return (x != MTX_UNOWNED); } #endif