The previous form could cause the inner loop with YieldProcessor to
only read a cached stale value. Therefore, just iterate
YieldProcessor with InterlockedExchangePointer for attempting to
update the value.

Signed-off-by: Martin Storsjö <[email protected]>
---
 mingw-w64-libraries/winpthreads/src/spinlock.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/mingw-w64-libraries/winpthreads/src/spinlock.c 
b/mingw-w64-libraries/winpthreads/src/spinlock.c
index 6e094d5ff..5dca17502 100644
--- a/mingw-w64-libraries/winpthreads/src/spinlock.c
+++ b/mingw-w64-libraries/winpthreads/src/spinlock.c
@@ -59,9 +59,7 @@ pthread_spin_lock (pthread_spinlock_t *lock)
 {
   volatile spinlock_word_t *lk = (volatile spinlock_word_t *)lock;
   while (unlikely(InterlockedExchangePointer((PVOID volatile *)lk, 0) == 0))
-    do {
-      YieldProcessor();
-    } while (*lk == 0);
+    YieldProcessor();
   return 0;
 }
 
-- 
2.43.0



_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to