diff mbox series

[1/3] trace-cmd library: Fix tracecmd_iterate_events_multi() CPU clean up

Message ID 20231229031138.68313-2-rostedt@goodmis.org (mailing list archive)
State Accepted
Commit 66d3bebcec7acc3c845d9f5e0809f7b59d43bae5
Headers show
Series trace-cmd library: Fixes and add a reset | expand

Commit Message

Steven Rostedt Dec. 29, 2023, 3:10 a.m. UTC
From: "Steven Rostedt (Google)" <rostedt@goodmis.org>

In tracecmd_iterate_events_multi(), the clean up code at the end of the
function that unlocks and frees the remaining records, iterated the CPUs via
a for loop of 0 through all_cpus. But the kbuffer_read_at_offset() function,
expects the CPU passed in to be that of the handle and not of all the
handles.

That is, if there are two trace.dat files being read, and one has 4 CPUs and
the other has 2, the "all_cpus" variable will be 6. When iterating at the
clean up, when it gets passed 3 (4 CPUs is represented by 0-3) it will then
go to 4 and then 5 for the 2 CPUs trace.dat file. Passing in 4 or 5 to
kbuffer_read_at_offset() will fail. It needs to use the local CPU count of
the trace.dat file.

Fixes: 7f0a59aef63c1 ("trace-cmd library: Have tracecmd_iterate_events() start where it left off")
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
 lib/trace-cmd/trace-input.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/lib/trace-cmd/trace-input.c b/lib/trace-cmd/trace-input.c
index 42c8312f8395..bf070f057ed0 100644
--- a/lib/trace-cmd/trace-input.c
+++ b/lib/trace-cmd/trace-input.c
@@ -3143,7 +3143,7 @@  int tracecmd_iterate_events_multi(struct tracecmd_input **handles,
 		offset = (int)(records[cpu].record->offset & (handle->page_size - 1));
 		free_next(handle, local_cpu);
 		/* Reset the buffer to read the cached record again */
-		kbuffer_read_at_offset(handle->cpu_data[cpu].kbuf, offset, NULL);
+		kbuffer_read_at_offset(handle->cpu_data[local_cpu].kbuf, offset, NULL);
 	}
 
 	free(records);