Open
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #279 +/- ##
==========================================
- Coverage 83.03% 81.23% -1.80%
==========================================
Files 48 50 +2
Lines 6242 6662 +420
Branches 480 509 +29
==========================================
+ Hits 5183 5412 +229
- Misses 1059 1250 +191
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
This was referenced Feb 25, 2026
ff71b2a to
ab02a28
Compare
Iterate over all interpreters in the linked list when determining the PID offset, fixing an issue where pystack only inspected the first interpreter, which is not guaranteed to be the main interpreter. This ensures the correct TID is located even when multiple subinterpreters are present. Add support for subinterpreters in pure Python stack reporting. Threads running in subinterpreters are now detected and grouped by interpreter ID. Native stack reporting for subinterpreters is not yet supported. Signed-off-by: Saul Cooperman <saulcoops@gmail.com>
6e47658 to
c46223d
Compare
…chors
When multiple subinterpreters execute on the same OS thread, each
PyThread previously received the full native stack for that TID. That
made native/Python merging fail because every thread in the group saw
the same set of eval frames, so n_eval did not match each thread's
entry-frame count.
This change makes native merging deterministic for same-TID
subinterpreter groups.
The game is played like this:
- Capture a per-thread stack anchor in the native layer:
- add Thread::StackAnchor() and d_stack_anchor.
- compute the anchor from the Python frame chain by walking backwards
to the nearest stack/shim-owned frame (FRAME_OWNED_BY_INTERPRETER /
FRAME_OWNED_BY_CSTACK on 3.14+, FRAME_OWNED_BY_CSTACK on 3.12/3.13).
- Thread construction now forwards this anchor into PyThread as stack_anchor.
- Switch process/core thread assembly from immediate yielding to collect-then-normalize.
- Group Python threads by tid when native mode is enabled.
- For groups with more than one thread:
- pick a canonical native stack,
- sort group members by stack_anchor (stable tie-breaker),
- partition eval-frame ownership according to each thread's Python entry-frame count,
- slice native frames accordingly per thread.
- If counts are inconsistent, keep existing behavior for that group and skip slicing.
55139f0 to
77a8d89
Compare
Collaborator
|
After chatting with @godlygeek when he was here in London I have devised a way that we can use to make Note: this still needs refinement Example: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Issue number of the reported bug or feature request: #59,#280
Describe your changes
This PR adds simple
subinterpretersupport topystack. It preserves all original functionality but does it a few more times by traversing theinterpreterlinked list. It only supports pure python stacks currently.Added a new component
TracebackPrinterwhich should help with printing in future. Additional configuration for the printer can be added in future.Few changes in
version.h/cpp.First contribution so maybe missed something.
Testing performed
Added tests for
TracebackPrinter. Added additional end-to-end test forsubinterpreterssupport using the new concurrent 3.14 functionality.Additional context
Example output