]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
common/ceph_context: use std::atomic<std::shared_ptr<T>> 60225/head
authorMax Kellermann <max.kellermann@ionos.com>
Wed, 9 Oct 2024 21:21:11 +0000 (23:21 +0200)
committerMax Kellermann <max.kellermann@ionos.com>
Fri, 11 Oct 2024 10:26:37 +0000 (12:26 +0200)
Fixes the compiler warning:

 src/common/ceph_context.h: In member function ‘std::shared_ptr<std::vector<entity_addrvec_t> > ceph::common::CephContext::get_mon_addrs() const’:
 src/common/ceph_context.h:288:36: warning: ‘std::shared_ptr<_Tp> std::atomic_load_explicit(const shared_ptr<_Tp>*, memory_order) [with _Tp = vector<entity_addrvec_t>]’ is deprecated: use 'std::atomic<std::shared_ptr<T>>' instead [-Wdeprecated-declarations]
   288 |     auto ptr = atomic_load_explicit(&_mon_addrs, std::memory_order_relaxed);
       |                ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 /usr/include/c++/14/bits/shared_ptr_atomic.h:133:5: note: declared here
   133 |     atomic_load_explicit(const shared_ptr<_Tp>* __p, memory_order)
       |     ^~~~~~~~~~~~~~~~~~~~

The modernized version does not build with GCC 11, so this patch
contains both versions for now, switched by a `__GNUC__` preprocessor
check.

Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
src/common/ceph_context.h

index f1877647877ab590e063ab588ae8aae984ab18e6..6a02d5c5bf1fcc93cd31295f8e7c7271423b211e 100644 (file)
@@ -282,10 +282,20 @@ public:
   void set_mon_addrs(const MonMap& mm);
   void set_mon_addrs(const std::vector<entity_addrvec_t>& in) {
     auto ptr = std::make_shared<std::vector<entity_addrvec_t>>(in);
+#if defined(__GNUC__) && __GNUC__ < 12
+    // workaround for GCC 11 bug
     atomic_store_explicit(&_mon_addrs, std::move(ptr), std::memory_order_relaxed);
+#else
+    _mon_addrs.store(std::move(ptr), std::memory_order_relaxed);
+#endif
   }
   std::shared_ptr<std::vector<entity_addrvec_t>> get_mon_addrs() const {
+#if defined(__GNUC__) && __GNUC__ < 12
+    // workaround for GCC 11 bug
     auto ptr = atomic_load_explicit(&_mon_addrs, std::memory_order_relaxed);
+#else
+    auto ptr = _mon_addrs.load(std::memory_order_relaxed);
+#endif
     return ptr;
   }
 
@@ -306,7 +316,12 @@ private:
 
   int _crypto_inited;
 
+#if defined(__GNUC__) && __GNUC__ < 12
+  // workaround for GCC 11 bug
   std::shared_ptr<std::vector<entity_addrvec_t>> _mon_addrs;
+#else
+  std::atomic<std::shared_ptr<std::vector<entity_addrvec_t>>> _mon_addrs;
+#endif
 
   /* libcommon service thread.
    * SIGHUP wakes this thread, which then reopens logfiles */