From cb50725b866ef7020f9bd82a1c39d4d8f7158e97 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 2 Feb 2026 10:50:30 +0000 Subject: Use `compare_exchange_strong` `mutex_lock` on non-windows sytems --- src/threading.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/threading.cpp') diff --git a/src/threading.cpp b/src/threading.cpp index 02e6de14b..3b2f304e1 100644 --- a/src/threading.cpp +++ b/src/threading.cpp @@ -367,16 +367,16 @@ gb_internal void semaphore_wait(Semaphore *s) { gb_internal void mutex_lock(BlockingMutex *m) { ANNOTATE_LOCK_PRE(m, 0); - i32 v = m->state().exchange(Internal_Mutex_State_Locked, std::memory_order_acquire); - if (v != Internal_Mutex_State_Unlocked) { + i32 expected = Internal_Mutex_State_Unlocked; + if (m->state().compare_exchange_strong(expected, Internal_Mutex_State_Locked, std::memory_order_acquire)) { mutex_lock_slow(m, v); } ANNOTATE_LOCK_POST(m); } gb_internal bool mutex_try_lock(BlockingMutex *m) { ANNOTATE_LOCK_PRE(m, 1); - i32 v = m->state().exchange(Internal_Mutex_State_Locked, std::memory_order_acquire); - if (v == Internal_Mutex_State_Unlocked) { + i32 expected = Internal_Mutex_State_Unlocked; + if (m->state().compare_exchange_strong(expected, Internal_Mutex_State_Locked, std::memory_order_acquire)) { ANNOTATE_LOCK_POST(m); return true; } -- cgit v1.2.3 From 21509ae3f4071dc3c520b4cd58e80ade4be41ce4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 2 Feb 2026 11:06:16 +0000 Subject: Fix `mutex_lock` --- src/threading.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/threading.cpp') diff --git a/src/threading.cpp b/src/threading.cpp index 3b2f304e1..d47421a80 100644 --- a/src/threading.cpp +++ b/src/threading.cpp @@ -369,7 +369,7 @@ gb_internal void semaphore_wait(Semaphore *s) { ANNOTATE_LOCK_PRE(m, 0); i32 expected = Internal_Mutex_State_Unlocked; if (m->state().compare_exchange_strong(expected, Internal_Mutex_State_Locked, std::memory_order_acquire)) { - mutex_lock_slow(m, v); + mutex_lock_slow(m, expected); } ANNOTATE_LOCK_POST(m); } -- cgit v1.2.3 From b183b1219c3b336988e53235a0671958b5079c09 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 2 Feb 2026 11:25:49 +0000 Subject: Revert `mutex_lock` logic --- src/threading.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/threading.cpp') diff --git a/src/threading.cpp b/src/threading.cpp index d47421a80..d8ae321f5 100644 --- a/src/threading.cpp +++ b/src/threading.cpp @@ -367,9 +367,9 @@ gb_internal void semaphore_wait(Semaphore *s) { gb_internal void mutex_lock(BlockingMutex *m) { ANNOTATE_LOCK_PRE(m, 0); - i32 expected = Internal_Mutex_State_Unlocked; - if (m->state().compare_exchange_strong(expected, Internal_Mutex_State_Locked, std::memory_order_acquire)) { - mutex_lock_slow(m, expected); + i32 v = m->state().exchange(Internal_Mutex_State_Locked, std::memory_order_acquire); + if (v != Internal_Mutex_State_Unlocked) { + mutex_lock_slow(m, v); } ANNOTATE_LOCK_POST(m); } -- cgit v1.2.3