From 1dc9ae5c1e058a7e6b1711ba031bc2ceb95cf6aa Mon Sep 17 00:00:00 2001 From: James Legg Date: Wed, 29 Mar 2017 15:48:22 +0100 Subject: [PATCH] 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. --- src/atomic/SDL_atomic.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/atomic/SDL_atomic.c b/src/atomic/SDL_atomic.c index 828efee76b3ed..7b4865c834785 100644 --- a/src/atomic/SDL_atomic.c +++ b/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