Index: apr/atomic/unix/builtins.c =================================================================== --- apr.orig/atomic/unix/builtins.c +++ apr/atomic/unix/builtins.c @@ -23,50 +23,54 @@ APR_DECLARE(apr_status_t) apr_atomic_ini return APR_SUCCESS; } -APR_DECLARE(apr_uint32_t) apr_atomic_read32(volatile apr_uint32_t *mem) +APR_DECLARE(apr_uint32_t) apr_atomic_read32(apr_uint32_t *mem) { + __sync_synchronize(); + return *mem; } -APR_DECLARE(void) apr_atomic_set32(volatile apr_uint32_t *mem, apr_uint32_t val) +APR_DECLARE(void) apr_atomic_set32(apr_uint32_t *mem, apr_uint32_t val) { *mem = val; + + __sync_synchronize(); } -APR_DECLARE(apr_uint32_t) apr_atomic_add32(volatile apr_uint32_t *mem, apr_uint32_t val) +APR_DECLARE(apr_uint32_t) apr_atomic_add32(apr_uint32_t *mem, apr_uint32_t val) { return __sync_fetch_and_add(mem, val); } -APR_DECLARE(void) apr_atomic_sub32(volatile apr_uint32_t *mem, apr_uint32_t val) +APR_DECLARE(void) apr_atomic_sub32(apr_uint32_t *mem, apr_uint32_t val) { __sync_fetch_and_sub(mem, val); } -APR_DECLARE(apr_uint32_t) apr_atomic_inc32(volatile apr_uint32_t *mem) +APR_DECLARE(apr_uint32_t) apr_atomic_inc32(apr_uint32_t *mem) { return __sync_fetch_and_add(mem, 1); } -APR_DECLARE(int) apr_atomic_dec32(volatile apr_uint32_t *mem) +APR_DECLARE(int) apr_atomic_dec32(apr_uint32_t *mem) { return __sync_sub_and_fetch(mem, 1); } -APR_DECLARE(apr_uint32_t) apr_atomic_cas32(volatile apr_uint32_t *mem, apr_uint32_t with, +APR_DECLARE(apr_uint32_t) apr_atomic_cas32(apr_uint32_t *mem, apr_uint32_t with, apr_uint32_t cmp) { return __sync_val_compare_and_swap(mem, cmp, with); } -APR_DECLARE(apr_uint32_t) apr_atomic_xchg32(volatile apr_uint32_t *mem, apr_uint32_t val) +APR_DECLARE(apr_uint32_t) apr_atomic_xchg32(apr_uint32_t *mem, apr_uint32_t val) { __sync_synchronize(); return __sync_lock_test_and_set(mem, val); } -APR_DECLARE(void*) apr_atomic_casptr(volatile void **mem, void *with, const void *cmp) +APR_DECLARE(void*) apr_atomic_casptr(void **mem, void *with, void *cmp) { return (void*) __sync_val_compare_and_swap(mem, cmp, with); }