From badea1a2413e25f0b1961770148e28deba8a3a3f Mon Sep 17 00:00:00 2001 From: Julien Desfossez Date: Tue, 21 Feb 2012 16:47:15 -0500 Subject: [PATCH] Fix : segfault when printing timestamp on index If we detect we lost events in a packet, we print an error message containing the begin and end timestamps of the packet. If we detect this packet loss while generating the index (during the open_trace), the trace_collection is not yet referenced and so the clock information is not available. This fix prevents the printing at this stage. Signed-off-by: Julien Desfossez Signed-off-by: Mathieu Desnoyers --- formats/ctf/ctf.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c index 83680cd6..fa196481 100644 --- a/formats/ctf/ctf.c +++ b/formats/ctf/ctf.c @@ -535,16 +535,25 @@ void ctf_packet_seek(struct stream_pos *stream_pos, size_t index, int whence) * be printed in the output. */ if (file_stream->parent.events_discarded) { - fflush(stdout); - fprintf(stderr, "[warning] Tracer discarded %d events at end of stream between [", - file_stream->parent.events_discarded); - ctf_print_timestamp(stderr, &file_stream->parent, - file_stream->parent.prev_timestamp); - fprintf(stderr, "] and ["); - ctf_print_timestamp(stderr, &file_stream->parent, - file_stream->parent.prev_timestamp_end); - fprintf(stderr, "]. You should consider increasing the buffer size.\n"); - fflush(stderr); + /* + * We need to check if we are in trace + * read or called from packet indexing. + * In this last case, the collection is + * not there, so we cannot print the + * timestamps. + */ + if ((&file_stream->parent)->stream_class->trace->collection) { + fflush(stdout); + fprintf(stderr, "[warning] Tracer discarded %d events at end of stream between [", + file_stream->parent.events_discarded); + ctf_print_timestamp(stderr, &file_stream->parent, + file_stream->parent.prev_timestamp); + fprintf(stderr, "] and ["); + ctf_print_timestamp(stderr, &file_stream->parent, + file_stream->parent.prev_timestamp_end); + fprintf(stderr, "]. You should consider increasing the buffer size.\n"); + fflush(stderr); + } file_stream->parent.events_discarded = 0; } pos->offset = EOF; -- 2.34.1