From: Samuel Just Date: Mon, 12 Sep 2022 20:50:05 +0000 (+0000) Subject: crimson/.../client_request: use intrusive_ptr for instance_handle X-Git-Tag: v18.1.0~1115^2~39 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9961e70e73468927d3d36d3ea61da857c72aaf37;p=ceph.git crimson/.../client_request: use intrusive_ptr for instance_handle Signed-off-by: Samuel Just --- diff --git a/src/crimson/osd/osd_operations/client_request.cc b/src/crimson/osd/osd_operations/client_request.cc index fca707f98512..cb9063af24ae 100644 --- a/src/crimson/osd/osd_operations/client_request.cc +++ b/src/crimson/osd/osd_operations/client_request.cc @@ -53,7 +53,7 @@ ClientRequest::ClientRequest( : osd(osd), conn(std::move(conn)), m(std::move(m)), - instance_handle(seastar::make_lw_shared()) + instance_handle(new instance_handle_t) {} ClientRequest::~ClientRequest() diff --git a/src/crimson/osd/osd_operations/client_request.h b/src/crimson/osd/osd_operations/client_request.h index 47143ac7ec00..32a2b81fd3e5 100644 --- a/src/crimson/osd/osd_operations/client_request.h +++ b/src/crimson/osd/osd_operations/client_request.h @@ -79,10 +79,15 @@ public: CompletionEvent > tracking_events; - class instance_handle_t - : public seastar::enable_lw_shared_from_this { + class instance_handle_t : public boost::intrusive_ref_counter< + instance_handle_t, boost::thread_unsafe_counter> { public: - using ref_t = seastar::lw_shared_ptr; + // 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; 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 = new instance_handle_t; } auto get_instance_handle() { return instance_handle; }