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 65ec447de3482cde9af315a229f643f9a6164fdf..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"
@@ -460,7 +459,7 @@ int bt_plugin_so_init(struct bt_plugin *plugin,
                /* Find the corresponding component class descriptor entry */
                for (i = 0; i < comp_class_full_descriptors->len; i++) {
                        struct comp_class_full_descriptor *cc_full_descr =
-                               &g_array_index(comp_class_full_descriptors,
+                               &bt_g_array_index(comp_class_full_descriptors,
                                        struct comp_class_full_descriptor, i);
 
                        if (cur_cc_descr_attr->comp_class_descriptor !=
@@ -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",
@@ -751,7 +756,7 @@ int bt_plugin_so_init(struct bt_plugin *plugin,
        /* Add described component classes to plugin */
        for (i = 0; i < comp_class_full_descriptors->len; i++) {
                struct comp_class_full_descriptor *cc_full_descr =
-                       &g_array_index(comp_class_full_descriptors,
+                       &bt_g_array_index(comp_class_full_descriptors,
                                struct comp_class_full_descriptor, i);
                struct bt_component_class *comp_class = NULL;
                struct bt_component_class_source *src_comp_class = NULL;
@@ -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.025048 seconds and 4 git commands to generate.