Public issue detail

Runaway CPU investigation for python3.13: busy poll at PyType_IsSubtype

python3.13 is stuck in a likely busy poll loop: 50.00% of sampled CPU passed through PyType_IsSubtype, with repeated thread backtraces show 1 thread(s) around 0x00007f1c6e7efe92 in pthread_attr_destroy () from target:<path>.

highpackage: python3.13-minimalsource: python3.13score: 106reports: 2successful triage

Last seen: 2026-05-27 06:44 UTC. Public JSON: /v1/issues/019e64de-4aa5-71a2-9db4-1079724a6448

Successful triage

Fixer did not find an honest diff-backed change in this source tree. Instead, it published the current best diagnosis and next steps so repeat sightings can converge on the real owner.

best triagecreated: 2026-05-26 15:34 UTCvalidation: ready

python3.13 likely remains stuck in a busy-poll loop. A diagnosis report and external handoff were created locally.

Likely owner

python script /usr/bin/supervisord

Reason: workspace-acquisition

Next steps

  • Find the application, module repository, Home Assistant add-on, container image, or local checkout that provides python script /usr/bin/supervisord.
  • Attach that source tree before asking Fixer for a patch; only patch the interpreter/runtime after a language-level stack or minimal reproducer proves the runtime is at fault.
  • Capture a fresh process sample with the module entrypoint, Python stack or native extension frames, and container/image provenance so the next run can acquire the right workspace.

Technical snapshot

This is the clearest retained userspace thread cluster Fixer captured while the process was spinning.

Representative thread backtrace

  • Command: /usr/bin/python3 /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
  • Why Fixer classified it this way: The trace repeatedly returns to a poll-family syscall without meaningful blocking, which suggests a busy event-loop wakeup.
  • Thread summary: thread backtraces show 1 thread(s) around 0x00007f1c6e7efe92 in pthread_attr_destroy () from target:<path>
  • Contention signals: gdb-stderr: gdb: warning: Couldn't determine a path for the index cache directory.
  • Repeated loop: poll -> wait4 -> poll
  • Top syscalls: poll x5, wait4 x5, restart_syscall x1
  • Package: python3.13-minimal 3.13.12-1
  • Kernel: 6.17.10+deb14-amd64
  • Distribution: debian
0x00007f1c6e7efe92 in pthread_attr_destroy () from target:<path>
0x0000000000d1c8b1 in ?? ()
0x000000000ae0dbd3 in ?? ()
0x0000000000a56c88 in _PyRuntime ()
0x00007f1c6e7efead in ?? () from target:<path>
0x0000000000000007 in ?? ()
0x000000000054aeb0 in PyMem_Realloc ()
0x000000000067ca5b in ?? ()

Possible duplicates

These are suggestions based on sanitized trigram similarity plus structured fields like package, subsystem, classification, and wait site. They are not auto-merged.

python3.13 is stuck in a likely busy poll loop: 6.41% of sampled CPU passed through unresolved offset, with repeated thread backtraces show 1 thread(s) around 0x00007fdd05c9b72e in ?? () and 1 thread(s) around 0x00007fdd05c9b72e in ?? ().

highpackage: python3.13-minimalsource: python3.13score: 106reports: 3patch attempt readysimilarity: 99%

Why this looks related: same classification, same package, same source package, same subsystem, same target, same wait site

Last seen: 2026-07-09 19:56 UTC. Public page: /issues/019d7cef-46dd-7541-b939-9ba6872fbf76. Public JSON: /v1/issues/019d7cef-46dd-7541-b939-9ba6872fbf76

python3.13 is stuck in a likely busy poll loop: 50.00% of sampled CPU passed through _PyEval_EvalFrameDefault, with repeated thread backtraces show 1 thread(s) around 0x00007f091ce537d2 in ?? () from target:<path>.

highpackage: python3.13-minimalsource: python3.13score: 106reports: 2patch attempt readysimilarity: 99%

Why this looks related: same classification, same package, same source package, same subsystem, same target, same wait site

Last seen: 2026-07-02 23:40 UTC. Public page: /issues/019dda71-4897-7d62-853d-31f4899d9f8e. Public JSON: /v1/issues/019dda71-4897-7d62-853d-31f4899d9f8e

python3.13 is stuck in a likely busy poll loop: 100.00% of sampled CPU passed through unresolved offset, with repeated thread backtraces show 1 thread(s) around 0x00007f091ce537d2 in ?? () from target:<path>.

highpackage: python3.13-minimalsource: python3.13score: 106reports: 2similarity: 99%

Why this looks related: same classification, same package, same source package, same subsystem, same target, same wait site

Last seen: 2026-07-02 03:18 UTC. Public page: /issues/019dc2a0-9ae7-7f42-8f59-415fe22abe51. Public JSON: /v1/issues/019dc2a0-9ae7-7f42-8f59-415fe22abe51

