]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/.../client_request: use intrusive_ptr for instance_handle
authorSamuel Just <sjust@redhat.com>
Mon, 12 Sep 2022 20:50:05 +0000 (20:50 +0000)
committerSamuel Just <sjust@redhat.com>
Wed, 21 Sep 2022 00:34:47 +0000 (17:34 -0700)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/osd/osd_operations/client_request.cc
src/crimson/osd/osd_operations/client_request.h

index fca707f985125b1ce34f9a4bc6c1381a3c2280e9..cb9063af24ae8ea31baa6d73c83a0676ea6bb20d 100644 (file)
@@ -53,7 +53,7 @@ ClientRequest::ClientRequest(
   : osd(osd),
     conn(std::move(conn)),
     m(std::move(m)),
-    instance_handle(seastar::make_lw_shared<instance_handle_t>())
+    instance_handle(new instance_handle_t)
 {}
 
 ClientRequest::~ClientRequest()
index 47143ac7ec0005fda25e77cf073b89f8162da49e..32a2b81fd3e5168977f433bfc229ba50c1e06cf8 100644 (file)
@@ -79,10 +79,15 @@ public:
     CompletionEvent
   > tracking_events;
 
-  class instance_handle_t
-    : public seastar::enable_lw_shared_from_this<instance_handle_t> {
+  class instance_handle_t : public boost::intrusive_ref_counter<
+    instance_handle_t, boost::thread_unsafe_counter> {
   public:
-    using ref_t = seastar::lw_shared_ptr<instance_handle_t>;
+    // intrusive_ptr because seastar::lw_shared_ptr includes a cpu debug check
+    // that we will fail since the core on which we allocate the request may not
+    // be the core on which we perform with_pg_int.  This is harmless, since we
+    // don't leave any references on the source core, so we just bypass it by using
+    // intrusive_ptr instead.
+    using ref_t = boost::intrusive_ptr<instance_handle_t>;
     PipelineHandle handle;
 
     std::tuple<
@@ -144,7 +149,7 @@ public:
   };
   instance_handle_t::ref_t instance_handle;
   void reset_instance_handle() {
-    instance_handle = seastar::make_lw_shared<instance_handle_t>();
+    instance_handle = new instance_handle_t;
   }
   auto get_instance_handle() { return instance_handle; }