https://github.com/python/cpython/commit/18ef0f0cb5278fa6583b753ffaaef7f46e416ab9
commit: 18ef0f0cb5278fa6583b753ffaaef7f46e416ab9
branch: 3.14
author: Miss Islington (bot) <[email protected]>
committer: kumaraditya303 <[email protected]>
date: 2026-10-06T18:47:51+05:30
summary:

[3.14] gh-152075: Avoid lock contention in _Py_Specialize_LoadGlobal under free 
threading (gh-153720) (#158904)

gh-152075: Avoid lock contention in _Py_Specialize_LoadGlobal under free 
threading (gh-153720)

Under high thread concurrency in free-threaded builds, 
`_Py_Specialize_LoadGlobal` suffers from lock contention when acquiring the 
critical section mutexes for the `globals` and `builtins` dictionaries during 
bytecode specialization.

This PR skips LOAD_GLOBAL bytecode specialization if acquiring the two object 
mutexes would block.
(cherry picked from commit ac8ba0ca5a04cd7b27b44822d31df640e817fd78)

Co-authored-by: Peter Hawkins <[email protected]>

files:
A 
Misc/NEWS.d/next/Core_and_Builtins/2026-07-14-20-19-48.gh-issue-152075.V9Rwhp.rst
M Python/specialize.c

diff --git 
a/Misc/NEWS.d/next/Core_and_Builtins/2026-07-14-20-19-48.gh-issue-152075.V9Rwhp.rst
 
b/Misc/NEWS.d/next/Core_and_Builtins/2026-07-14-20-19-48.gh-issue-152075.V9Rwhp.rst
new file mode 100644
index 00000000000000..84c7d36b97acba
--- /dev/null
+++ 
b/Misc/NEWS.d/next/Core_and_Builtins/2026-07-14-20-19-48.gh-issue-152075.V9Rwhp.rst
@@ -0,0 +1,2 @@
+Reduced lock contention during LOAD_GLOBAL bytecode specialization under
+free threading.
diff --git a/Python/specialize.c b/Python/specialize.c
index 4ba854d2ae8c3a..66632e8d1d99cb 100644
--- a/Python/specialize.c
+++ b/Python/specialize.c
@@ -1776,6 +1776,14 @@ _Py_Specialize_LoadGlobal(
     PyObject *globals, PyObject *builtins,
     _Py_CODEUNIT *instr, PyObject *name)
 {
+#ifdef Py_GIL_DISABLED
+    if (PyMutex_IsLocked(&globals->ob_mutex) || 
PyMutex_IsLocked(&builtins->ob_mutex)) {
+        // Skip specialization if either dictionary is locked to avoid lock
+        // contention.
+        unspecialize(instr);
+        return;
+    }
+#endif
     Py_BEGIN_CRITICAL_SECTION2(globals, builtins);
     specialize_load_global_lock_held(globals, builtins, instr, name);
     Py_END_CRITICAL_SECTION2();

_______________________________________________
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]

Reply via email to