From eba7324b577e2502c9b99b3e6e0dad6f378f053c Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Mon, 29 Jul 2019 15:18:24 -0400 Subject: [PATCH] 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 --- src/rgw/rgw_metadata.cc | 8 ++++---- src/rgw/services/svc_meta_be.cc | 5 ----- src/rgw/services/svc_meta_be.h | 1 - 3 files changed, 4 insertions(+), 10 deletions(-) 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(); }; -- 2.39.5