diff --git a/src/beast/modules/beast_core/memory/SharedSingleton.h b/src/beast/modules/beast_core/memory/SharedSingleton.h index 49fa2d317..4e019cb0d 100644 --- a/src/beast/modules/beast_core/memory/SharedSingleton.h +++ b/src/beast/modules/beast_core/memory/SharedSingleton.h @@ -92,6 +92,7 @@ public: bassert (lifetime == SingletonLifetime::createOnDemand || ! staticData.destructorCalled); staticData.instance = &staticData.object; new (staticData.instance) SharedSingleton (lifetime); + memoryBarrier(); instance = staticData.instance; } } diff --git a/src/beast/modules/beast_core/memory/beast_Atomic.h b/src/beast/modules/beast_core/memory/beast_Atomic.h index 9fcc92fcf..7650da579 100644 --- a/src/beast/modules/beast_core/memory/beast_Atomic.h +++ b/src/beast/modules/beast_core/memory/beast_Atomic.h @@ -131,9 +131,6 @@ public: */ Type compareAndSetValue (Type newValue, Type valueToCompare) noexcept; - /** Implements a memory read/write barrier. */ - static void memoryBarrier() noexcept; - //============================================================================== #if BEAST_64BIT BEAST_ALIGN (8) @@ -373,8 +370,7 @@ inline Type Atomic::compareAndSetValue (const Type newValue, const Type va #endif } -template -inline void Atomic::memoryBarrier() noexcept +inline void memoryBarrier() noexcept { #if BEAST_ATOMICS_MAC OSMemoryBarrier(); @@ -389,4 +385,5 @@ inline void Atomic::memoryBarrier() noexcept #pragma warning (pop) #endif -#endif // BEAST_ATOMIC_H_INCLUDED +#endif + diff --git a/src/beast/modules/beast_core/threads/beast_Thread.cpp b/src/beast/modules/beast_core/threads/beast_Thread.cpp index fbc5fa5c1..d9d5a7ab3 100644 --- a/src/beast/modules/beast_core/threads/beast_Thread.cpp +++ b/src/beast/modules/beast_core/threads/beast_Thread.cpp @@ -322,14 +322,14 @@ public: test.expect (a.get() == (Type) 10); a += (Type) 15; test.expect (a.get() == (Type) 25); - a.memoryBarrier(); + memoryBarrier(); a -= (Type) 5; test.expect (a.get() == (Type) 20); test.expect (++a == (Type) 21); ++a; test.expect (--a == (Type) 21); test.expect (a.get() == (Type) 21); - a.memoryBarrier(); + memoryBarrier(); testFloat (test); } @@ -338,7 +338,7 @@ public: { Atomic a, b; a = (Type) 21; - a.memoryBarrier(); + memoryBarrier(); /* These are some simple test cases to check the atomics - let me know if any of these assertions fail on your system! diff --git a/src/ripple_basics/utility/UptimeTimer.cpp b/src/ripple_basics/utility/UptimeTimer.cpp index fd42903a5..5049aea6f 100644 --- a/src/ripple_basics/utility/UptimeTimer.cpp +++ b/src/ripple_basics/utility/UptimeTimer.cpp @@ -21,7 +21,7 @@ int UptimeTimer::getElapsedSeconds () const if (m_isUpdatingManually) { - // memoryBarrier(); + memoryBarrier(); result = m_elapsedTime; } else