diff --git a/include/aux.h b/include/aux.h index df1a0e926..11e20fc37 100644 --- a/include/aux.h +++ b/include/aux.h @@ -364,14 +364,16 @@ INLINE int bit_array_clear(volatile unsigned int *name, unsigned int bit) { #if GLIB_SIZEOF_VOID_P >= 8 typedef struct { - volatile void *p; + void *p; } atomic64; INLINE uint64_t atomic64_get(const atomic64 *u) { - return (uint64_t) g_atomic_pointer_get(&u->p); + void **p = (void *) &u->p; + return (uint64_t) g_atomic_pointer_get(p); } INLINE uint64_t atomic64_get_na(const atomic64 *u) { - return (uint64_t) u->p; + void **p = (void *) &u->p; + return (uint64_t) *p; } INLINE void atomic64_set(atomic64 *u, uint64_t a) { g_atomic_pointer_set(&u->p, (void *) a); @@ -389,7 +391,7 @@ INLINE uint64_t atomic64_get_set(atomic64 *u, uint64_t a) { uint64_t old; do { old = atomic64_get(u); - if (g_atomic_pointer_compare_and_exchange(&u->p, (volatile void *) old, (void *) a)) + if (g_atomic_pointer_compare_and_exchange(&u->p, (void *) old, (void *) a)) return old; } while (1); }