From e919d0b043030396ace8968f1838cb619bf45df7 Mon Sep 17 00:00:00 2001 From: Rongqi Sun Date: Tue, 21 May 2024 09:22:28 +0000 Subject: [PATCH] ec: free memory because of repeated loading Repeated loading could cause fail, memory should be freed. Signed-off-by: Rongqi Sun --- src/erasure-code/clay/ErasureCodePluginClay.cc | 7 ++++++- src/erasure-code/isa/ErasureCodePluginIsa.cc | 8 ++++++-- src/erasure-code/jerasure/ErasureCodePluginJerasure.cc | 7 ++++++- src/erasure-code/lrc/ErasureCodePluginLrc.cc | 7 ++++++- src/erasure-code/shec/ErasureCodePluginShec.cc | 7 ++++++- 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/erasure-code/clay/ErasureCodePluginClay.cc b/src/erasure-code/clay/ErasureCodePluginClay.cc index 35694da0cb0..236a2812e04 100644 --- a/src/erasure-code/clay/ErasureCodePluginClay.cc +++ b/src/erasure-code/clay/ErasureCodePluginClay.cc @@ -40,5 +40,10 @@ const char *__erasure_code_version() { return CEPH_GIT_NICE_VER; } int __erasure_code_init(char *plugin_name, char *directory) { auto& instance = ceph::ErasureCodePluginRegistry::instance(); - return instance.add(plugin_name, new ErasureCodePluginClay()); + auto plugin = std::make_unique(); + int r = instance.add(plugin_name, plugin.get()); + if (r == 0) { + plugin.release(); + } + return r; } diff --git a/src/erasure-code/isa/ErasureCodePluginIsa.cc b/src/erasure-code/isa/ErasureCodePluginIsa.cc index ba54feb64e3..a3f794e8cfe 100644 --- a/src/erasure-code/isa/ErasureCodePluginIsa.cc +++ b/src/erasure-code/isa/ErasureCodePluginIsa.cc @@ -77,6 +77,10 @@ const char *__erasure_code_version() int __erasure_code_init(char *plugin_name, char *directory) { auto& instance = ceph::ErasureCodePluginRegistry::instance(); - - return instance.add(plugin_name, new ErasureCodePluginIsa()); + auto plugin = std::make_unique(); + int r = instance.add(plugin_name, plugin.get()); + if (r == 0) { + plugin.release(); + } + return r; } diff --git a/src/erasure-code/jerasure/ErasureCodePluginJerasure.cc b/src/erasure-code/jerasure/ErasureCodePluginJerasure.cc index 90c7b5e4ac2..f24f4228550 100644 --- a/src/erasure-code/jerasure/ErasureCodePluginJerasure.cc +++ b/src/erasure-code/jerasure/ErasureCodePluginJerasure.cc @@ -80,5 +80,10 @@ int __erasure_code_init(char *plugin_name, char *directory) if (r) { return -r; } - return instance.add(plugin_name, new ErasureCodePluginJerasure()); + auto plugin = std::make_unique(); + r = instance.add(plugin_name, plugin.get()); + if (r == 0) { + plugin.release(); + } + return r; } diff --git a/src/erasure-code/lrc/ErasureCodePluginLrc.cc b/src/erasure-code/lrc/ErasureCodePluginLrc.cc index f80dde17675..407efcd5a6d 100644 --- a/src/erasure-code/lrc/ErasureCodePluginLrc.cc +++ b/src/erasure-code/lrc/ErasureCodePluginLrc.cc @@ -44,5 +44,10 @@ const char *__erasure_code_version() { return CEPH_GIT_NICE_VER; } int __erasure_code_init(char *plugin_name, char *directory) { auto& instance = ceph::ErasureCodePluginRegistry::instance(); - return instance.add(plugin_name, new ErasureCodePluginLrc()); + auto plugin = std::make_unique(); + int r = instance.add(plugin_name, plugin.get()); + if (r == 0) { + plugin.release(); + } + return r; } diff --git a/src/erasure-code/shec/ErasureCodePluginShec.cc b/src/erasure-code/shec/ErasureCodePluginShec.cc index 3eab48f90ed..249bd4a8e6f 100644 --- a/src/erasure-code/shec/ErasureCodePluginShec.cc +++ b/src/erasure-code/shec/ErasureCodePluginShec.cc @@ -78,5 +78,10 @@ int __erasure_code_init(char *plugin_name, char *directory = (char *)"") if (r) { return -r; } - return instance.add(plugin_name, new ErasureCodePluginShec()); + auto plugin = std::make_unique(); + r = instance.add(plugin_name, plugin.get()); + if (r == 0) { + plugin.release(); + } + return r; } -- 2.39.5