LibPthread: Correct nonsensical loop exit condition in RWLock unlock

The loop should terminate after the exchange happens, we shouldn't
repeat the operation until the count hits zero.
Fixes #10241.
This commit is contained in:
Ali Mohammad Pur 2021-09-28 12:34:51 +03:30
parent b63ea3bad1
commit 72a45a472a
Notes: sideshowbarker 2024-07-18 03:23:03 +09:00

View file

@ -781,8 +781,9 @@ int pthread_rwlock_unlock(pthread_rwlock_t* lockval_p)
--count;
auto desired = (current & 0xffff0000u) | count;
auto did_exchange = AK::atomic_compare_exchange_strong(lockp, current, desired, AK::MemoryOrder::memory_order_release);
if (!did_exchange)
continue; // tough luck, try again.
if (did_exchange)
break;
// tough luck, try again.
}
// Finally, unlocked at last!