lib: update and simplify the `bt_object` API
[babeltrace.git] / lib / ctf-ir / event.c
index 5cfd5e14a124515e8bbcfc943722c71c8b75e005..9fa9223e6f845422af13ffed75da224e2a807298 100644 (file)
@@ -137,10 +137,10 @@ static
 int bt_event_common_create_fields(
                struct bt_stream_class_common *stream_class,
                struct bt_validation_output *validation_output,
-               void *(*create_field_func)(void *),
-               void (*release_field_func)(void *),
-               void *(*create_header_field_func)(void *, void *),
-               void (*release_header_field_func)(void *),
+               create_field_func create_field_func,
+               release_field_func release_field_func,
+               create_header_field_func create_header_field_func,
+               release_header_field_func release_header_field_func,
                struct bt_field_wrapper **header_field,
                struct bt_field_common **stream_event_context_field,
                struct bt_field_common **context_field,
@@ -197,7 +197,7 @@ int bt_event_common_create_fields(
 
 error:
        if (*header_field) {
-               release_header_field_func(*header_field);
+               release_header_field_func(*header_field, stream_class);
        }
 
        if (*stream_event_context_field) {
@@ -320,16 +320,16 @@ BT_HIDDEN
 int bt_event_common_initialize(struct bt_event_common *event,
                struct bt_event_class_common *event_class,
                struct bt_clock_class *init_expected_clock_class,
-               bt_object_release_func release_func,
+               bool is_shared_with_parent, bt_object_release_func release_func,
                bt_validation_flag_copy_field_type_func field_type_copy_func,
                bool must_be_in_trace,
                int (*map_clock_classes_func)(struct bt_stream_class_common *stream_class,
                        struct bt_field_type_common *packet_context_field_type,
                        struct bt_field_type_common *event_header_field_type),
-               void *(*create_field_func)(void *),
-               void (*release_field_func)(void *),
-               void *(*create_header_field_func)(void *, void *),
-               void (*release_header_field_func)(void *))
+               create_field_func create_field_func,
+               release_field_func release_field_func,
+               create_header_field_func create_header_field_func,
+               release_header_field_func release_header_field_func)
 {
        int ret;
        struct bt_trace_common *trace = NULL;
@@ -368,7 +368,11 @@ int bt_event_common_initialize(struct bt_event_common *event,
         * failure, the caller releases the reference to `event` to
         * destroy it.
         */
-       bt_object_init(event, release_func);
+       if (is_shared_with_parent) {
+               bt_object_init_shared_with_parent(&event->base, release_func);
+       } else {
+               bt_object_init_unique(&event->base);
+       }
 
        if (!stream_class->frozen) {
                /*
@@ -499,7 +503,7 @@ error:
        bt_put(expected_clock_class);
 
        if (event_header) {
-               release_header_field_func(event_header);
+               release_header_field_func(event_header, stream_class);
        }
 
        if (stream_event_context) {
@@ -572,19 +576,18 @@ struct bt_event *bt_event_new(struct bt_event_class *event_class)
        }
 
        ret = bt_event_common_initialize(BT_TO_COMMON(event),
-               BT_TO_COMMON(event_class), NULL, NULL,
+               BT_TO_COMMON(event_class), NULL, false, NULL,
                (bt_validation_flag_copy_field_type_func) bt_field_type_copy,
                true, NULL,
-               (void *) bt_field_create_recursive,
-               (void *) bt_field_destroy_recursive,
-               (void *) create_event_header_field,
-               (void *) bt_event_header_field_recycle);
+               (create_field_func) bt_field_create_recursive,
+               (release_field_func) bt_field_destroy_recursive,
+               (create_header_field_func) create_event_header_field,
+               (release_header_field_func) bt_event_header_field_recycle);
        if (ret) {
                /* bt_event_common_initialize() logs errors */
                goto error;
        }
 
-       bt_object_set_is_shared((void *) event, false);
        event->clock_values = g_hash_table_new_full(g_direct_hash,
                        g_direct_equal, NULL,
                        (GDestroyNotify) bt_clock_value_recycle);
This page took 0.026349 seconds and 4 git commands to generate.