diff --git a/lib/base/object.cpp b/lib/base/object.cpp index 92a43b912..19c8f2fdf 100644 --- a/lib/base/object.cpp +++ b/lib/base/object.cpp @@ -245,13 +245,13 @@ void icinga::intrusive_ptr_add_ref(Object *object) if (object->m_References.fetch_add(1) == 0u) TypeAddObject(object); #else /* I2_LEAK_DEBUG */ - object->m_References.fetch_add(1); + object->m_References.fetch_add(1, std::memory_order_relaxed); #endif /* I2_LEAK_DEBUG */ } void icinga::intrusive_ptr_release(Object *object) { - auto previous (object->m_References.fetch_sub(1)); + auto previous (object->m_References.fetch_sub(1, std::memory_order_acq_rel)); if (previous == 1u) { #ifdef I2_LEAK_DEBUG diff --git a/lib/base/shared-object.hpp b/lib/base/shared-object.hpp index 58636dccb..d5a5d9c5d 100644 --- a/lib/base/shared-object.hpp +++ b/lib/base/shared-object.hpp @@ -58,12 +58,12 @@ private: inline void intrusive_ptr_add_ref(SharedObject *object) { - object->m_References.fetch_add(1); + object->m_References.fetch_add(1, std::memory_order_relaxed); } inline void intrusive_ptr_release(SharedObject *object) { - if (object->m_References.fetch_sub(1) == 1u) { + if (object->m_References.fetch_sub(1, std::memory_order_acq_rel) == 1u) { delete object; } } diff --git a/lib/base/shared.hpp b/lib/base/shared.hpp index 2acec012e..e13b02daf 100644 --- a/lib/base/shared.hpp +++ b/lib/base/shared.hpp @@ -18,13 +18,13 @@ class Shared; template inline void intrusive_ptr_add_ref(Shared *object) { - object->m_References.fetch_add(1); + object->m_References.fetch_add(1, std::memory_order_relaxed); } template inline void intrusive_ptr_release(Shared *object) { - if (object->m_References.fetch_sub(1) == 1u) { + if (object->m_References.fetch_sub(1, std::memory_order_acq_rel) == 1u) { delete object; } }