Skip to content

Commit 83d25cc

Browse files
namhyungacmel
authored andcommitted
perf test: Fix cpu and thread map leaks in task_exit test
The evlist has the maps with its own refcounts so we don't need to set the pointers to NULL. Otherwise following error was reported by Asan. Also change the goto label since it doesn't need to have two. # perf test -v 24 24: Number of exit events of a simple workload : --- start --- test child forked, pid 145915 mmap size 528384B ================================================================= ==145915==ERROR: LeakSanitizer: detected memory leaks Direct leak of 32 byte(s) in 1 object(s) allocated from: #0 0x7fc44e50d1f8 in __interceptor_realloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cpp:164 #1 0x561cf50f4d2e in perf_thread_map__realloc /home/namhyung/project/linux/tools/lib/perf/threadmap.c:23 #2 0x561cf4eeb949 in thread_map__new_by_tid util/thread_map.c:63 #3 0x561cf4db7fd2 in test__task_exit tests/task-exit.c:74 #4 0x561cf4d798fb in run_test tests/builtin-test.c:428 #5 0x561cf4d798fb in test_and_print tests/builtin-test.c:458 #6 0x561cf4d7ba53 in __cmd_test tests/builtin-test.c:679 #7 0x561cf4d7ba53 in cmd_test tests/builtin-test.c:825 #8 0x561cf4de7d04 in run_builtin /home/namhyung/project/linux/tools/perf/perf.c:313 #9 0x561cf4c71a88 in handle_internal_command /home/namhyung/project/linux/tools/perf/perf.c:365 #10 0x561cf4c71a88 in run_argv /home/namhyung/project/linux/tools/perf/perf.c:409 #11 0x561cf4c71a88 in main /home/namhyung/project/linux/tools/perf/perf.c:539 #12 0x7fc44e042d09 in __libc_start_main ../csu/libc-start.c:308 ... test child finished with 1 ---- end ---- Number of exit events of a simple workload: FAILED! Signed-off-by: Namhyung Kim <[email protected]> Acked-by: Jiri Olsa <[email protected]> Cc: Adrian Hunter <[email protected]> Cc: Alexander Shishkin <[email protected]> Cc: Andi Kleen <[email protected]> Cc: Ian Rogers <[email protected]> Cc: Ingo Molnar <[email protected]> Cc: Leo Yan <[email protected]> Cc: Mark Rutland <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Stephane Eranian <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
1 parent 09a61c8 commit 83d25cc

File tree

1 file changed

+3
-7
lines changed

1 file changed

+3
-7
lines changed

tools/perf/tests/task-exit.c

+3-7
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,11 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused
7575
if (!cpus || !threads) {
7676
err = -ENOMEM;
7777
pr_debug("Not enough memory to create thread/cpu maps\n");
78-
goto out_free_maps;
78+
goto out_delete_evlist;
7979
}
8080

8181
perf_evlist__set_maps(&evlist->core, cpus, threads);
8282

83-
cpus = NULL;
84-
threads = NULL;
85-
8683
err = evlist__prepare_workload(evlist, &target, argv, false, workload_exec_failed_signal);
8784
if (err < 0) {
8885
pr_debug("Couldn't run the workload!\n");
@@ -137,7 +134,7 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused
137134
if (retry_count++ > 1000) {
138135
pr_debug("Failed after retrying 1000 times\n");
139136
err = -1;
140-
goto out_free_maps;
137+
goto out_delete_evlist;
141138
}
142139

143140
goto retry;
@@ -148,10 +145,9 @@ int test__task_exit(struct test *test __maybe_unused, int subtest __maybe_unused
148145
err = -1;
149146
}
150147

151-
out_free_maps:
148+
out_delete_evlist:
152149
perf_cpu_map__put(cpus);
153150
perf_thread_map__put(threads);
154-
out_delete_evlist:
155151
evlist__delete(evlist);
156152
return err;
157153
}

0 commit comments

Comments
 (0)