X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=lib%2Fiterator.c;fp=lib%2Fiterator.c;h=009fcd3fecf0b502e19a4719225d470fd4719c7d;hp=4190e65286d914021133ea110e936a27ce51c208;hb=6c9a50c0105929edd0ddef958378e8714b854c46;hpb=c309df1c8522c61ea9f4f108fa2d1eee3a828037 diff --git a/lib/iterator.c b/lib/iterator.c index 4190e652..009fcd3f 100644 --- a/lib/iterator.c +++ b/lib/iterator.c @@ -73,16 +73,24 @@ static int stream_read_event(struct ctf_file_stream *sin) } /* - * returns true if a < b, false otherwise. + * Return true if a < b, false otherwise. + * If time stamps are exactly the same, compare by stream path. This + * ensures we get the same result between runs on the same trace + * collection on different environments. + * The result will be random for memory-mapped traces since there is no + * fixed path leading to those (they have empty path string). */ static int stream_compare(void *a, void *b) { struct ctf_file_stream *s_a = a, *s_b = b; - if (s_a->parent.real_timestamp < s_b->parent.real_timestamp) + if (s_a->parent.real_timestamp < s_b->parent.real_timestamp) { return 1; - else + } else if (likely(s_a->parent.real_timestamp > s_b->parent.real_timestamp)) { return 0; + } else { + return strcmp(s_a->parent.path, s_b->parent.path); + } } void bt_iter_free_pos(struct bt_iter_pos *iter_pos)