From: Jérémie Galarneau Date: Fri, 13 Feb 2015 01:12:44 +0000 (-0500) Subject: Map default event header timestamp field to the stream class' clock X-Git-Tag: v2.0.0-pre1~1406 X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=eee752e5a2f89dce066f25c48a868474a10e923f Map default event header timestamp field to the stream class' clock Signed-off-by: Jérémie Galarneau --- diff --git a/formats/ctf/ir/event-types.c b/formats/ctf/ir/event-types.c index ee812571..ad569c6c 100644 --- a/formats/ctf/ir/event-types.c +++ b/formats/ctf/ir/event-types.c @@ -1871,7 +1871,9 @@ void bt_ctf_field_type_integer_destroy(struct bt_ctf_ref *ref) integer = container_of( container_of(ref, struct bt_ctf_field_type, ref_count), struct bt_ctf_field_type_integer, parent); - bt_ctf_clock_put(integer->mapped_clock); + if (integer->mapped_clock) { + bt_ctf_clock_put(integer->mapped_clock); + } g_free(integer); } diff --git a/formats/ctf/ir/stream-class.c b/formats/ctf/ir/stream-class.c index cd87dffa..18ae57ea 100644 --- a/formats/ctf/ir/stream-class.c +++ b/formats/ctf/ir/stream-class.c @@ -120,12 +120,37 @@ int bt_ctf_stream_class_set_clock(struct bt_ctf_stream_class *stream_class, struct bt_ctf_clock *clock) { int ret = 0; + struct bt_ctf_field_type *timestamp_field = NULL; if (!stream_class || !clock || stream_class->frozen) { ret = -1; goto end; } + /* + * Look for a "timestamp" field in the stream class' event header type + * and map the stream's clock to that field if no current mapping is + * currently set. + */ + timestamp_field = bt_ctf_field_type_structure_get_field_type_by_name( + stream_class->event_header_type, "timestamp"); + if (timestamp_field) { + struct bt_ctf_clock *mapped_clock; + + mapped_clock = bt_ctf_field_type_integer_get_mapped_clock( + timestamp_field); + if (mapped_clock) { + bt_ctf_clock_put(mapped_clock); + goto end; + } + + ret = bt_ctf_field_type_integer_set_mapped_clock( + timestamp_field, clock); + if (ret) { + goto end; + } + } + if (stream_class->clock) { bt_ctf_clock_put(stream_class->clock); } @@ -133,6 +158,9 @@ int bt_ctf_stream_class_set_clock(struct bt_ctf_stream_class *stream_class, stream_class->clock = clock; bt_ctf_clock_get(clock); end: + if (timestamp_field) { + bt_ctf_field_type_put(timestamp_field); + } return ret; }