From b3d011b90ac6ca4a1037b66d8d59e34d48e05036 Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Thu, 6 Mar 2025 09:59:37 -0500 Subject: [PATCH] kernel/locks: Assert in rw_lock_wait that we weren't spuriously unblocked. May have caught #19458 earlier, depending on cause. Change-Id: Ib5dd4ef72474f944946e1dae214c49fe440669bc Reviewed-on: https://review.haiku-os.org/c/haiku/+/9086 Reviewed-by: waddlesplash --- src/system/kernel/locks/lock.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/locks/lock.cpp b/src/system/kernel/locks/lock.cpp index e53ebc72f8..4008d0b239 100644 --- a/src/system/kernel/locks/lock.cpp +++ b/src/system/kernel/locks/lock.cpp @@ -320,6 +320,7 @@ rw_lock_wait(rw_lock* lock, bool writer, InterruptsSpinLocker& locker) status_t result = thread_block(); locker.Lock(); + ASSERT(result != B_OK || waiter.thread == NULL); return result; } @@ -347,8 +348,8 @@ rw_lock_unblock(rw_lock* lock) // unblock thread thread_unblock(waiter->thread, B_OK); - waiter->thread = NULL; + return RW_LOCK_WRITER_COUNT_BASE; } @@ -364,7 +365,6 @@ rw_lock_unblock(rw_lock* lock) // unblock thread thread_unblock(waiter->thread, B_OK); - waiter->thread = NULL; } while ((waiter = lock->waiters) != NULL && !waiter->writer);