summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
d71dcf2)
It is somewhat essential for a component class provider (plugin or
whatever else) to make sure that its created, shared component class is
not modified once properly configured.
The new bt_component_class_freeze() function freezes a component class
object so that it becomes immutable.
bt_component_create() also has the side effect of freezing its class.
This is analogous to bt_event_create() which freezes its class.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
#include <babeltrace/component/component-class-sink.h>
#include <babeltrace/babeltrace-internal.h>
#include <babeltrace/object-internal.h>
#include <babeltrace/component/component-class-sink.h>
#include <babeltrace/babeltrace-internal.h>
#include <babeltrace/object-internal.h>
#include <glib.h>
struct bt_component_class;
#include <glib.h>
struct bt_component_class;
} methods;
/* Array of struct bt_component_class_destroy_listener */
GArray *destroy_listeners;
} methods;
/* Array of struct bt_component_class_destroy_listener */
GArray *destroy_listeners;
};
struct bt_component_class_source {
};
struct bt_component_class_source {
struct bt_component_class *component_class,
const char *description);
struct bt_component_class *component_class,
const char *description);
+extern int bt_component_class_freeze(
+ struct bt_component_class *component_class);
+
/**
* Get a component class' name.
*
/**
* Get a component class' name.
*
#include <babeltrace/compiler.h>
#include <babeltrace/component/component-class-internal.h>
#include <babeltrace/ref.h>
#include <babeltrace/compiler.h>
#include <babeltrace/component/component-class-internal.h>
#include <babeltrace/ref.h>
- if (!component_class || !init_method) {
+ if (!component_class || component_class->frozen || !init_method) {
- if (!component_class || !destroy_method) {
+ if (!component_class || component_class->frozen || !destroy_method) {
- if (!component_class || !description) {
+ if (!component_class || component_class->frozen || !description) {
int ret = 0;
struct bt_component_class_destroy_listener listener;
int ret = 0;
struct bt_component_class_destroy_listener listener;
+ if (!class || class->frozen || !func) {
struct bt_component_class_sink *sink_class;
int ret = 0;
struct bt_component_class_sink *sink_class;
int ret = 0;
- if (!component_class || !add_iterator_method ||
+ if (!component_class || component_class->frozen ||
+ !add_iterator_method ||
component_class->type != BT_COMPONENT_CLASS_TYPE_SINK) {
ret = -1;
goto end;
component_class->type != BT_COMPONENT_CLASS_TYPE_SINK) {
ret = -1;
goto end;
struct bt_component_class_filter *filter_class;
int ret = 0;
struct bt_component_class_filter *filter_class;
int ret = 0;
- if (!component_class || !add_iterator_method ||
+ if (!component_class || component_class->frozen ||
+ !add_iterator_method ||
component_class->type !=
BT_COMPONENT_CLASS_TYPE_FILTER) {
ret = -1;
component_class->type !=
BT_COMPONENT_CLASS_TYPE_FILTER) {
ret = -1;
+
+int bt_component_class_freeze(
+ struct bt_component_class *component_class)
+{
+ int ret = 0;
+
+ if (!component_class) {
+ ret = -1;
+ goto end;
+ }
+
+ component_class->frozen = true;
+
+end:
+ return ret;
+}
BT_PUT(component);
goto end;
}
BT_PUT(component);
goto end;
}
+
+ bt_component_class_freeze(component->class);