From: T. Wouters Date: Wed, 7 Jan 2026 15:40:33 +0000 (+0100) Subject: gh-141536: Fix a crash when running test_capi *after* test_code in the same process... X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b2827de18fe88152dc38c1aa76c39b69ef59cb6f;p=thirdparty%2FPython%2Fcpython.git gh-141536: Fix a crash when running test_capi *after* test_code in the same process (#141537) --- diff --git a/Lib/test/test_code.py b/Lib/test/test_code.py index 655f5a9be7fa..0d5c6e6e77f5 100644 --- a/Lib/test/test_code.py +++ b/Lib/test/test_code.py @@ -210,7 +210,7 @@ except ImportError: ctypes = None from test.support import (cpython_only, check_impl_detail, requires_debug_ranges, - gc_collect, Py_GIL_DISABLED) + gc_collect, Py_GIL_DISABLED, late_deletion) from test.support.script_helper import assert_python_ok from test.support import threading_helper, import_helper from test.support.bytecode_helper import instructions_with_positions @@ -1555,6 +1555,11 @@ if check_impl_detail(cpython=True) and ctypes is not None: FREE_FUNC = freefunc(myfree) FREE_INDEX = RequestCodeExtraIndex(FREE_FUNC) + # Make sure myfree sticks around at least as long as the interpreter, + # since we (currently) can't unregister the function and leaving a + # dangling pointer will cause a crash on deallocation of code objects if + # something else uses co_extras, like test_capi.test_misc. + late_deletion(myfree) class CoExtra(unittest.TestCase): def get_func(self):