Fix: lib: handle BT_FUNC_STATUS_NOT_FOUND in bt_plugin_so_create_all_from_sections
[babeltrace.git] / src / lib / plugin / plugin-so.c
index 6cb140801bd4874dc93999ae1bf373fb2c602658..698d03d0a0acb61ab667bcddcc6fb8b0a6d83697 100644 (file)
@@ -9,7 +9,6 @@
 #include "lib/logging.h"
 
 #include "common/assert.h"
-#include "lib/assert-cond.h"
 #include "compat/compiler.h"
 #include <babeltrace2/plugin/plugin-dev.h>
 #include "lib/graph/component-class.h"
@@ -735,6 +734,12 @@ int bt_plugin_so_init(struct bt_plugin *plugin,
                                status = init_status;
                                goto end;
                        } else {
+                               /*
+                                * Since we don't return an error,
+                                * there's no way to communicate this
+                                * error to the caller.
+                                */
+                               bt_current_thread_clear_error();
                                BT_LIB_LOGW(
                                        "User's plugin initialization function failed: "
                                        "status=%s",
@@ -1336,6 +1341,12 @@ int bt_plugin_so_create_all_from_sections(
                        /* Add to plugin set */
                        bt_plugin_set_add_plugin(*plugin_set_out, plugin);
                        BT_OBJECT_PUT_REF_AND_RESET(plugin);
+               } else if (status == BT_FUNC_STATUS_NOT_FOUND) {
+                       /*
+                        * There was an error initializing the plugin,
+                        * but `fail_on_load_error` is false.
+                        */
+                       BT_OBJECT_PUT_REF_AND_RESET(plugin);
                } else if (status < 0) {
                        /*
                         * bt_plugin_so_init() handles
@@ -1662,7 +1673,7 @@ end:
 
 static
 void plugin_comp_class_destroy_listener(struct bt_component_class *comp_class,
-               void *data)
+               void *data __attribute__((unused)))
 {
        bt_list_del(&comp_class->node);
        BT_OBJECT_PUT_REF_AND_RESET(comp_class->so_handle);
This page took 0.035442 seconds and 4 git commands to generate.