Messages in this thread Patch in this message | | | From | Arnaldo Carvalho de Melo <> | Subject | [PATCH 5/6] perf trace: Free thread_trace->files table | Date | Wed, 19 Jul 2023 17:29:50 -0300 |
| |
From: Arnaldo Carvalho de Melo <acme@redhat.com>
The fd->pathname table that is kept in 'struct thread_trace' and thus in thread->priv must be freed when a thread is deleted.
This was also detected using -fsanitize=address.
Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Ian Rogers <irogers@google.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/builtin-trace.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c index 56651d666480cc16..7ece2521efb69182 100644 --- a/tools/perf/builtin-trace.c +++ b/tools/perf/builtin-trace.c @@ -1296,6 +1296,8 @@ static struct thread_trace *thread_trace__new(void) return ttrace; } +static void thread_trace__free_files(struct thread_trace *ttrace); + static void thread_trace__delete(void *pttrace) { struct thread_trace *ttrace = pttrace; @@ -1305,6 +1307,7 @@ static void thread_trace__delete(void *pttrace) intlist__delete(ttrace->syscall_stats); ttrace->syscall_stats = NULL; + thread_trace__free_files(ttrace); zfree(&ttrace->entry_str); free(ttrace); } @@ -1346,6 +1349,17 @@ void syscall_arg__set_ret_scnprintf(struct syscall_arg *arg, static const size_t trace__entry_str_size = 2048; +static void thread_trace__free_files(struct thread_trace *ttrace) +{ + for (int i = 0; i < ttrace->files.max; ++i) { + struct file *file = ttrace->files.table + i; + zfree(&file->pathname); + } + + zfree(&ttrace->files.table); + ttrace->files.max = -1; +} + static struct file *thread_trace__files_entry(struct thread_trace *ttrace, int fd) { if (fd < 0) -- 2.41.0
| |