X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=lib%2Fctf-ir%2Fevent-class.c;h=57402e3474133bc5e712af3bbcd5564adb952c5a;hp=79cd123eac2362c490382551ffc35be07cdab81b;hb=312c056ae3d374b253fa0cfe5ed576c0b0e5e569;hpb=d1e4683534e67cc8643ad27536f64f6cc54bc5dc diff --git a/lib/ctf-ir/event-class.c b/lib/ctf-ir/event-class.c index 79cd123e..57402e34 100644 --- a/lib/ctf-ir/event-class.c +++ b/lib/ctf-ir/event-class.c @@ -30,10 +30,12 @@ #include #include +#include #include #include #include #include +#include #include #include #include @@ -116,11 +118,21 @@ error: static void bt_event_class_destroy(struct bt_object *obj) { + struct bt_event_class *event_class = (void *) obj; + BT_LOGD("Destroying event class: addr=%p", obj); bt_event_class_common_finalize(obj); + bt_object_pool_finalize(&event_class->event_pool); g_free(obj); } +static +void free_event(struct bt_event *event, + struct bt_event_class *event_class) +{ + bt_event_destroy(event); +} + struct bt_event_class *bt_event_class_create(const char *name) { int ret; @@ -147,6 +159,16 @@ struct bt_event_class *bt_event_class_create(const char *name) goto error; } + ret = bt_object_pool_initialize(&event_class->event_pool, + (bt_object_pool_new_object_func) bt_event_new, + (bt_object_pool_destroy_object_func) free_event, + event_class); + if (ret) { + BT_LOGE("Failed to initialize event pool: ret=%d", + ret); + goto error; + } + BT_LOGD("Created event class object: addr=%p, name=\"%s\"", event_class, bt_event_class_get_name(event_class)); goto end; @@ -303,3 +325,43 @@ int bt_event_class_common_validate_single_clock_class( end: return ret; } + +BT_HIDDEN +int bt_event_class_update_event_pool_clock_values( + struct bt_event_class *event_class) +{ + int ret = 0; + uint64_t i; + struct bt_stream_class *stream_class = + bt_event_class_borrow_stream_class(event_class); + + BT_ASSERT(stream_class->common.clock_class); + + for (i = 0; i < event_class->event_pool.size; i++) { + struct bt_clock_value *cv; + struct bt_event *event = + event_class->event_pool.objects->pdata[i]; + + BT_ASSERT(event); + + cv = g_hash_table_lookup(event->clock_values, + stream_class->common.clock_class); + if (cv) { + continue; + } + + cv = bt_clock_value_create(stream_class->common.clock_class); + if (!cv) { + BT_LIB_LOGE("Cannot create clock value from clock class: " + "%![cc-]+K", stream_class->common.clock_class); + ret = -1; + goto end; + } + + g_hash_table_insert(event->clock_values, + stream_class->common.clock_class, cv); + } + +end: + return ret; +}