int ErasureCodePluginRegistry::remove(const std::string &name)
{
+ assert(lock.is_locked());
if (plugins.find(name) == plugins.end())
return -ENOENT;
std::map<std::string,ErasureCodePlugin*>::iterator plugin = plugins.find(name);
int ErasureCodePluginRegistry::add(const std::string &name,
ErasureCodePlugin* plugin)
{
+ assert(lock.is_locked());
if (plugins.find(name) != plugins.end())
return -EEXIST;
plugins[name] = plugin;
ErasureCodePlugin *ErasureCodePluginRegistry::get(const std::string &name)
{
+ assert(lock.is_locked());
if (plugins.find(name) != plugins.end())
return plugins[name];
else
ErasureCodePlugin **plugin,
ostream &ss)
{
+ assert(lock.is_locked());
std::string fname = directory + "/" PLUGIN_PREFIX
+ plugin_name + PLUGIN_SUFFIX;
void *library = dlopen(fname.c_str(), RTLD_NOW);
const std::string &directory,
ostream &ss)
{
+ Mutex::Locker l(lock);
list<string> plugins_list;
get_str_list(plugins, plugins_list);
for (list<string>::iterator i = plugins_list.begin();
EXPECT_EQ(0, instance.factory("example", parameters, &erasure_code, ss));
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));
+ {
+ Mutex::Locker l(instance.lock);
+ 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) {