Fix: lib/iterator.c: unbalanced ctx put (leak)
[babeltrace.git] / lib / iterator.c
index d439d7b926c52f6cdee9a7716d2bc75d3d3d194f..77093217cd2e8a979b5220cffc0a7492f88464c6 100644 (file)
@@ -144,6 +144,10 @@ static int seek_file_stream_by_timestamp(struct ctf_file_stream *cfs,
                        continue;
 
                stream_pos->packet_seek(&stream_pos->parent, i, SEEK_SET);
+               ret = bt_packet_seek_get_error();
+               if (ret < 0) {
+                       return EOF;
+               }
                do {
                        ret = stream_read_event(cfs);
                } while (cfs->parent.real_timestamp < timestamp && ret == 0);
@@ -243,6 +247,10 @@ static int find_max_timestamp_ctf_file_stream(struct ctf_file_stream *cfs,
         */
        for (i = stream_pos->packet_index->len - 1; i >= 0; i--) {
                stream_pos->packet_seek(&stream_pos->parent, i, SEEK_SET);
+               ret = bt_packet_seek_get_error();
+               if (ret < 0) {
+                       return EOF;
+               }
                count = 0;
                /* read each event until we reach the end of the stream */
                do {
@@ -770,6 +778,8 @@ int bt_iter_init(struct bt_iter *iter,
 error:
        bt_heap_free(iter->stream_heap);
 error_heap_init:
+       bt_context_put(ctx);
+       iter->ctx = NULL;
        g_free(iter->stream_heap);
        iter->stream_heap = NULL;
 error_ctx:
@@ -804,6 +814,7 @@ void bt_iter_fini(struct bt_iter *iter)
        }
        iter->ctx->current_iterator = NULL;
        bt_context_put(iter->ctx);
+       iter->ctx = NULL;
 }
 
 void bt_iter_destroy(struct bt_iter *iter)
@@ -856,6 +867,10 @@ int bt_iter_next(struct bt_iter *iter)
                 */
                ret = 0;
                goto reinsert;
+       } else if (ret == -ERANGE) {
+               removed = bt_heap_remove(iter->stream_heap);
+               assert(removed == file_stream);
+               goto end;
        } else if (ret) {
                goto end;
        }
This page took 0.025667 seconds and 4 git commands to generate.