X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=lib%2Fgraph%2Fnotification%2Fstream.c;h=e6015c250d15b06b2b632e8881c6ecc2be8cdcbf;hp=c9e694311b74081321c881ae0764c98766fb36d9;hb=44c440bc5fe8219cc17d1b786d91fd83c4c9860a;hpb=c800eb3790218d2f33df01e77ec38cbd43cc02a1 diff --git a/lib/graph/notification/stream.c b/lib/graph/notification/stream.c index c9e69431..e6015c25 100644 --- a/lib/graph/notification/stream.c +++ b/lib/graph/notification/stream.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -46,7 +47,11 @@ void bt_notification_stream_end_destroy(struct bt_object *obj) notification); BT_LOGD_STR("Putting stream."); BT_PUT(notification->stream); - bt_clock_value_set_finalize(¬ification->cv_set); + + if (notification->default_cv) { + bt_clock_value_recycle(notification->default_cv); + } + g_free(notification); } @@ -56,7 +61,6 @@ struct bt_notification *bt_notification_stream_end_create( { struct bt_notification_stream_end *notification; struct bt_stream_class *stream_class; - int ret; BT_ASSERT_PRE_NON_NULL(stream, "Stream"); stream_class = bt_stream_borrow_class(stream); @@ -79,11 +83,6 @@ struct bt_notification *bt_notification_stream_end_create( BT_NOTIFICATION_TYPE_STREAM_END, bt_notification_stream_end_destroy, NULL); notification->stream = bt_get(stream); - ret = bt_clock_value_set_initialize(¬ification->cv_set); - if (ret) { - goto error; - } - BT_LOGD("Created stream end notification object: " "stream-addr=%p, stream-name=\"%s\", " "stream-class-addr=%p, stream-class-name=\"%s\", " @@ -110,36 +109,44 @@ struct bt_stream *bt_notification_stream_end_borrow_stream( return stream_end->stream; } -int bt_notification_stream_end_set_clock_value(struct bt_notification *notif, - struct bt_clock_class *clock_class, uint64_t raw_value, - bt_bool is_default) +int bt_notification_stream_end_set_default_clock_value( + struct bt_notification *notif, uint64_t value_cycles) { - struct bt_notification_stream_end *stream_end = (void *) notif; + int ret = 0; + struct bt_notification_stream_end *se_notif = (void *) notif; BT_ASSERT_PRE_NON_NULL(notif, "Notification"); - BT_ASSERT_PRE_NON_NULL(clock_class, "Clock class"); BT_ASSERT_PRE_HOT(notif, "Notification", ": %!+n", notif); BT_ASSERT_PRE_NOTIF_IS_TYPE(notif, BT_NOTIFICATION_TYPE_STREAM_END); - BT_ASSERT_PRE(is_default, - "You can only set a default clock value as of this version."); - return bt_clock_value_set_set_clock_value(&stream_end->cv_set, - clock_class, raw_value, is_default); + BT_ASSERT_PRE(se_notif->stream->class->default_clock_class, + "Notification's stream class has no default clock class: " + "%![notif-]+n, %![sc-]+S", notif, se_notif->stream->class); + + if (!se_notif->default_cv) { + se_notif->default_cv = bt_clock_value_create( + se_notif->stream->class->default_clock_class); + if (!se_notif->default_cv) { + ret = -1; + goto end; + } + } + + bt_clock_value_set_value_inline(se_notif->default_cv, value_cycles); + BT_LIB_LOGV("Set notification's default clock value: %![notif-]+n, " + "value=%" PRIu64, value_cycles); + +end: + return ret; } struct bt_clock_value *bt_notification_stream_end_borrow_default_clock_value( struct bt_notification *notif) { struct bt_notification_stream_end *stream_end = (void *) notif; - struct bt_clock_value *clock_value = NULL; BT_ASSERT_PRE_NON_NULL(notif, "Notification"); BT_ASSERT_PRE_NOTIF_IS_TYPE(notif, BT_NOTIFICATION_TYPE_STREAM_END); - clock_value = stream_end->cv_set.default_cv; - if (!clock_value) { - BT_LIB_LOGV("No default clock value: %![notif-]+n", notif); - } - - return clock_value; + return stream_end->default_cv; } static @@ -152,7 +159,11 @@ void bt_notification_stream_begin_destroy(struct bt_object *obj) notification); BT_LOGD_STR("Putting stream."); BT_PUT(notification->stream); - bt_clock_value_set_finalize(¬ification->cv_set); + + if (notification->default_cv) { + bt_clock_value_recycle(notification->default_cv); + } + g_free(notification); } @@ -160,7 +171,6 @@ struct bt_notification *bt_notification_stream_begin_create( struct bt_private_connection_private_notification_iterator *notif_iter, struct bt_stream *stream) { - int ret; struct bt_notification_stream_begin *notification; struct bt_stream_class *stream_class; @@ -185,11 +195,6 @@ struct bt_notification *bt_notification_stream_begin_create( BT_NOTIFICATION_TYPE_STREAM_BEGIN, bt_notification_stream_begin_destroy, NULL); notification->stream = bt_get(stream); - ret = bt_clock_value_set_initialize(¬ification->cv_set); - if (ret) { - goto error; - } - BT_LOGD("Created stream beginning notification object: " "stream-addr=%p, stream-name=\"%s\", " "stream-class-addr=%p, stream-class-name=\"%s\", " @@ -216,34 +221,42 @@ struct bt_stream *bt_notification_stream_begin_borrow_stream( return stream_begin->stream; } -int bt_notification_stream_begin_set_clock_value(struct bt_notification *notif, - struct bt_clock_class *clock_class, uint64_t raw_value, - bt_bool is_default) +int bt_notification_stream_begin_set_default_clock_value( + struct bt_notification *notif, uint64_t value_cycles) { - struct bt_notification_stream_begin *stream_begin = (void *) notif; + int ret = 0; + struct bt_notification_stream_begin *sb_notif = (void *) notif; BT_ASSERT_PRE_NON_NULL(notif, "Notification"); - BT_ASSERT_PRE_NON_NULL(clock_class, "Clock class"); BT_ASSERT_PRE_HOT(notif, "Notification", ": %!+n", notif); BT_ASSERT_PRE_NOTIF_IS_TYPE(notif, BT_NOTIFICATION_TYPE_STREAM_BEGIN); - BT_ASSERT_PRE(is_default, - "You can only set a default clock value as of this version."); - return bt_clock_value_set_set_clock_value(&stream_begin->cv_set, - clock_class, raw_value, is_default); + BT_ASSERT_PRE(sb_notif->stream->class->default_clock_class, + "Notification's stream class has no default clock class: " + "%![notif-]+n, %![sc-]+S", notif, sb_notif->stream->class); + + if (!sb_notif->default_cv) { + sb_notif->default_cv = bt_clock_value_create( + sb_notif->stream->class->default_clock_class); + if (!sb_notif->default_cv) { + ret = -1; + goto end; + } + } + + bt_clock_value_set_value_inline(sb_notif->default_cv, value_cycles); + BT_LIB_LOGV("Set notification's default clock value: %![notif-]+n, " + "value=%" PRIu64, value_cycles); + +end: + return ret; } struct bt_clock_value *bt_notification_stream_begin_borrow_default_clock_value( struct bt_notification *notif) { struct bt_notification_stream_begin *stream_begin = (void *) notif; - struct bt_clock_value *clock_value = NULL; BT_ASSERT_PRE_NON_NULL(notif, "Notification"); BT_ASSERT_PRE_NOTIF_IS_TYPE(notif, BT_NOTIFICATION_TYPE_STREAM_BEGIN); - clock_value = stream_begin->cv_set.default_cv; - if (!clock_value) { - BT_LIB_LOGV("No default clock value: %![notif-]+n", notif); - } - - return clock_value; + return stream_begin->default_cv; }