mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-16 18:26:42 +00:00
perf thread_map: Skip exited threads when scanning /proc
Scanning /proc is inherently racy. Scanning /proc/pid/task within that is also racy as the pid can terminate. Rather than failing in __thread_map__new_all_cpus, skip pids for such failures. Signed-off-by: Ian Rogers <irogers@google.com> Cc: James Clark <james.clark@arm.com> Cc: Justin Stitt <justinstitt@google.com> Cc: Bill Wendling <morbo@google.com> Cc: Nick Desaulniers <ndesaulniers@google.com> Cc: Yang Jihong <yangjihong1@huawei.com> Cc: Nathan Chancellor <nathan@kernel.org> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Athira Jajeev <atrajeev@linux.vnet.ibm.com> Cc: llvm@lists.linux.dev Signed-off-by: Namhyung Kim <namhyung@kernel.org> Link: https://lore.kernel.org/r/20240221034155.1500118-2-irogers@google.com
This commit is contained in:
parent
b6968f9b50
commit
510e528786
@ -109,9 +109,10 @@ static struct perf_thread_map *__thread_map__new_all_cpus(uid_t uid)
|
||||
|
||||
snprintf(path, sizeof(path), "/proc/%d/task", pid);
|
||||
items = scandir(path, &namelist, filter, NULL);
|
||||
if (items <= 0)
|
||||
goto out_free_closedir;
|
||||
|
||||
if (items <= 0) {
|
||||
pr_debug("scandir for %d returned empty, skipping\n", pid);
|
||||
continue;
|
||||
}
|
||||
while (threads->nr + items >= max_threads) {
|
||||
max_threads *= 2;
|
||||
grow = true;
|
||||
@ -152,8 +153,6 @@ out_free_namelist:
|
||||
for (i = 0; i < items; i++)
|
||||
zfree(&namelist[i]);
|
||||
free(namelist);
|
||||
|
||||
out_free_closedir:
|
||||
zfree(&threads);
|
||||
goto out_closedir;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user