#define BABELTRACE_PLUGIN_PLUGIN_INTERNAL_H
/*
+ * Copyright 2017-2018 Philippe Proulx <pproulx@efficios.com>
* Copyright 2015 Jérémie Galarneau <jeremie.galarneau@efficios.com>
*
- * Author: Jérémie Galarneau <jeremie.galarneau@efficios.com>
- *
* 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
#include <babeltrace/babeltrace-internal.h>
#include <babeltrace/graph/component-class-internal.h>
-#include <babeltrace/plugin/plugin.h>
+#include <babeltrace/plugin/plugin-const.h>
#include <babeltrace/plugin/plugin-dev.h>
#include <babeltrace/plugin/plugin-so-internal.h>
#include <babeltrace/object-internal.h>
-#include <babeltrace/object.h>
#include <babeltrace/types.h>
#include <babeltrace/assert-internal.h>
+#include <babeltrace/lib-logging-internal.h>
#include <glib.h>
enum bt_plugin_type {
BT_PLUGIN_TYPE_PYTHON = 1,
};
+enum bt_plugin_status {
+ BT_PLUGIN_STATUS_OK = 0,
+ BT_PLUGIN_STATUS_ERROR = -1,
+ BT_PLUGIN_STATUS_NOMEM = -12,
+};
+
struct bt_plugin {
struct bt_object base;
enum bt_plugin_type type;
if (plugin->src_comp_classes) {
BT_LOGD_STR("Putting source component classes.");
g_ptr_array_free(plugin->src_comp_classes, TRUE);
+ plugin->src_comp_classes = NULL;
}
if (plugin->flt_comp_classes) {
BT_LOGD_STR("Putting filter component classes.");
g_ptr_array_free(plugin->flt_comp_classes, TRUE);
+ plugin->flt_comp_classes = NULL;
}
if (plugin->sink_comp_classes) {
BT_LOGD_STR("Putting sink component classes.");
g_ptr_array_free(plugin->sink_comp_classes, TRUE);
+ plugin->sink_comp_classes = NULL;
}
if (plugin->info.name) {
g_string_free(plugin->info.name, TRUE);
+ plugin->info.name = NULL;
}
if (plugin->info.path) {
g_string_free(plugin->info.path, TRUE);
+ plugin->info.path = NULL;
}
if (plugin->info.description) {
g_string_free(plugin->info.description, TRUE);
+ plugin->info.description = NULL;
}
if (plugin->info.author) {
g_string_free(plugin->info.author, TRUE);
+ plugin->info.author = NULL;
}
if (plugin->info.license) {
g_string_free(plugin->info.license, TRUE);
+ plugin->info.license = NULL;
}
if (plugin->info.version.extra) {
g_string_free(plugin->info.version.extra, TRUE);
+ plugin->info.version.extra = NULL;
}
g_free(plugin);
}
/* Add new component class */
- g_ptr_array_add(comp_classes, bt_object_get_ref(comp_class));
+ bt_object_get_ref(comp_class);
+ g_ptr_array_add(comp_classes, comp_class);
/* Special case for a shared object plugin */
if (plugin->type == BT_PLUGIN_TYPE_SO) {
{
BT_ASSERT(plugin_set);
BT_ASSERT(plugin);
- g_ptr_array_add(plugin_set->plugins, bt_object_get_ref(plugin));
+ bt_object_get_ref(plugin);
+ g_ptr_array_add(plugin_set->plugins, plugin);
BT_LIB_LOGV("Added plugin to plugin set: "
"plugin-set-addr=%p, %![plugin-]+l",
plugin_set, plugin);