linux/tools/perf/tests
Ian Rogers 3cbb16ccd7 perf record: Fix unhandled POLLHUP on non_perf_event descriptors
When processing POLLHUP on a non_perf_event control descriptor,
evlist__finalize_ctlfd() is invoked to finalize the setup, correctly
setting the core evlist's poll array file descriptor to -1. However,
this finalized teardown state is never propagated back to the
individual thread's local replica of the pollfd array.

Consequently, on the next iteration of the main recording loop,
record__update_evlist_pollfd_from_thread() performs a strict
equivalence check between the core evlist's array and the thread's
localized poll array, detecting that the fd values no longer match.
This causes an immediate -EINVAL abort and a premature teardown.

Fix the underlying logic within
record__update_evlist_pollfd_from_thread() to sustainably propagate
the finalized teardown statuses (-1) originating from the core evlist
back to the thread's localized poll structure. This correctly
maintains synchronization and entirely prevents the unhandled
index mismatch crashes.

Additionally, add a unit test that explicitly validates that
fdarray__filter() preserves its invariants regarding
fdarray_flag__nonfilterable items to guard against regressions.

Fixes: fb4751e79c ("perf record: Fix teardown hang on system-wide multi-threaded sessions")
Signed-off-by: Ian Rogers <irogers@google.com>
Assisted-by: Gemini:gemini-3.1-pro
Cc: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2026-09-17 12:27:34 -03:00
..
config-fragments
shell perf test: Skip data_type_profiling when the PMU cannot record memory events 2026-09-17 12:22:07 -03:00
workloads perf test: Add Arm CoreSight callchain test 2026-07-03 16:52:00 -07:00
api-io.c
backward-ring-buffer.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
bitmap.c libperf cpumap: Make index and nr types unsigned 2026-04-01 14:50:53 -07:00
bp_account.c perf tests bp_account: Fix leaked file descriptor 2025-07-11 12:05:02 -07:00
bp_signal_overflow.c perf parse-events: Add default_breakpoint_len helper 2024-09-04 09:49:09 -03:00
bp_signal.c perf tools: Make more global variables static 2026-04-08 19:21:04 -07:00
Build perf tests: Add test for uncore event sorting 2026-05-20 18:23:55 -03:00
builtin-test.c perf test: Fix skiplist leak in cmd_test 2026-08-09 21:58:11 -07:00
code-reading.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
cpumap.c libperf cpumap: Make index and nr types unsigned 2026-04-01 14:50:53 -07:00
demangle-java-test.c perf test demangle-java: Don't segv if demangling fails 2025-05-28 10:12:47 -03:00
demangle-ocaml-test.c perf test demangle-ocaml: Switch to using dso__demangle_sym() 2025-05-09 17:03:09 -03:00
demangle-rust-v0-test.c perf test demangle-rust: Add Rust demangling test 2025-05-09 17:01:57 -03:00
dlfilter-test.c perf event: Fix size of synthesized sample with branch stacks 2026-05-20 16:11:30 -03:00
dso-data.c perf tools: Make more global variables static 2026-04-08 19:21:04 -07:00
dwarf-unwind.c perf machine: Explicitly pass in host perf_env 2025-07-25 10:37:57 -07:00
event_groups.c perf test: Update event_groups test to use instructions 2025-01-18 10:32:57 -08:00
event_update.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
event-times.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
evsel-roundtrip-name.c perf evlist: Add reference count 2026-06-30 10:17:10 -07:00
evsel-tp-sched.c perf evsel: Add reference count 2026-06-30 10:17:11 -07:00
expand-cgroup.c perf parse-events: Restrict core PMU bypass to --cputype option 2026-06-30 17:09:13 -07:00
expr.c perf test expr: Fix system_tsc_freq for only x86 2024-12-11 09:19:44 -08:00
fdarray.c perf record: Fix unhandled POLLHUP on non_perf_event descriptors 2026-09-17 12:27:34 -03:00
genelf.c
hists_common.c perf dso: Add reference count checking and accessor functions 2024-05-06 15:28:49 -03:00
hists_common.h
hists_cumulate.c perf evlist: Add reference count 2026-06-30 10:17:10 -07:00
hists_filter.c perf evlist: Add reference count 2026-06-30 10:17:10 -07:00
hists_link.c perf evlist: Add reference count 2026-06-30 10:17:10 -07:00
hists_output.c perf evlist: Add reference count 2026-06-30 10:17:10 -07:00
hwmon_pmu.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
is_printable_array.c
kallsyms-split.c perf machine: Propagate machine__init() error to callers 2026-06-17 09:21:03 -03:00
keep-tracking.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
kmod-path.c
make perf tests: Improvements to build-test performance 2026-09-09 17:00:36 -03:00
maps.c perf test maps: Additional maps__fixup_overlap_and_insert tests 2025-11-19 16:20:15 -08:00
mem.c perf mem-info: Add reference count checking 2024-05-07 18:06:44 -03:00
mem2node.c libperf cpumap: Make index and nr types unsigned 2026-04-01 14:50:53 -07:00
mmap-basic.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
mmap-thread-lookup.c perf machine: Explicitly pass in host perf_env 2025-07-25 10:37:57 -07:00
openat-syscall-all-cpus.c perf evsel: Add reference count 2026-06-30 10:17:11 -07:00
openat-syscall-tp-fields.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
openat-syscall.c perf evsel: Add reference count 2026-06-30 10:17:11 -07:00
parse-events.c perf parse-events: Restrict core PMU bypass to --cputype option 2026-06-30 17:09:13 -07:00
parse-metric.c perf parse-events: Restrict core PMU bypass to --cputype option 2026-06-30 17:09:13 -07:00
parse-no-sample-id-all.c perf evlist: Add reference count 2026-06-30 10:17:10 -07:00
pe-file-parsing.c perf tools: Don't read build-ids from non-regular files 2025-11-26 10:13:38 -08:00
pe-file.c
pe-file.exe
pe-file.exe.debug
perf-hooks.c
perf-record.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
perf-targz-src-pkg perf test: Change all remaining #!/bin/sh to #!/bin/bash 2025-06-26 10:31:05 -07:00
perf-time-to-tsc.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
pfm.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
pmu-events.c perf parse-events: Restrict core PMU bypass to --cputype option 2026-06-30 17:09:13 -07:00
pmu.c perf evlist: Add reference count 2026-06-30 10:17:10 -07:00
sample-parsing.c perf evsel: Validate RAW sample before byte swapping 2026-09-04 21:08:43 -03:00
sdt.c perf tools: Don't read build-ids from non-regular files 2025-11-26 10:13:38 -08:00
sigtrap.c perf btf: Make the sigtrap test helper to find a member by name widely available 2024-12-09 17:52:41 -03:00
stat.c perf stat: Move stat_config into config.c 2024-12-18 16:24:32 -03:00
subcmd-help.c perf test subcmd help: Add exclude disjoint subcmd names 2026-01-12 15:57:23 -03:00
sw-clock.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
switch-tracking.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
symbols.c perf symbol: Add setters for bitfields sharing a byte to avoid concurrent update issues 2026-06-03 16:53:45 -03:00
task-exit.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
tests-scripts.c perf test: Skip shebang and SPDX comments in shell test descriptions 2026-06-04 11:40:36 -03:00
tests-scripts.h
tests.h perf test: Add Arm CoreSight callchain test 2026-07-03 16:52:00 -07:00
thread-map.c perf tools: Use calloc() where applicable 2026-04-08 19:21:05 -07:00
thread-maps-share.c perf machine: Propagate machine__init() error to callers 2026-06-17 09:21:03 -03:00
time-utils-test.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
tool_pmu.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
topology.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
uncore-event-sorting.c perf evlist: Add reference count checking 2026-06-30 10:17:11 -07:00
unit_number__scnprintf.c
util.c perf test: Split monolithic 'util' test suite into sub-tests 2026-06-04 11:40:51 -03:00
vmlinux-kallsyms.c perf machine: Propagate machine__init() error to callers 2026-06-17 09:21:03 -03:00
wp.c perf tools: Make more global variables static 2026-04-08 19:21:04 -07:00