python3.13 is stuck in a likely busy poll loop: 7.43% of sampled CPU passed through __radix_tree_lookup, with repeated thread backtraces show 2 thread(s) around 0x00007fa228821ffe in ?? () from target:<path> and 1 thread(s) around 0x00007fa228821ffe in ?? () from target:<path>.

highpackage: python3.13-minimalsource: python3.13score: 106reports: 1similarity: 99%

Why this looks related: same classification, same package, same source package, same subsystem, same target, same wait site

Last seen: 2026-07-05 13:59 UTC. Public page: /issues/019f2bc3-de08-7860-a55b-b87e802981f1. Public JSON: /v1/issues/019f2bc3-de08-7860-a55b-b87e802981f1

python3.13 is stuck in a likely busy poll loop: 9.89% of sampled CPU passed through memset_orig, with repeated thread backtraces show 2 thread(s) around 0x00007fa228821ffe in ?? () from target:<path> and 1 thread(s) around 0x00007fa225d50890 in QuoteString(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*) () from target:<path>.

highpackage: python3.13-minimalsource: python3.13score: 106reports: 1similarity: 99%

Why this looks related: same classification, same package, same source package, same subsystem, same target

Last seen: 2026-07-04 05:55 UTC. Public page: /issues/019ede28-30fa-7e02-a28f-53fd67a6326a. Public JSON: /v1/issues/019ede28-30fa-7e02-a28f-53fd67a6326a

python3.13 is stuck in a likely busy poll loop: 15.28% of sampled CPU passed through unresolved offset, with repeated thread backtraces show 2 thread(s) around 0x00007f35495474be in ?? () from target:<path> and 1 thread(s) around 0x000000000057151f in _PyEval_EvalFrameDefault ().

highpackage: python3.13-minimalsource: python3.13score: 106reports: 2successful triagesimilarity: 90%

Why this looks related: same classification, same package, same source package, same subsystem, same target

Last seen: 2026-07-07 10:15 UTC. Public page: /issues/019dd98b-0e1d-76e3-9171-f0f72c689536. Public JSON: /v1/issues/019dd98b-0e1d-76e3-9171-f0f72c689536

Worker outcome summary

This issue has 2 recorded worker attempts. Only ready diffs and ready triage handoffs get dedicated public boards. Diagnosis-only reports and blocked attempts are summarized here so it is easier to see why work stalled.

1 ready triage handoffs
1 failed patch attempts

No ready patch attempts, diagnosis-only reports, explained impossible attempts, or other attempt states.

Most common blockers

  • timeout (1 attempt)
  • workspace-acquisition (1 attempt)

Published attempts

failed patch attempt

patch

python3.13 likely remains stuck in a busy-poll loop. The diagnosis was captured, but the patch proposal did not complete cleanly.

state: failedcreated: 2026-05-26 15:49 UTCvalidation: failed

Why it stopped

timeout

Failure details

  • Failure kind: timeout
  • Exit status: 124
  • Error: Codex stage timed out after 900 second(s).

stderr excerpt

Codex stage timed out after 900 second(s).

Collected context

  • Subsystem: runaway-process
  • Diagnosis family: busy-poll
  • Hot path: PyType_IsSubtype
  • Command: /usr/bin/python3 /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
  • Thread backtrace summary: thread backtraces show 1 thread(s) around 0x00007f1c6e7efe92 in pthread_attr_destroy () from target:<path>
  • Source package: supervisor
  • Workspace source: debian-source
  • Workspace acquisition: Fetched Debian source package via apt-get source.
  • Contention signals: gdb-stderr: gdb: warning: Couldn't determine a path for the index cache directory.

The trace repeatedly returns to a poll-family syscall without meaningful blocking, which suggests a busy event-loop wakeup.

Representative threads

  • 1 thread(s): 0x00007f1c6e7efe92 in pthread_attr_destroy () from target:<path> -> 0x0000000000d1c8b1 in ?? () -> 0x000000000ae0dbd3 in ?? () -> 0x0000000000a56c88 in _PyRuntime ()

Common frame clusters

  • 1 thread(s): 0x00007f1c6e7efe92 in pthread_attr_destroy () from target:<path> -> 0x0000000000d1c8b1 in ?? () -> 0x000000000ae0dbd3 in ?? ()

Raw thread backtrace

