https://github.com/python/cpython/commit/c60f39ada625562bff26400f304690c19fe9f504
commit: c60f39ada625562bff26400f304690c19fe9f504
branch: main
author: neonene <[email protected]>
committer: ericsnowcurrently <[email protected]>
date: 2025-05-26T11:46:49-06:00
summary:
gh-134557: Suppress immortalization in _PyCode_GetScriptXIData under
free-threading (gh-134686)
Disable immortalization around Py_CompileString*().
The same approach as 332356b that fixed the refleaks in compile() and eval().
E: 09e72cf can pass test_capi, test_sys and test__interpchannels with this
patch for me.
files:
M Python/crossinterp.c
diff --git a/Python/crossinterp.c b/Python/crossinterp.c
index 26eecdddf4bdd0..13d91c508c41fa 100644
--- a/Python/crossinterp.c
+++ b/Python/crossinterp.c
@@ -908,8 +908,15 @@ get_script_xidata(PyThreadState *tstate, PyObject *obj,
int pure,
}
goto error;
}
+#ifdef Py_GIL_DISABLED
+ // Don't immortalize code constants to avoid memory leaks.
+ ((_PyThreadStateImpl *)tstate)->suppress_co_const_immortalization++;
+#endif
code = Py_CompileStringExFlags(
script, filename, Py_file_input, &cf, optimize);
+#ifdef Py_GIL_DISABLED
+ ((_PyThreadStateImpl *)tstate)->suppress_co_const_immortalization--;
+#endif
Py_XDECREF(ref);
if (code == NULL) {
goto error;
_______________________________________________
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]