linux/tools/lib
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
..
api perf record: Fix unhandled POLLHUP on non_perf_event descriptors 2026-09-17 12:27:34 -03:00
bpf perf tools updates for v7.3 2026-08-22 08:47:50 -07:00
perf libperf: Document code simplification case for widening struct perf_cpu 2026-06-10 15:23:54 -03:00
python docs: python: abi_regex: convert adjacent index placeholders 2026-08-11 10:36:28 -06:00
subcmd tools/build: selftests: Remove some duplicate toolchain definitions 2026-07-25 22:25:00 -07:00
symbol tools/build: selftests: Remove some duplicate toolchain definitions 2026-07-25 22:25:00 -07:00
thermal tools/lib/thermal: Fix misplaced extern "C" closing brace 2026-08-07 17:18:51 +02:00
argv_split.c
bitmap.c mm/vma: add vma_flags_empty(), vma_flags_and(), vma_flags_diff_pair() 2026-04-05 13:53:38 -07:00
cmdline.c memblock test: fix implicit declaration of function 'memparse' 2024-08-06 08:21:25 +03:00
ctype.c
find_bit.c
hweight.c
list_sort.c tools/lib/list_sort: remove unnecessary header includes 2024-11-05 17:12:33 -08:00
rbtree.c
slab.c lib/rbtree: enable userland test suite for rbtree related data structure 2025-03-17 12:17:00 -07:00
str_error_r.c
string.c perf annotate: Add disasm_line__parse() to parse raw instruction for powerpc 2024-07-31 16:12:59 -03:00
vsprintf.c
zalloc.c