Skip to content

Conversation

@pablogsal
Copy link
Member

@pablogsalpablogsal commented Jan 2, 2026

When using blocking mode in the remote debugging profiler, ptrace calls
to seize threads can fail with EPERM if the thread has exited between
listing and attaching, is in a special kernel state, or is already being
traced. Previously this raised a RuntimeError that was caught by the
Python sampling loop,and retried indefinitely since EPERM is
a persistent condition that will not resolve on its own.

Treat EPERM the same as ESRCH by returning 1 (skip this thread) instead
of -1 (fatal error). This allows profiling to continue with the threads
that can be traced rather than entering an endless retry loop printing
the same error message repeatedly.

When using blocking mode in the remote debugging profiler, ptrace calls to seize threads can fail with EPERM if the thread has exited between listing and attaching, is in a special kernel state, or is already being traced. Previously this raised a RuntimeError that was caught by the Python sampling loop,and retried indefinitely since EPERM is a persistent condition that will not resolve on its own. Treat EPERM the same as ESRCH by returning 1 (skip this thread) instead of -1 (fatal error). This allows profiling to continue with the threads that can be traced rather than entering an endless retry loop printing the same error message repeatedly.
@ambvambv merged commit 27434c6 into python:mainJan 3, 2026
46 checks passed
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type-bugAn unexpected behavior, bug, or error

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@pablogsal@ambv