g_error("Can not map block");
goto fail;
}
- if(ltt_time_compare(time, tf->buffer.start.timestamp) < 0) {
+ if(high == low) {
+ /* We cannot divide anymore : this is what would happen if the time
+ * requested was exactly between two consecutive buffers'end and start
+ * timestamps. This is also what would happend if we didn't deal with out
+ * of span cases prior in this function. */
+ /* The event is right in the buffer!
+ * (or in the next buffer first event) */
+ while(1) {
+ ltt_tracefile_read(tf);
+ if(ltt_time_compare(time, tf->event.event_time) >= 0)
+ break;
+ }
+
+ } if(ltt_time_compare(time, tf->buffer.start.timestamp) < 0) {
/* go to lower part */
high = block_num;
} else if(ltt_time_compare(time, tf->buffer.end.timestamp) > 0) {
g_error("Can not map block");
return NULL;
}
+ /* seek to the first event */
+ err = ltt_seek_next_event(tf);
+ if(unlikely(err == ERANGE)) {
+ g_error("event id is out of range\n");
+ return NULL;
+ }
+
pos = tf->event.offset;
}
}