diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/port/atomics.c | 23 | ||||
-rw-r--r-- | src/include/port/atomics.h | 4 | ||||
-rw-r--r-- | src/include/port/atomics/fallback.h | 16 | ||||
-rw-r--r-- | src/include/port/atomics/generic.h | 10 |
4 files changed, 4 insertions, 49 deletions
diff --git a/src/backend/port/atomics.c b/src/backend/port/atomics.c index 19a84a7849d..f98f6b6dbdb 100644 --- a/src/backend/port/atomics.c +++ b/src/backend/port/atomics.c @@ -17,29 +17,6 @@ #include "port/atomics.h" #include "storage/spin.h" -#ifdef PG_HAVE_MEMORY_BARRIER_EMULATION -#ifdef WIN32 -#error "barriers are required (and provided) on WIN32 platforms" -#endif -#include <signal.h> -#endif - -#ifdef PG_HAVE_MEMORY_BARRIER_EMULATION -void -pg_spinlock_barrier(void) -{ - /* - * NB: we have to be reentrant here, some barriers are placed in signal - * handlers. - * - * We use kill(0) for the fallback barrier as we assume that kernels on - * systems old enough to require fallback barrier support will include an - * appropriate barrier while checking the existence of the postmaster pid. - */ - (void) kill(PostmasterPid, 0); -} -#endif - #ifdef PG_HAVE_ATOMIC_U64_SIMULATION diff --git a/src/include/port/atomics.h b/src/include/port/atomics.h index edb0ae40dc0..c0c8688f736 100644 --- a/src/include/port/atomics.h +++ b/src/include/port/atomics.h @@ -101,6 +101,10 @@ #if !defined(pg_compiler_barrier_impl) #error "could not find an implementation of pg_compiler_barrier" #endif +#if !defined(pg_memory_barrier_impl) +#error "could not find an implementation of pg_memory_barrier_impl" +#endif + /* * Provide a spinlock-based implementation of the 64 bit variants, if diff --git a/src/include/port/atomics/fallback.h b/src/include/port/atomics/fallback.h index 9f83827d83f..2c0eb287686 100644 --- a/src/include/port/atomics/fallback.h +++ b/src/include/port/atomics/fallback.h @@ -17,22 +17,6 @@ # error "should be included via atomics.h" #endif -#ifndef pg_memory_barrier_impl -/* - * If we have no memory barrier implementation for this architecture, we - * fall back to acquiring and releasing a spinlock. - * - * It's not self-evident that every possible legal implementation of a - * spinlock acquire-and-release would be equivalent to a full memory barrier. - * For example, I'm not sure that Itanium's acq and rel add up to a full - * fence. But all of our actual implementations seem OK in this regard. - */ -#define PG_HAVE_MEMORY_BARRIER_EMULATION - -extern void pg_spinlock_barrier(void); -#define pg_memory_barrier_impl pg_spinlock_barrier -#endif - #if !defined(PG_HAVE_ATOMIC_U64_SUPPORT) diff --git a/src/include/port/atomics/generic.h b/src/include/port/atomics/generic.h index 6113ab62a31..b636f951423 100644 --- a/src/include/port/atomics/generic.h +++ b/src/include/port/atomics/generic.h @@ -135,19 +135,9 @@ pg_atomic_unlocked_test_flag_impl(volatile pg_atomic_flag *ptr) static inline void pg_atomic_clear_flag_impl(volatile pg_atomic_flag *ptr) { - /* - * Use a memory barrier + plain write if we have a native memory - * barrier. But don't do so if memory barriers use spinlocks - that'd lead - * to circularity if flags are used to implement spinlocks. - */ -#ifndef PG_HAVE_MEMORY_BARRIER_EMULATION /* XXX: release semantics suffice? */ pg_memory_barrier_impl(); pg_atomic_write_u32_impl(ptr, 0); -#else - uint32 value = 1; - pg_atomic_compare_exchange_u32_impl(ptr, &value, 0); -#endif } #elif !defined(PG_HAVE_ATOMIC_TEST_SET_FLAG) |