https://github.com/python/cpython/commit/6ce088e20a13ac25320d94c5775bb1a4edc75ba4
commit: 6ce088e20a13ac25320d94c5775bb1a4edc75ba4
branch: main
author: Maurycy Pawłowski-Wieroński <[email protected]>
committer: pablogsal <[email protected]>
date: 2026-06-14T00:10:56+01:00
summary:

gh-151424: Fix impossible stack traces in `RemoteUnwinder(..., 
cache_frames=True)` by copying chunks on cache miss (#151426)

files:
A Misc/NEWS.d/next/Library/2026-06-13-04-11-00.gh-issue-151426.f2V67e.rst
M Modules/_remote_debugging/frames.c

diff --git 
a/Misc/NEWS.d/next/Library/2026-06-13-04-11-00.gh-issue-151426.f2V67e.rst 
b/Misc/NEWS.d/next/Library/2026-06-13-04-11-00.gh-issue-151426.f2V67e.rst
new file mode 100644
index 000000000000000..428302e5f847f36
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-06-13-04-11-00.gh-issue-151426.f2V67e.rst
@@ -0,0 +1,4 @@
+Fix impossible stack traces (callers and callees cross called, orphans and
+incorrect lines) in the Tachyon profiler when caching frames, by snapshotting
+the stack chunks before walking the frame chain on a cache miss. Patch by
+Maurycy Pawłowski-Wieroński.
diff --git a/Modules/_remote_debugging/frames.c 
b/Modules/_remote_debugging/frames.c
index d73cd080dc477f3..e7d2a2764390261 100644
--- a/Modules/_remote_debugging/frames.c
+++ b/Modules/_remote_debugging/frames.c
@@ -580,6 +580,14 @@ collect_frames_with_cache(
         return full_hit < 0 ? -1 : 0;
     }
 
+    assert(ctx->chunks != NULL);
+
+    if (ctx->chunks->count == 0) {
+        if (copy_stack_chunks(unwinder, ctx->thread_state_addr, ctx->chunks) < 
0) {
+            PyErr_Clear();
+        }
+    }
+
     Py_ssize_t frames_before = PyList_GET_SIZE(ctx->frame_info);
 
     if (process_frame_chain(unwinder, ctx) < 0) {

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to