postgres.git / summary / log / commit / refs

commit    88bcdf9da5aa67da11ada0921703432ef2b7c21c
Author:   Andres Freund <andres@anarazel.de>
Date:     Fri Sep 26 00:28:52 2014 +0000
First released in: 9.5.0

    Fix atomic ops for x86 gcc compilers that don't understand atomic intrinsics.
    
    Per buildfarm animal locust.


src/include/port/atomics/generic-gcc.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/include/port/atomics/generic-gcc.h b/src/include/port/atomics/generic-gcc.h index 23fa2a6ebb8..57e3bcaf716 100644 --- a/src/include/port/atomics/generic-gcc.h +++ b/src/include/port/atomics/generic-gcc.h @@ -108,8 +108,11 @@ typedef struct pg_atomic_uint64 */ #if defined(PG_USE_INLINE) || defined(ATOMICS_INCLUDE_DEFINITIONS) -#if !defined(PG_HAVE_ATOMIC_TEST_SET_FLAG) && \ - (defined(HAVE_GCC__SYNC_CHAR_TAS) || defined(HAVE_GCC__SYNC_INT32_TAS)) +#ifdef PG_HAVE_ATOMIC_FLAG_SUPPORT + +#if defined(HAVE_GCC__SYNC_CHAR_TAS) || defined(HAVE_GCC__SYNC_INT32_TAS) + +#ifndef PG_HAVE_ATOMIC_TEST_SET_FLAG #define PG_HAVE_ATOMIC_TEST_SET_FLAG static inline bool pg_atomic_test_set_flag_impl(volatile pg_atomic_flag *ptr) @@ -118,7 +121,9 @@ pg_atomic_test_set_flag_impl(volatile pg_atomic_flag *ptr) /* some platform only support a 1 here */ return __sync_lock_test_and_set(&ptr->value, 1) == 0; } -#endif /* !defined(PG_HAVE_ATOMIC_TEST_SET_FLAG) && defined(HAVE_GCC__SYNC_*_TAS) */ +#endif + +#endif /* defined(HAVE_GCC__SYNC_*_TAS) */ #ifndef PG_HAVE_ATOMIC_UNLOCKED_TEST_FLAG #define PG_HAVE_ATOMIC_UNLOCKED_TEST_FLAG @@ -153,6 +158,8 @@ pg_atomic_init_flag_impl(volatile pg_atomic_flag *ptr) } #endif +#endif /* defined(PG_HAVE_ATOMIC_FLAG_SUPPORT) */ + /* prefer __atomic, it has a better API */ #if !defined(PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32) && defined(HAVE_GCC__ATOMIC_INT32_CAS) #define PG_HAVE_ATOMIC_COMPARE_EXCHANGE_U32 [parent: b64d92f1a560]