Implement CTF-IR event getters
[babeltrace.git] / formats / ctf / writer / writer.c
index d1ef5dc45d46be4359e39147a874b6ce5ec6a9f8..57236bd94186baa0c3e562cb1a49834191b39971 100644 (file)
@@ -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);
        }
This page took 0.022421 seconds and 4 git commands to generate.