https://github.com/python/cpython/commit/b577a5403ad513e6f28ec28630b5ee09a5f521ab
commit: b577a5403ad513e6f28ec28630b5ee09a5f521ab
branch: main
author: Jelle Zijlstra <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2026-10-20T21:38:55-07:00
summary:
gh-159739: Avoid destroying a remote unwinder cache twice (#159982)
In a free-threaded build, if allocating the thread-local bytecode cache fails
after the code-object cache has been created, the initializer destroys the
first cache and returns an error without clearing its pointer. Failed
construction then invokes the unwinder's deallocator, which destroys the same
cache again and can crash the profiling process instead of propagating
`MemoryError`.
files:
A Misc/NEWS.d/next/Library/2026-10-20-00-00-00.gh-issue-159739.5d4269.rst
M Modules/_remote_debugging/module.c
diff --git
a/Misc/NEWS.d/next/Library/2026-10-20-00-00-00.gh-issue-159739.5d4269.rst
b/Misc/NEWS.d/next/Library/2026-10-20-00-00-00.gh-issue-159739.5d4269.rst
new file mode 100644
index 000000000000000..94ee3cf4790112d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-10-20-00-00-00.gh-issue-159739.5d4269.rst
@@ -0,0 +1 @@
+Fix a double free if remote unwinder initialization runs out of memory.
diff --git a/Modules/_remote_debugging/module.c
b/Modules/_remote_debugging/module.c
index 6fa277d1065ed91..efb6d600247bf75 100644
--- a/Modules/_remote_debugging/module.c
+++ b/Modules/_remote_debugging/module.c
@@ -450,7 +450,6 @@
_remote_debugging_RemoteUnwinder___init___impl(RemoteUnwinderObject *self,
NULL
);
if (self->tlbc_cache == NULL) {
- _Py_hashtable_destroy(self->code_object_cache);
PyErr_NoMemory();
set_exception_cause(self, PyExc_MemoryError, "Failed to create TLBC
cache");
return -1;
_______________________________________________
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]