Repeated loading could cause fail, memory should be freed.
Signed-off-by: Rongqi Sun <sunrongqi@huawei.com>
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;
}
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;
}
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;
}
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;
}
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;
}