X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=src%2Flib%2Fplugin%2Fplugin.c;h=f9800af7fec233f730c72bd567ff53742cb5b13d;hp=33ba6c9d8a473af83e06e82f192c43432092a628;hb=0235b0db7de5bcacdb3650c92461f2ce5eb2143d;hpb=577fa92f184fd2d75fb0697e879ab563de117c2e diff --git a/src/lib/plugin/plugin.c b/src/lib/plugin/plugin.c index 33ba6c9d..f9800af7 100644 --- a/src/lib/plugin/plugin.c +++ b/src/lib/plugin/plugin.c @@ -1,26 +1,8 @@ /* + * SPDX-License-Identifier: MIT + * * Copyright 2017-2018 Philippe Proulx * Copyright 2016 Jérémie Galarneau - * - * Author: Jérémie Galarneau - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. */ #define BT_LOG_TAG "LIB/PLUGIN" @@ -31,13 +13,14 @@ #include "common/macros.h" #include "compat/compiler.h" #include "common/common.h" -#include -#include -#include +#include +#include +#include #include "lib/graph/component-class.h" #include #include #include +#include #include #include #include @@ -56,26 +39,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) { @@ -182,6 +170,8 @@ enum bt_plugin_find_all_from_static_status bt_plugin_find_all_from_static( bt_bool fail_on_load_error, const struct bt_plugin_set **plugin_set_out) { + BT_ASSERT_PRE_NO_ERROR(); + /* bt_plugin_so_create_all_from_static() logs errors */ return bt_plugin_so_create_all_from_static(fail_on_load_error, (void *) plugin_set_out); @@ -193,6 +183,7 @@ enum bt_plugin_find_all_from_file_status bt_plugin_find_all_from_file( { enum bt_plugin_find_all_from_file_status status; + BT_ASSERT_PRE_NO_ERROR(); BT_ASSERT_PRE_NON_NULL(path, "Path"); BT_ASSERT_PRE_NON_NULL(path, "Plugin set (output)"); BT_LOGI("Creating plugins from file: path=\"%s\"", path); @@ -276,6 +267,7 @@ enum bt_plugin_find_all_status bt_plugin_find_all(bt_bool find_in_std_env_var, int status = BT_FUNC_STATUS_OK; uint64_t dir_i, plugin_i; + BT_ASSERT_PRE_NO_ERROR(); BT_ASSERT_PRE_NON_NULL(plugin_set_out, "Plugin set (output)"); BT_LOGI("Finding all plugins in standard directories and built-in plugins: " "find-in-std-env-var=%d, find-in-user-dir=%d, " @@ -459,6 +451,7 @@ enum bt_plugin_find_status bt_plugin_find(const char *plugin_name, const struct bt_plugin_set *plugin_set = NULL; uint64_t i; + BT_ASSERT_PRE_NO_ERROR(); BT_ASSERT_PRE_NON_NULL(plugin_name, "Name"); BT_ASSERT_PRE_NON_NULL(plugin_out, "Plugin (output)"); BT_LOGI("Finding named plugin in standard directories and built-in plugins: " @@ -466,10 +459,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 +474,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 +491,8 @@ end: "name=\"%s\"", plugin_name); } + bt_plugin_set_put_ref(plugin_set); + return status; } @@ -612,7 +608,7 @@ int bt_plugin_create_append_all_from_dir(struct bt_plugin_set *plugin_set, ": path=\"%s\", recurse=%d", path, recurse); (void) BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_UNKNOWN( - "Babeltrace library", + BT_LIB_LOG_LIBBABELTRACE2_NAME, "Cannot open directory: path=\"%s\", recurse=%d", path, recurse); status = BT_FUNC_STATUS_ERROR; @@ -657,6 +653,7 @@ enum bt_plugin_find_all_from_dir_status bt_plugin_find_all_from_dir( enum bt_plugin_find_all_from_dir_status status = BT_FUNC_STATUS_OK; + BT_ASSERT_PRE_NO_ERROR(); BT_ASSERT_PRE_NON_NULL(plugin_set_out, "Plugin set (output)"); BT_LOGI("Creating all plugins in directory: path=\"%s\", recurse=%d", path, recurse); @@ -842,7 +839,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;