Propagate error from packet_seek in case of truncated packet
[babeltrace.git] / lib / iterator.c
index 70f25edd9f0a0948a7820b894fec2bb7143426a3..639a2d290a5abc5aeabc94148c772c6b3dc9dc67 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 {
@@ -830,7 +838,8 @@ int bt_iter_next(struct bt_iter *iter)
        }
 
        ret = stream_read_event(file_stream);
-       if (file_stream->pos.parent.trace->interval_set) {
+       if (file_stream->pos.parent.trace &&
+                       file_stream->pos.parent.trace->interval_set) {
                event_outside_interval =
                                file_stream->parent.real_timestamp >
                                file_stream->pos.parent.trace->interval_real.timestamp_end;
@@ -855,6 +864,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.024843 seconds and 4 git commands to generate.