mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 23:07:35 +00:00
Kernel: Clean up sys$futex and add support for cross-process futexes
This commit is contained in:
parent
55c7496200
commit
9db10887a1
9 changed files with 164 additions and 70 deletions
|
@ -155,7 +155,7 @@ int pthread_mutex_lock(pthread_mutex_t* mutex)
|
|||
value = AK::atomic_exchange(&mutex->lock, MUTEX_LOCKED_NEED_TO_WAKE, AK::memory_order_acquire);
|
||||
|
||||
while (value != MUTEX_UNLOCKED) {
|
||||
futex_wait(&mutex->lock, value, nullptr, 0);
|
||||
futex_wait(&mutex->lock, value, nullptr, 0, false);
|
||||
value = AK::atomic_exchange(&mutex->lock, MUTEX_LOCKED_NEED_TO_WAKE, AK::memory_order_acquire);
|
||||
}
|
||||
|
||||
|
@ -172,7 +172,7 @@ int __pthread_mutex_lock_pessimistic_np(pthread_mutex_t* mutex)
|
|||
// because we know we don't. Used in the condition variable implementation.
|
||||
u32 value = AK::atomic_exchange(&mutex->lock, MUTEX_LOCKED_NEED_TO_WAKE, AK::memory_order_acquire);
|
||||
while (value != MUTEX_UNLOCKED) {
|
||||
futex_wait(&mutex->lock, value, nullptr, 0);
|
||||
futex_wait(&mutex->lock, value, nullptr, 0, false);
|
||||
value = AK::atomic_exchange(&mutex->lock, MUTEX_LOCKED_NEED_TO_WAKE, AK::memory_order_acquire);
|
||||
}
|
||||
|
||||
|
@ -195,7 +195,7 @@ int pthread_mutex_unlock(pthread_mutex_t* mutex)
|
|||
|
||||
u32 value = AK::atomic_exchange(&mutex->lock, MUTEX_UNLOCKED, AK::memory_order_release);
|
||||
if (value == MUTEX_LOCKED_NEED_TO_WAKE) [[unlikely]] {
|
||||
int rc = futex_wake(&mutex->lock, 1);
|
||||
int rc = futex_wake(&mutex->lock, 1, false);
|
||||
VERIFY(rc >= 0);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue