spin_acquire_lock() takes a volatile pointer parameter

This commit is contained in:
Sam Lantinga
2024-09-02 08:18:25 -07:00
parent 01fa9cad80
commit 93423c1c46
+3 -3
View File
@@ -1907,9 +1907,9 @@ static FORCEINLINE void x86_clear_lock(int* sl) {
#if !defined(USE_RECURSIVE_LOCKS) || USE_RECURSIVE_LOCKS == 0 #if !defined(USE_RECURSIVE_LOCKS) || USE_RECURSIVE_LOCKS == 0
/* Plain spin locks use single word (embedded in malloc_states) */ /* Plain spin locks use single word (embedded in malloc_states) */
static int spin_acquire_lock(int *sl) { static int spin_acquire_lock(volatile long *sl) {
int spins = 0; int spins = 0;
while (*(volatile int *)sl != 0 || CAS_LOCK(sl)) { while (*sl != 0 || CAS_LOCK(sl)) {
if ((++spins & SPINS_PER_YIELD) == 0) { if ((++spins & SPINS_PER_YIELD) == 0) {
SPIN_LOCK_YIELD; SPIN_LOCK_YIELD;
} }
@@ -1917,7 +1917,7 @@ static int spin_acquire_lock(int *sl) {
return 0; return 0;
} }
#define MLOCK_T int #define MLOCK_T volatile long
#define TRY_LOCK(sl) !CAS_LOCK(sl) #define TRY_LOCK(sl) !CAS_LOCK(sl)
#define RELEASE_LOCK(sl) CLEAR_LOCK(sl) #define RELEASE_LOCK(sl) CLEAR_LOCK(sl)
#define ACQUIRE_LOCK(sl) (CAS_LOCK(sl)? spin_acquire_lock(sl) : 0) #define ACQUIRE_LOCK(sl) (CAS_LOCK(sl)? spin_acquire_lock(sl) : 0)