Pārlūkot izejas kodu

Use GCC's atomic loads in SDL_AtomicGet and SDL_AtomicGetPtr

This fixes errors reported by address sanitizer, and generates simpler
code on x86 architectures.
James Legg 8 gadi atpakaļ
vecāks
revīzija
1dc9ae5c1e
1 mainītis faili ar 8 papildinājumiem un 0 dzēšanām
  1. 8 0
      src/atomic/SDL_atomic.c

+ 8 - 0
src/atomic/SDL_atomic.c

@@ -211,21 +211,29 @@ SDL_AtomicAdd(SDL_atomic_t *a, int v)
 int
 SDL_AtomicGet(SDL_atomic_t *a)
 {
+#ifdef HAVE_GCC_ATOMICS
+    return __atomic_load_n(&a->value, __ATOMIC_SEQ_CST);
+#else
     int value;
     do {
         value = a->value;
     } while (!SDL_AtomicCAS(a, value, value));
     return value;
+#endif
 }
 
 void *
 SDL_AtomicGetPtr(void **a)
 {
+#ifdef HAVE_GCC_ATOMICS
+    return __atomic_load_n(a, __ATOMIC_SEQ_CST);
+#else
     void *value;
     do {
         value = *a;
     } while (!SDL_AtomicCASPtr(a, value, value));
     return value;
+#endif
 }
 
 void