summaryrefslogtreecommitdiff
path: root/sys/kern/kern_rwlock.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_rwlock.c')
-rw-r--r--sys/kern/kern_rwlock.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/kern/kern_rwlock.c b/sys/kern/kern_rwlock.c
index 4a1f8c776c6d..617316b53650 100644
--- a/sys/kern/kern_rwlock.c
+++ b/sys/kern/kern_rwlock.c
@@ -679,11 +679,11 @@ _rw_wunlock_hard(struct rwlock *rw, uintptr_t tid, const char *file, int line)
* of waiters or doing some complicated lock handoff gymnastics.
*/
v = RW_UNLOCKED;
- if (rw->rw_lock & RW_LOCK_READ_WAITERS) {
- queue = TS_SHARED_QUEUE;
- v |= (rw->rw_lock & RW_LOCK_WRITE_WAITERS);
- } else
+ if (rw->rw_lock & RW_LOCK_WRITE_WAITERS) {
queue = TS_EXCLUSIVE_QUEUE;
+ v |= (rw->rw_lock & RW_LOCK_READ_WAITERS);
+ } else
+ queue = TS_SHARED_QUEUE;
/* Wake up all waiters for the specific queue. */
if (LOCK_LOG_TEST(&rw->lock_object, 0))