From: Rongqi Sun Date: Tue, 21 May 2024 09:22:28 +0000 (+0000) Subject: ec: free memory because of repeated loading X-Git-Tag: v20.0.0~1503^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e919d0b043030396ace8968f1838cb619bf45df7;p=ceph.git ec: free memory because of repeated loading Repeated loading could cause fail, memory should be freed. Signed-off-by: Rongqi Sun --- 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; }