aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2009-11-30 21:26:36 -0500
committerSteven Rostedt <rostedt@goodmis.org>2009-11-30 21:26:36 -0500
commit87768022f28cf7a2e35b1bee72d7cac577c19330 (patch)
tree6778d9a02f099918572e8fd982c747a72b3bc5fe
parentff8045d6fe327e96065c8d87564acaac1c62a34a (diff)
Handle better memory management of tracecmd_read_at
The memory management of the cached record let records leak like crazy when tracecmd_read_at was used. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--trace-input.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/trace-input.c b/trace-input.c
index 6fee129..eead50c 100644
--- a/trace-input.c
+++ b/trace-input.c
@@ -593,7 +593,7 @@ static struct record *
593read_event(struct tracecmd_handle *handle, unsigned long long offset, 593read_event(struct tracecmd_handle *handle, unsigned long long offset,
594 int cpu) 594 int cpu)
595{ 595{
596 struct record *record; 596 struct record *record = NULL;
597 597
598 /* 598 /*
599 * Since the timestamp is calculated from the beginnnig 599 * Since the timestamp is calculated from the beginnnig
@@ -607,8 +607,13 @@ read_event(struct tracecmd_handle *handle, unsigned long long offset,
607 handle->cpu_data[cpu].index = 0; 607 handle->cpu_data[cpu].index = 0;
608 608
609 do { 609 do {
610 if (record)
611 free(record);
610 /* Make sure peek returns new data */ 612 /* Make sure peek returns new data */
611 handle->cpu_data[cpu].next = NULL; 613 if (handle->cpu_data[cpu].next) {
614 free(handle->cpu_data[cpu].next);
615 handle->cpu_data[cpu].next = NULL;
616 }
612 record = tracecmd_read_data(handle, cpu); 617 record = tracecmd_read_data(handle, cpu);
613 } while (record && (record->offset + record->record_size) <= offset); 618 } while (record && (record->offset + record->record_size) <= offset);
614 619