https://github.com/python/cpython/commit/d36e5b86442bcf3b06876c91ff631c1f62632506
commit: d36e5b86442bcf3b06876c91ff631c1f62632506
branch: main
author: Maurycy Pawłowski-Wieroński <[email protected]>
committer: pablogsal <[email protected]>
date: 2026-05-08T08:25:49Z
summary:
gh-149521: Do not update `last_profiled_frame` if it's not changed (#149522)
files:
M Modules/_remote_debugging/threads.c
diff --git a/Modules/_remote_debugging/threads.c
b/Modules/_remote_debugging/threads.c
index d775234b8d78d7..4daa5e5f92bcd9 100644
--- a/Modules/_remote_debugging/threads.c
+++ b/Modules/_remote_debugging/threads.c
@@ -450,12 +450,14 @@ unwind_stack_for_thread(
set_exception_cause(unwinder, PyExc_RuntimeError, "Failed to
collect frames");
goto error;
}
- // Update last_profiled_frame for next sample
- uintptr_t lpf_addr =
- *current_tstate +
(uintptr_t)unwinder->debug_offsets.thread_state.last_profiled_frame;
- if (_Py_RemoteDebug_WriteRemoteMemory(&unwinder->handle, lpf_addr,
- sizeof(uintptr_t), &frame_addr)
< 0) {
- PyErr_Clear(); // Non-fatal
+ // Update last_profiled_frame for next sample if it changed
+ if (frame_addr != ctx.last_profiled_frame) {
+ uintptr_t lpf_addr =
+ *current_tstate +
(uintptr_t)unwinder->debug_offsets.thread_state.last_profiled_frame;
+ if (_Py_RemoteDebug_WriteRemoteMemory(&unwinder->handle, lpf_addr,
+ sizeof(uintptr_t),
&frame_addr) < 0) {
+ PyErr_Clear(); // Non-fatal
+ }
}
} else {
// No caching - process entire frame chain with base_frame validation
_______________________________________________
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]