From: Casey Bodley Date: Mon, 29 Jul 2019 19:18:24 +0000 (-0400) Subject: rgw: fix leak of metadata backend context X-Git-Tag: v15.1.0~1898^2^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=eba7324b577e2502c9b99b3e6e0dad6f378f053c;p=ceph.git rgw: fix leak of metadata backend context Op had no virtual destructor, so the derived Op_ManagedCtx destructor wasn't being called to free its context. just use Op_ManagedCtx directly Signed-off-by: Casey Bodley --- diff --git a/src/rgw/rgw_metadata.cc b/src/rgw/rgw_metadata.cc index c9395a26c51..aa50519632e 100644 --- a/src/rgw/rgw_metadata.cc +++ b/src/rgw/rgw_metadata.cc @@ -527,7 +527,7 @@ int RGWMetadataHandler_GenericMetaBE::get_shard_id(const string& entry, int *sha int RGWMetadataHandler_GenericMetaBE::list_keys_init(const string& marker, void **phandle) { - std::unique_ptr op(be_handler->alloc_op()); + auto op = std::make_unique(be_handler); int ret = op->list_init(marker); if (ret < 0) { @@ -541,7 +541,7 @@ int RGWMetadataHandler_GenericMetaBE::list_keys_init(const string& marker, void int RGWMetadataHandler_GenericMetaBE::list_keys_next(void *handle, int max, list& keys, bool *truncated) { - auto op = static_cast(handle); + auto op = static_cast(handle); int ret = op->list_next(max, &keys, truncated); if (ret < 0 && ret != -ENOENT) { @@ -559,13 +559,13 @@ int RGWMetadataHandler_GenericMetaBE::list_keys_next(void *handle, int max, list void RGWMetadataHandler_GenericMetaBE::list_keys_complete(void *handle) { - auto op = static_cast(handle); + auto op = static_cast(handle); delete op; } string RGWMetadataHandler_GenericMetaBE::get_marker(void *handle) { - auto op = static_cast(handle); + auto op = static_cast(handle); string marker; int r = op->list_get_marker(&marker); if (r < 0) { diff --git a/src/rgw/services/svc_meta_be.cc b/src/rgw/services/svc_meta_be.cc index f6de0571535..72451d48a30 100644 --- a/src/rgw/services/svc_meta_be.cc +++ b/src/rgw/services/svc_meta_be.cc @@ -169,11 +169,6 @@ int RGWSI_MetaBackend_Handler::call(std::optional b }); } -RGWSI_MetaBackend_Handler::Op *RGWSI_MetaBackend_Handler::alloc_op() -{ - return new Op_ManagedCtx(this); -} - RGWSI_MetaBackend_Handler::Op_ManagedCtx::Op_ManagedCtx(RGWSI_MetaBackend_Handler *handler) : Op(handler->be, handler->be->alloc_ctx()) { auto c = ctx(); diff --git a/src/rgw/services/svc_meta_be.h b/src/rgw/services/svc_meta_be.h index 4258ae91f6a..61b01935e9d 100644 --- a/src/rgw/services/svc_meta_be.h +++ b/src/rgw/services/svc_meta_be.h @@ -275,6 +275,5 @@ public: virtual int call(std::optional bectx_params, std::function f); - virtual Op *alloc_op(); };