X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Flttng-live%2Flttng-live-comm.c;h=8059b338b095dd4672021946ae497b3f8a45f7dd;hp=77bf34ac377156a39fb60aa276873a2659655f24;hb=b93293f64299d1d7ef7a55a67e42b27fa2262f19;hpb=7371a18293e65e61033d9f2a9a47b95c7afaa09e diff --git a/formats/lttng-live/lttng-live-comm.c b/formats/lttng-live/lttng-live-comm.c index 77bf34ac..8059b338 100644 --- a/formats/lttng-live/lttng-live-comm.c +++ b/formats/lttng-live/lttng-live-comm.c @@ -607,6 +607,11 @@ int append_metadata(struct lttng_live_ctx *ctx, struct lttng_live_viewer_stream *metadata; char *metadata_buf = NULL; + if (!viewer_stream->ctf_trace->handle) { + printf_verbose("append_metadata: trace handle not ready yet.\n"); + return 0; + } + printf_verbose("get_next_index: new metadata needed\n"); ret = get_new_metadata(ctx, viewer_stream, &metadata_buf); if (ret < 0) { @@ -1276,14 +1281,30 @@ retry: } if (cur_index->content_size == 0) { + /* Beacon packet index */ if (file_stream->parent.stream_class) { file_stream->parent.cycles_timestamp = cur_index->ts_cycles.timestamp_end; file_stream->parent.real_timestamp = ctf_get_real_timestamp( &file_stream->parent, cur_index->ts_cycles.timestamp_end); + + /* + * Duplicate the data from the previous index, because + * the one we just received is only a beacon with no + * relevant information except the timestamp_end. We + * don't need to keep this timestamp_end because we already + * updated the file_stream timestamps, so we only need + * to keep the last real index data as prev_index. That + * way, we keep the original prev timestamps and + * discarded events counter. This is the same behaviour + * as if we were reading a local trace, we would not + * have fake indexes between real indexes. + */ + memcpy(cur_index, prev_index, sizeof(struct packet_index)); } } else { + /* Real packet index */ if (file_stream->parent.stream_class) { /* Convert the timestamps and append to the real_index. */ cur_index->ts_real.timestamp_begin = ctf_get_real_timestamp(