X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=formats%2Fctf%2Fwriter%2Fwriter.c;h=57236bd94186baa0c3e562cb1a49834191b39971;hb=2f100782231d86cdaaadf7a8568c5b28583800f4;hp=1f3c3b27b14f38c4b462b4c3f04b00a8f21eef2e;hpb=adc315b840e3970b9f6e255c91e38ec29f05adab;p=babeltrace.git diff --git a/formats/ctf/writer/writer.c b/formats/ctf/writer/writer.c index 1f3c3b27..57236bd9 100644 --- a/formats/ctf/writer/writer.c +++ b/formats/ctf/writer/writer.c @@ -3,7 +3,7 @@ * * Babeltrace CTF Writer * - * Copyright 2013 EfficiOS Inc. + * Copyright 2013, 2014 Jérémie Galarneau * * Author: Jérémie Galarneau * @@ -234,6 +234,7 @@ struct bt_ctf_stream *bt_ctf_writer_create_stream(struct bt_ctf_writer *writer, goto error; } + for (i = 0; i < writer->stream_classes->len; i++) { if (writer->stream_classes->pdata[i] == stream->stream_class) { stream_class_found = 1; @@ -241,11 +242,21 @@ struct bt_ctf_stream *bt_ctf_writer_create_stream(struct bt_ctf_writer *writer, } if (!stream_class_found) { - if (bt_ctf_stream_class_set_id(stream->stream_class, - writer->next_stream_id++)) { - goto error; + int64_t stream_id = bt_ctf_stream_class_get_id(stream_class); + if (stream_id < 0) { + if (bt_ctf_stream_class_set_id(stream->stream_class, + writer->next_stream_id++)) { + goto error; + } } + for (i = 0; i < writer->stream_classes->len; i++) { + if (stream_id == bt_ctf_stream_class_get_id( + writer->stream_classes->pdata[i])) { + /* Duplicate stream id found */ + goto error; + } + } bt_ctf_stream_class_get(stream->stream_class); g_ptr_array_add(writer->stream_classes, stream->stream_class); } @@ -724,7 +735,7 @@ void stream_flush_cb(struct bt_ctf_stream *stream, struct bt_ctf_writer *writer) stream_id = bt_ctf_field_structure_get_field( writer->trace_packet_header, "stream_id"); - bt_ctf_field_unsigned_integer_set_value(stream_id, stream->id); + bt_ctf_field_unsigned_integer_set_value(stream_id, stream->stream_class->id); bt_ctf_field_put(stream_id); /* Write the trace_packet_header */