| From 647163832bf833cf7320cb62d1e33a4cb660fcc2 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 15 Jul 2021 18:07:18 +0200 |
| Subject: perf script: Fix memory 'threads' and 'cpus' leaks on exit |
| |
| From: Riccardo Mancini <rickyman7@gmail.com> |
| |
| [ Upstream commit faf3ac305d61341c74e5cdd9e41daecce7f67bfe ] |
| |
| ASan reports several memory leaks while running: |
| |
| # perf test "82: Use vfs_getname probe to get syscall args filenames" |
| |
| Two of these are caused by some refcounts not being decreased on |
| perf-script exit, namely script.threads and script.cpus. |
| |
| This patch adds the missing __put calls in a new perf_script__exit |
| function, which is called at the end of cmd_script. |
| |
| This patch concludes the fixes of all remaining memory leaks in perf |
| test "82: Use vfs_getname probe to get syscall args filenames". |
| |
| Signed-off-by: Riccardo Mancini <rickyman7@gmail.com> |
| Fixes: cfc8874a48599249 ("perf script: Process cpu/threads maps") |
| Cc: Ian Rogers <irogers@google.com> |
| Cc: Jiri Olsa <jolsa@redhat.com> |
| Cc: Mark Rutland <mark.rutland@arm.com> |
| Cc: Namhyung Kim <namhyung@kernel.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Link: http://lore.kernel.org/lkml/5ee73b19791c6fa9d24c4d57f4ac1a23609400d7.1626343282.git.rickyman7@gmail.com |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| tools/perf/builtin-script.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c |
| index 8a6656ab835b..c43c2963117d 100644 |
| --- a/tools/perf/builtin-script.c |
| +++ b/tools/perf/builtin-script.c |
| @@ -2534,6 +2534,12 @@ static void perf_script__exit_per_event_dump_stats(struct perf_script *script) |
| } |
| } |
| |
| +static void perf_script__exit(struct perf_script *script) |
| +{ |
| + perf_thread_map__put(script->threads); |
| + perf_cpu_map__put(script->cpus); |
| +} |
| + |
| static int __cmd_script(struct perf_script *script) |
| { |
| int ret; |
| @@ -3994,6 +4000,7 @@ out_delete: |
| zstd_fini(&(session->zstd_data)); |
| evlist__free_stats(session->evlist); |
| perf_session__delete(session); |
| + perf_script__exit(&script); |
| |
| if (script_started) |
| cleanup_scripting(); |
| -- |
| 2.30.2 |
| |