When closing a "tep" data stream we destroy the "trace_seq" object. However, trace_seq_destroy() sets the buffer to "TRACE_SEQ_POISON" which is different from NULL. It is unfortunate that TRACE_SEQ_POISON is an internal definition of libtraceevent, so we have to redefine it here, but this can be fixed in the future. Signed-off-by: Yordan Karadzhov (VMware) <y.karadz@xxxxxxxxx> --- src/libkshark-tepdata.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/libkshark-tepdata.c b/src/libkshark-tepdata.c index bc5babb..4a84141 100644 --- a/src/libkshark-tepdata.c +++ b/src/libkshark-tepdata.c @@ -29,11 +29,17 @@ #include "libkshark-plugin.h" #include "libkshark-tepdata.h" +/** + * The TEP_SEQ_POISON is to catch the use of + * a trace_seq structure after it was destroyed. + */ +#define TEP_SEQ_POISON ((void *)0xdeadbeef) + static __thread struct trace_seq seq; static bool init_thread_seq(void) { - if (!seq.buffer) + if (!seq.buffer || seq.buffer == TEP_SEQ_POISON) trace_seq_init(&seq); return seq.buffer != NULL; -- 2.27.0