]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: replace deprecated atomic_store with std::atomic<shared_ptr> 62563/head
authorKefu Chai <tchaikov@gmail.com>
Sat, 29 Mar 2025 13:29:43 +0000 (21:29 +0800)
committerKefu Chai <tchaikov@gmail.com>
Sat, 29 Mar 2025 13:32:17 +0000 (21:32 +0800)
Update shared pointer atomic operations to use C++20's
`std::atomic<std::shared_ptr>` instead of the deprecated `atomic_store`
functions. This change addresses deprecation warnings from GCC-15's
libstdc++ where atomic shared pointer operations outside the `std::atomic`
class are being phased out:

```
In file included from /home/kefu/dev/ceph/src/osd/Watch.cc:9:
/home/kefu/dev/ceph/src/osd/OSD.h:1675:10: warning: 'atomic_store<const OSDMap>' is deprecated: use 'std::atomic<std::shared_ptr<T>>' instead [-Wdeprecated-declarations]
 1675 |     std::atomic_store(&_osdmap, osdmap);
      |          ^
/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/bits/shared_ptr_atomic.h:181:5: note: 'atomic_store<const OSDMap>' has been explicitly marked deprecated here
  181 |     _GLIBCXX20_DEPRECATED_SUGGEST("std::atomic<std::shared_ptr<T>>")
      |     ^
/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/x86_64-redhat-linux/bits/c++config.h:2055:45: note: expanded from macro '_GLIBCXX20_DEPRECATED_SUGGEST'
 2055 | # define _GLIBCXX20_DEPRECATED_SUGGEST(ALT) _GLIBCXX_DEPRECATED_SUGGEST(ALT)
      |                                             ^
/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/x86_64-redhat-linux/bits/c++config.h:2023:19: note: expanded from macro '_GLIBCXX_DEPRECATED_SUGGEST'
 2023 |   __attribute__ ((__deprecated__ ("use '" ALT "' instead")))
      |                   ^
In file included from /home/kefu/dev/ceph/src/osd/Watch.cc:9:
```

The implementation now uses the standard-compliant approach that's
recommended in the compiler warnings, while maintaining backward
compatibility with older compilers by conditionally selecting the
appropriate implementation.

Signed-off-by: Kefu Chai <tchaikov@gmail.com>
src/osd/OSD.h

index d2d16c5b7d22cfc15a23ccec15f7301170d4d255..1d41a44f917882acb02eaf89538fe929e91a2adf 100644 (file)
@@ -1669,13 +1669,24 @@ protected:
  protected:
 
   // -- osd map --
-  // TODO: switch to std::atomic<OSDMapRef> when C++20 will be available.
-  OSDMapRef       _osdmap;
+#ifdef __cpp_lib_atomic_shared_ptr
+  std::atomic<OSDMapRef> _osdmap;
+#else
+  OSDMapRef _osdmap;
+#endif
   void set_osdmap(OSDMapRef osdmap) {
+#ifdef __cpp_lib_atomic_shared_ptr
+    _osdmap.store(osdmap);
+#else
     std::atomic_store(&_osdmap, osdmap);
+#endif
   }
   OSDMapRef get_osdmap() const {
+#ifdef __cpp_lib_atomic_shared_ptr
+    return _osdmap.load();
+#else
     return std::atomic_load(&_osdmap);
+#endif
   }
   epoch_t get_osdmap_epoch() const {
     // XXX: performance?