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]