From db8a45114dfe2ffd2b23ec0517a043b508de41fd Mon Sep 17 00:00:00 2001 From: Julien Desfossez Date: Thu, 2 Aug 2012 17:45:54 -0400 Subject: [PATCH 1/1] Fix: Restore heap for SEEK_BEGIN We don't know in which state the heap is when we call a SEEK_BEGIN, so we need to clear it and populate it when all the filestreams are in place. Fixes: #319 Signed-off-by: Julien Desfossez Signed-off-by: Mathieu Desnoyers --- lib/iterator.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/iterator.c b/lib/iterator.c index 65429a89..60e877ec 100644 --- a/lib/iterator.c +++ b/lib/iterator.c @@ -276,6 +276,11 @@ int bt_iter_set_pos(struct bt_iter *iter, const struct bt_iter_pos *iter_pos) return 0; case BT_SEEK_BEGIN: tc = iter->ctx->tc; + heap_free(iter->stream_heap); + ret = heap_init(iter->stream_heap, 0, stream_compare); + if (ret < 0) + goto error; + for (i = 0; i < tc->array->len; i++) { struct ctf_trace *tin; struct trace_descriptor *td_read; @@ -310,6 +315,9 @@ int bt_iter_set_pos(struct bt_iter *iter, const struct bt_iter_pos *iter_pos) if (ret != 0 && ret != EOF) { goto error; } + ret = heap_insert(iter->stream_heap, file_stream); + if (ret) + goto error; } } } -- 2.34.1