From d4ea682f785c6e5e3b1b7d91ab2718faeb75ea46 Mon Sep 17 00:00:00 2001 From: Loic Dachary Date: Thu, 21 Aug 2014 18:37:14 +0200 Subject: [PATCH] erasure-code: implement ErasureCodePluginRegistry::remove Which is symmetric to the add method and used for test. Signed-off-by: Loic Dachary --- src/erasure-code/ErasureCodePlugin.cc | 12 ++++++++++++ src/erasure-code/ErasureCodePlugin.h | 1 + src/test/erasure-code/TestErasureCodePlugin.cc | 3 +++ 3 files changed, 16 insertions(+) diff --git a/src/erasure-code/ErasureCodePlugin.cc b/src/erasure-code/ErasureCodePlugin.cc index 16e21b011a0ee..fa3dec02bcc62 100644 --- a/src/erasure-code/ErasureCodePlugin.cc +++ b/src/erasure-code/ErasureCodePlugin.cc @@ -49,6 +49,18 @@ ErasureCodePluginRegistry::~ErasureCodePluginRegistry() } } +int ErasureCodePluginRegistry::remove(const std::string &name) +{ + if (plugins.find(name) == plugins.end()) + return -ENOENT; + std::map::iterator plugin = plugins.find(name); + void *library = plugin->second->library; + delete plugin->second; + dlclose(library); + plugins.erase(plugin); + return 0; +} + int ErasureCodePluginRegistry::add(const std::string &name, ErasureCodePlugin* plugin) { diff --git a/src/erasure-code/ErasureCodePlugin.h b/src/erasure-code/ErasureCodePlugin.h index 30ced6c12a37c..3348eacc425b2 100644 --- a/src/erasure-code/ErasureCodePlugin.h +++ b/src/erasure-code/ErasureCodePlugin.h @@ -61,6 +61,7 @@ namespace ceph { ostream &ss); int add(const std::string &name, ErasureCodePlugin *plugin); + int remove(const std::string &name); ErasureCodePlugin *get(const std::string &name); int load(const std::string &plugin_name, diff --git a/src/test/erasure-code/TestErasureCodePlugin.cc b/src/test/erasure-code/TestErasureCodePlugin.cc index 2755044d47f42..e9ffaa2c7dc96 100644 --- a/src/test/erasure-code/TestErasureCodePlugin.cc +++ b/src/test/erasure-code/TestErasureCodePlugin.cc @@ -94,6 +94,9 @@ TEST_F(ErasureCodePluginRegistryTest, all) EXPECT_TRUE(erasure_code); ErasureCodePlugin *plugin = 0; EXPECT_EQ(-EEXIST, instance.load("example", directory, &plugin, ss)); + EXPECT_EQ(-ENOENT, instance.remove("does not exist")); + EXPECT_EQ(0, instance.remove("example")); + EXPECT_EQ(0, instance.load("example", directory, &plugin, ss)); } int main(int argc, char **argv) { -- 2.39.5