aboutsummaryrefslogtreecommitdiff
path: root/src/leveldb/port/atomic_pointer.h
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2017-08-01 12:40:42 -0700
committerPieter Wuille <pieter.wuille@gmail.com>2017-08-01 12:40:42 -0700
commit47f3e8c74d390139967cc40e37cf5b433f0b0f9f (patch)
treef43c285be47ec5bc66a25a7fa1c072d2cd32dc97 /src/leveldb/port/atomic_pointer.h
parentf66c59650527022b4f7abd98ff0a1a4e4741bd34 (diff)
parentb13a68e129f51b664e33b1894e33ebb7b94cdcc7 (diff)
downloadbitcoin-47f3e8c74d390139967cc40e37cf5b433f0b0f9f.tar.xz
Update LevelDB with latest Bitcoin-specific patches
Diffstat (limited to 'src/leveldb/port/atomic_pointer.h')
-rw-r--r--src/leveldb/port/atomic_pointer.h47
1 files changed, 25 insertions, 22 deletions
diff --git a/src/leveldb/port/atomic_pointer.h b/src/leveldb/port/atomic_pointer.h
index 1c4c7aafc6..d79a02230d 100644
--- a/src/leveldb/port/atomic_pointer.h
+++ b/src/leveldb/port/atomic_pointer.h
@@ -46,6 +46,30 @@
namespace leveldb {
namespace port {
+// AtomicPointer based on <cstdatomic> if available
+#if defined(LEVELDB_ATOMIC_PRESENT)
+class AtomicPointer {
+ private:
+ std::atomic<void*> rep_;
+ public:
+ AtomicPointer() { }
+ explicit AtomicPointer(void* v) : rep_(v) { }
+ inline void* Acquire_Load() const {
+ return rep_.load(std::memory_order_acquire);
+ }
+ inline void Release_Store(void* v) {
+ rep_.store(v, std::memory_order_release);
+ }
+ inline void* NoBarrier_Load() const {
+ return rep_.load(std::memory_order_relaxed);
+ }
+ inline void NoBarrier_Store(void* v) {
+ rep_.store(v, std::memory_order_relaxed);
+ }
+};
+
+#else
+
// Define MemoryBarrier() if available
// Windows on x86
#if defined(OS_WIN) && defined(COMPILER_MSVC) && defined(ARCH_CPU_X86_FAMILY)
@@ -142,28 +166,6 @@ class AtomicPointer {
}
};
-// AtomicPointer based on <cstdatomic>
-#elif defined(LEVELDB_ATOMIC_PRESENT)
-class AtomicPointer {
- private:
- std::atomic<void*> rep_;
- public:
- AtomicPointer() { }
- explicit AtomicPointer(void* v) : rep_(v) { }
- inline void* Acquire_Load() const {
- return rep_.load(std::memory_order_acquire);
- }
- inline void Release_Store(void* v) {
- rep_.store(v, std::memory_order_release);
- }
- inline void* NoBarrier_Load() const {
- return rep_.load(std::memory_order_relaxed);
- }
- inline void NoBarrier_Store(void* v) {
- rep_.store(v, std::memory_order_relaxed);
- }
-};
-
// Atomic pointer based on sparc memory barriers
#elif defined(__sparcv9) && defined(__GNUC__)
class AtomicPointer {
@@ -229,6 +231,7 @@ class AtomicPointer {
#error Please implement AtomicPointer for this platform.
#endif
+#endif
#undef LEVELDB_HAVE_MEMORY_BARRIER
#undef ARCH_CPU_X86_FAMILY