]> granicus.if.org Git - postgresql/commitdiff
Fix atomic ops for x86 gcc compilers that don't understand atomic intrinsics.
authorAndres Freund <andres@anarazel.de>
Fri, 26 Sep 2014 00:28:52 +0000 (02:28 +0200)
committerAndres Freund <andres@anarazel.de>
Fri, 26 Sep 2014 00:28:52 +0000 (02:28 +0200)
Per buildfarm animal locust.

src/include/port/atomics/generic-gcc.h

index 23fa2a6ebb8db9c03c08dbda162de38db12f4e88..57e3bcaf716de68af3ddc06103a6c3c31c4af4e6 100644 (file)
@@ -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