Thread 1 (Thread 0x7f1c6e75d200 (LWP 2799720) "supervisord"):
#0  0x00007f1c6e7efe92 in pthread_attr_destroy () from target:<path>
#1  0x0000000000d1c8b1 in ?? ()
#2  0x000000000ae0dbd3 in ?? ()
#3  0x0000000000a56c88 in _PyRuntime ()
#4  0x00007f1c6e7efead in ?? () from target:<path>
#5  0x0000000000000007 in ?? ()
#6  0x000000000054aeb0 in PyMem_Realloc ()
#7  0x000000000067ca5b in ?? ()
#8  0x000000000056e19a in _PyEval_EvalFrameDefault ()
#9  0x0000000000569544 in PyEval_EvalCode ()
#10 0x00000000006c1c44 in ?? ()
#11 0x00000000006bebdf in ?? ()
#12 0x00000000006d0454 in ?? ()
#13 0x00000000006cfee9 in ?? ()
#14 0x00000000006cfd1e in ?? ()
#15 0x00000000006ceeac in Py_RunMain ()
#16 0x000000000069caa9 in Py_BytesMain ()
#17 0x00007f1c6e787f75 in ?? () from target:<path>
#18 0x00007ffd14a827e8 in ?? ()
#19 0x000000000069ca70 in ?? ()
#20 0x000000056eaef000 in ?? ()
#21 0x00007ffd14a827e8 in ?? ()
#22 0x0000000000000000 in ?? ()
Published session

Prompt

## Plan Pass

You are planning a fixer patch before any edits happen.

Read the evidence bundle at `./evidence.json`. The prepared workspace is `./workspace` and it was acquired via `debian-source`. The original pre-edit snapshot is available at `./source` if you need to inspect it. For interpreter processes, plan from the script/application entrypoint evidence first and include the runtime only as a second investigation target unless the evidence proves a runtime bug.

Upstream-style expectation: before planning or editing, check for contribution/style docs (`CONTRIBUTING`, `HACKING`, `README-hacking`, `README.md`, `docs/`, `dev-docs/`) and scan the touched subsystem for local helpers. If the project has wrappers for file IO, path-relative IO, process spawning, memory allocation, logging, locking, or platform compatibility, prefer those wrappers over generic libc/std APIs. Do not invent a reproducer or user-visible failure that is not in the evidence bundle; if the evidence is profiler-only or indirect, describe it as a targeted mitigation or stop with a diagnosis instead of presenting a speculative patch as a confirmed bug fix. In the plan and final validation, name any such helper, convention, or evidence limit you found, or say that no relevant local helper was found. Treat this as a `supervisor` upstream patch, not just a Debian-local workaround. Inspect the relevant code, nearby callers, project contribution docs, and local helper/compat APIs, but do not edit files in this pass.

Return a short markdown plan with these exact sections:

## Problem
## Evidence Confidence
## Proposed Subject
## Patch Plan
## Risks
## Validation

Classify `## Evidence Confidence` as exactly one of `reproduced`, `observed`, or `inferred`. Use `inferred` only for a no-patch diagnosis/report plan unless you can name the extra evidence you will collect before editing; inferred source patches are blocked by Fixer because they are not pull-request-ready. For `observed` source-patch plans, plan to say in the final `## Issue Connection` that the failure was observed by Fixer and not independently reproduced. If the plan touches authentication, authorization, credentials, cryptography, sandboxing, permissions, or timing/throttling behavior, treat it as security-sensitive: do not plan a source patch unless validation can reproduce the behavior and analyze the security impact; otherwise plan a no-patch diagnosis/report. The plan must explain how the proposed code change addresses the observed issue evidence, call out any prior Fixer patch that should be improved or replaced, reject awkward control flow such as avoidable `goto` if there is a cleaner bounded alternative, name any local helper APIs or maintainer conventions the patch should follow, and keep the intended maintainer-facing explanation clear enough that someone unfamiliar with the local complaint wording can still follow the fix. In `## Validation`, name the reproducible configure/build/test entrypoint you will try from the workspace root before any focused leaf compile or smoke check, and include one bounded independent reproduction attempt for the collected failure signal when it is safe and cheap. Do not plan to claim `reproduced` unless that reproduction command or test can actually show the failure.

Response

## Plan Pass



## Workflow Note

Codex stage timed out after 900 second(s).

ready triage handoff

triage

python3.13 likely remains stuck in a busy-poll loop. A diagnosis report and external handoff were created locally.

state: readycreated: 2026-05-26 15:34 UTCvalidation: ready

Why it stopped

workspace-acquisition

Handoff

Likely owner: python script /usr/bin/supervisord

Reason: workspace-acquisition

  • Find the application, module repository, Home Assistant add-on, container image, or local checkout that provides python script /usr/bin/supervisord.
  • Attach that source tree before asking Fixer for a patch; only patch the interpreter/runtime after a language-level stack or minimal reproducer proves the runtime is at fault.
  • Capture a fresh process sample with the module entrypoint, Python stack or native extension frames, and container/image provenance so the next run can acquire the right workspace.