X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=lib%2Fiterator.c;h=ca6e5917e449b328f6ba0869397297b60d7e4e57;hp=686ddb1bfdcb9e80d46dfe89736c2fdaa4a01cd6;hb=e003e87103a3fd72d543ec3191c20df56599b0f5;hpb=40961f78d0166bfbc37e774f331206ca8dd2d447 diff --git a/lib/iterator.c b/lib/iterator.c index 686ddb1b..ca6e5917 100644 --- a/lib/iterator.c +++ b/lib/iterator.c @@ -110,8 +110,7 @@ static int seek_file_stream_by_timestamp(struct ctf_file_stream *cfs, for (i = 0; i < stream_pos->packet_index->len; i++) { index = &g_array_index(stream_pos->packet_index, struct packet_index, i); - if (index->timestamp_begin >= timestamp || - index->timestamp_end <= timestamp) + if (index->timestamp_end <= timestamp) continue; stream_pos->packet_seek(&stream_pos->parent, i, SEEK_SET); @@ -431,12 +430,17 @@ end: int bt_iter_init(struct bt_iter *iter, struct bt_context *ctx, - struct bt_iter_pos *begin_pos, - struct bt_iter_pos *end_pos) + const struct bt_iter_pos *begin_pos, + const struct bt_iter_pos *end_pos) { int i, stream_id; int ret = 0; + if (ctx->current_iterator) { + ret = -1; + goto error_ctx; + } + iter->stream_heap = g_new(struct ptr_heap, 1); iter->end_pos = end_pos; bt_context_get(ctx); @@ -487,18 +491,20 @@ int bt_iter_init(struct bt_iter *iter, } } + ctx->current_iterator = iter; return 0; error: heap_free(iter->stream_heap); error_heap_init: g_free(iter->stream_heap); +error_ctx: return ret; } struct bt_iter *bt_iter_create(struct bt_context *ctx, - struct bt_iter_pos *begin_pos, - struct bt_iter_pos *end_pos) + const struct bt_iter_pos *begin_pos, + const struct bt_iter_pos *end_pos) { struct bt_iter *iter; int ret; @@ -518,6 +524,7 @@ void bt_iter_fini(struct bt_iter *iter) heap_free(iter->stream_heap); g_free(iter->stream_heap); } + iter->ctx->current_iterator = NULL; bt_context_put(iter->ctx); }