]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ec: free memory because of repeated loading 57592/head
authorRongqi Sun <sunrongqi@huawei.com>
Tue, 21 May 2024 09:22:28 +0000 (09:22 +0000)
committerRongqi Sun <sunrongqi@huawei.com>
Tue, 28 May 2024 03:02:05 +0000 (03:02 +0000)
Repeated loading could cause fail, memory should be freed.

Signed-off-by: Rongqi Sun <sunrongqi@huawei.com>
src/erasure-code/clay/ErasureCodePluginClay.cc
src/erasure-code/isa/ErasureCodePluginIsa.cc
src/erasure-code/jerasure/ErasureCodePluginJerasure.cc
src/erasure-code/lrc/ErasureCodePluginLrc.cc
src/erasure-code/shec/ErasureCodePluginShec.cc

index 35694da0cb035cbfc6ae2e5bb98c9b9ef7cf1409..236a2812e04d98c43fd2ff4c22799ca5882026bc 100644 (file)
@@ -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<ErasureCodePluginClay>();
+  int r = instance.add(plugin_name, plugin.get());
+  if (r == 0) {
+    plugin.release();
+  }
+  return r;
 }
index ba54feb64e33627728a9f4a97d4a298ff521fb73..a3f794e8cfeedfd424ca7ff2cfe2e4027490145f 100644 (file)
@@ -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<ErasureCodePluginIsa>();
+  int r = instance.add(plugin_name, plugin.get());
+  if (r == 0) {
+    plugin.release();  
+  }
+  return r;
 }
index 90c7b5e4ac2cd0f0f13be86b0167c72c55b43c4c..f24f42285509d508a93075fe2b9c29b61b46a5bd 100644 (file)
@@ -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<ErasureCodePluginJerasure>();
+  r = instance.add(plugin_name, plugin.get());
+  if (r == 0) {
+    plugin.release();
+  }
+  return r;
 }
index f80dde17675fb956ffe081d7ef7255550f26f9d7..407efcd5a6da9a90ff8cc1101e4eaa605da8cfba 100644 (file)
@@ -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<ErasureCodePluginLrc>();
+  int r = instance.add(plugin_name, plugin.get());
+  if (r == 0) {
+    plugin.release();
+  }
+  return r;
 }
index 3eab48f90edb904a42e73e89d466ff0222daecce..249bd4a8e6f5c6406f74e54ffe88d2f1de1ec04c 100644 (file)
@@ -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<ErasureCodePluginShec>();
+  r = instance.add(plugin_name, plugin.get());
+  if (r == 0) {
+    plugin.release();
+  }
+  return r;
 }