X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=lib%2Fcomponent%2Fcomponent-class.c;h=55f020d219efa424313d4f3c39b2692500b5a1ad;hb=1e4d8103c3bac7dfe6f9d966acadc4512b861ee6;hp=22551f88c54c60d55a3da428adab72b71937e30b;hpb=d71dcf2c09c27291afa19a40eb99cc3556842e99;p=babeltrace.git diff --git a/lib/component/component-class.c b/lib/component/component-class.c index 22551f88..55f020d2 100644 --- a/lib/component/component-class.c +++ b/lib/component/component-class.c @@ -29,6 +29,7 @@ #include #include #include +#include #include static @@ -202,7 +203,7 @@ int bt_component_class_set_init_method( { int ret = 0; - if (!component_class || !init_method) { + if (!component_class || component_class->frozen || !init_method) { ret = -1; goto end; } @@ -219,7 +220,7 @@ int bt_component_class_set_destroy_method( { int ret = 0; - if (!component_class || !destroy_method) { + if (!component_class || component_class->frozen || !destroy_method) { ret = -1; goto end; } @@ -236,7 +237,7 @@ extern int bt_component_class_set_description( { int ret = 0; - if (!component_class || !description) { + if (!component_class || component_class->frozen || !description) { ret = -1; goto end; } @@ -274,7 +275,7 @@ int bt_component_class_add_destroy_listener(struct bt_component_class *class, int ret = 0; struct bt_component_class_destroy_listener listener; - if (!class || !func) { + if (!class || class->frozen || !func) { ret = -1; goto end; } @@ -294,7 +295,8 @@ extern int bt_component_class_sink_set_add_iterator_method( 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; @@ -315,7 +317,8 @@ extern int bt_component_class_filter_set_add_iterator_method( 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; @@ -329,3 +332,19 @@ extern int bt_component_class_filter_set_add_iterator_method( end: return ret; } + +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; +}