X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Flib%2Fplugin%2Fplugin.c;h=52614fbbd00644785d54845432368479c5183559;hb=c4f23e30bf67d2523163614bc9461d84cbe1ae80;hp=33ba6c9d8a473af83e06e82f192c43432092a628;hpb=577fa92f184fd2d75fb0697e879ab563de117c2e;p=babeltrace.git diff --git a/src/lib/plugin/plugin.c b/src/lib/plugin/plugin.c index 33ba6c9d..52614fbb 100644 --- a/src/lib/plugin/plugin.c +++ b/src/lib/plugin/plugin.c @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -56,26 +57,31 @@ #define APPEND_ALL_FROM_DIR_NFDOPEN_MAX 8 +/* Declare here to make sure definition in both ifdef branches are in sync. */ +static +int init_python_plugin_provider(void); +typedef int (*create_all_from_file_sym_type)( + const char *path, + bool fail_on_load_error, + struct bt_plugin_set **plugin_set_out); + #ifdef BT_BUILT_IN_PYTHON_PLUGIN_SUPPORT #include static -int (*bt_plugin_python_create_all_from_file_sym)( - const char *path, bool fail_on_load_error, - struct bt_plugin_set **plugin_set_out) = - bt_plugin_python_create_all_from_file; +create_all_from_file_sym_type + bt_plugin_python_create_all_from_file_sym = + bt_plugin_python_create_all_from_file; static -enum bt_plugin_status init_python_plugin_provider(void) +int init_python_plugin_provider(void) { } #else /* BT_BUILT_IN_PYTHON_PLUGIN_SUPPORT */ static GModule *python_plugin_provider_module; static -int (*bt_plugin_python_create_all_from_file_sym)( - const char *path, bool fail_on_load_error, - struct bt_plugin_set **plugin_set_out); +create_all_from_file_sym_type bt_plugin_python_create_all_from_file_sym; static int init_python_plugin_provider(void) { @@ -466,10 +472,11 @@ enum bt_plugin_find_status bt_plugin_find(const char *plugin_name, "find-in-sys-dir=%d, find-in-static=%d", plugin_name, find_in_std_env_var, find_in_user_dir, find_in_sys_dir, find_in_static); - status = bt_plugin_find_all(find_in_std_env_var, find_in_user_dir, + status = (enum bt_plugin_find_status) bt_plugin_find_all(find_in_std_env_var, find_in_user_dir, find_in_sys_dir, find_in_static, fail_on_load_error, &plugin_set); if (status != BT_FUNC_STATUS_OK) { + BT_ASSERT(!plugin_set); goto end; } @@ -480,7 +487,7 @@ enum bt_plugin_find_status bt_plugin_find(const char *plugin_name, if (strcmp(plugin->info.name->str, plugin_name) == 0) { *plugin_out = plugin; - bt_object_get_no_null_check(*plugin_out); + bt_object_get_ref_no_null_check(*plugin_out); goto end; } } @@ -497,6 +504,8 @@ end: "name=\"%s\"", plugin_name); } + bt_plugin_set_put_ref(plugin_set); + return status; } @@ -842,7 +851,7 @@ struct bt_component_class *borrow_component_class_by_name( const char *comp_class_cand_name = bt_component_class_get_name(comp_class_candidate); - BT_ASSERT(comp_class_cand_name); + BT_ASSERT_DBG(comp_class_cand_name); if (strcmp(name, comp_class_cand_name) == 0) { comp_class = comp_class_candidate;