diff --git a/common/mutex.c b/common/mutex.c index aed3238ff..6cb5bde7c 100644 --- a/common/mutex.c +++ b/common/mutex.c @@ -31,7 +31,9 @@ void mutex_init0(mutex_t *m) { } void mutex_lock(mutex_t *m, size_t tid) { - while (atomic_flag_test_and_set_explicit(&m->lock, memory_order_acquire)); + while (atomic_flag_test_and_set_explicit(&m->lock, memory_order_acquire)) { + + } atomic_store_explicit(&m->tid, tid, memory_order_release); } @@ -53,8 +55,10 @@ bool mutex_try_lock_fair(mutex_t *m, size_t tid) { return false; } -void mutex_unlock(mutex_t *m, size_t tid) { +bool mutex_unlock(mutex_t *m, size_t tid) { if (atomic_load_explicit(&m->tid, memory_order_acquire) == tid) { atomic_flag_clear_explicit(&m->lock, memory_order_release); + return true; } + return false; } diff --git a/common/mutex.h b/common/mutex.h index 29e88445f..cccfb3d9a 100644 --- a/common/mutex.h +++ b/common/mutex.h @@ -48,5 +48,5 @@ void mutex_lock(mutex_t *mutex, size_t tid); bool mutex_try_lock(mutex_t *mutex, size_t tid); // Prevents a thread from locking twice in a row. bool mutex_try_lock_fair(mutex_t *mutex, size_t tid); -void mutex_unlock(mutex_t *mutex, size_t tid); +bool mutex_unlock(mutex_t *mutex, size_t tid); #endif // __MUTEX_H__