Sinks own their input iterators
[babeltrace.git] / lib / plugin-system / component-factory.c
index 0952f461561a6a297575602a646bdbc8a48e9c6b..3fb02057c4a042db71c7176a8022c2164234630c 100644 (file)
@@ -39,6 +39,7 @@
 #include <sys/stat.h>
 #include <gmodule.h>
 #include <stdbool.h>
+#include <dirent.h>
 
 #define NATIVE_PLUGIN_SUFFIX ".so"
 #define NATIVE_PLUGIN_SUFFIX_LEN sizeof(NATIVE_PLUGIN_SUFFIX)
@@ -106,7 +107,7 @@ bt_component_factory_load_file(struct bt_component_factory *factory,
 
        module = g_module_open(path, 0);
        if (!module) {
-               printf_error("Module open error: %s", g_module_error());
+               printf_verbose("Module open error: %s\n", g_module_error());
                ret = BT_COMPONENT_FACTORY_STATUS_ERROR;
                goto end;
        }
@@ -122,10 +123,10 @@ bt_component_factory_load_file(struct bt_component_factory *factory,
                goto end;
        }
 
-       factory->current_plugin = plugin;
-       component_status = bt_plugin_register_component_classes(plugin,
-                       factory);
-       factory->current_plugin = NULL;
+       BT_MOVE(factory->current_plugin, plugin);
+       component_status = bt_plugin_register_component_classes(
+                       factory->current_plugin, factory);      
+       BT_PUT(factory->current_plugin);
        if (component_status != BT_COMPONENT_STATUS_OK) {
                switch (component_status) {
                case BT_COMPONENT_STATUS_NOMEM:
@@ -136,7 +137,6 @@ bt_component_factory_load_file(struct bt_component_factory *factory,
                        break;
                }
 
-               BT_PUT(plugin);
                goto end;
        }
 end:
@@ -318,6 +318,7 @@ struct bt_component_class *bt_component_factory_get_component_class(
                if (type != BT_COMPONENT_TYPE_UNKNOWN) {
                        if (type != bt_component_class_get_type(
                                        component_class)) {
+                               bt_put(plugin);
                                continue;
                        }
                }
@@ -328,6 +329,7 @@ struct bt_component_class *bt_component_factory_get_component_class(
 
                        assert(cur_plugin_name);
                        if (strcmp(plugin_name, cur_plugin_name)) {
+                               bt_put(plugin);
                                continue;
                        }
                }
@@ -338,10 +340,12 @@ struct bt_component_class *bt_component_factory_get_component_class(
 
                        assert(cur_cc_name);
                        if (strcmp(component_name, cur_cc_name)) {
+                               bt_put(plugin);
                                continue;
                        }
                }
 
+               bt_put(plugin);
                /* All criteria met. */
                goto match;
        }
@@ -431,7 +435,7 @@ add_component_class(struct bt_component_factory *factory, const char *name,
        }
 
        component_class = bt_component_class_create(type, name, description,
-               factory->current_plugin);
+                       init, factory->current_plugin);
        g_ptr_array_add(factory->component_classes, component_class);
 end:
        return ret;
This page took 0.028428 seconds and 4 git commands to generate.