]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
librbd: replace deprecated atomic_store with std::atomic<shared_ptr>
authorKefu Chai <tchaikov@gmail.com>
Sat, 29 Mar 2025 13:10:05 +0000 (21:10 +0800)
committerKefu Chai <tchaikov@gmail.com>
Sat, 29 Mar 2025 13:14:19 +0000 (21:14 +0800)
Update shared pointer atomic operations to use C++20's std::atomic<std::shared_ptr<T>>
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:
```
/home/kefu/dev/ceph/src/librbd/ImageCtx.cc:1010:5: warning: 'atomic_store<neorados::IOContext>' is deprecated: use 'std::atomic<std::shared_ptr<T>>' instead [-Wdeprecated-declarations]
 1010 |     atomic_store(&data_io_context, ctx);
      |     ^
/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/bits/shared_ptr_atomic.h:181:5: note: 'atomic_store<neorados::IOContext>' 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")))
      |                   ^
```

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/librbd/ImageCtx.cc
src/librbd/ImageCtx.h

index 0842ba3d56ac312e1e3244e705f02b94df4663fd..f7d6120b1d19b8b2e187e561c83555461473d727 100644 (file)
@@ -1007,11 +1007,19 @@ librados::IoCtx duplicate_io_ctx(librados::IoCtx& io_ctx) {
     }
 
     // atomically reset the data IOContext to new version
+#ifdef __cpp_lib_atomic_shared_ptr
+    data_io_context.store(ctx);
+#else
     atomic_store(&data_io_context, ctx);
+#endif
   }
 
   IOContext ImageCtx::get_data_io_context() const {
+#ifdef __cpp_lib_atomic_shared_ptr
+    return data_io_context.load();
+#else
     return atomic_load(&data_io_context);
+#endif
   }
 
   IOContext ImageCtx::duplicate_data_io_context() const {
index 84c9284e31c5552f9f496f44b8926c21c6a87a48..c10ec8bdfaa00506b1a7ee1f908a6d43829c1fff 100644 (file)
@@ -366,7 +366,11 @@ namespace librbd {
                                    ceph::mutex **timer_lock);
 
   private:
+#ifdef __cpp_lib_atomic_shared_ptr
+    std::atomic<std::shared_ptr<neorados::IOContext>> data_io_context;
+#else
     std::shared_ptr<neorados::IOContext> data_io_context;
+#endif
   };
 }