https://github.com/python/cpython/commit/841b7482dd3584545d43fbfa78a27b1b5a3dfea3
commit: 841b7482dd3584545d43fbfa78a27b1b5a3dfea3
branch: main
author: Sam Gross <[email protected]>
committer: colesbury <[email protected]>
date: 2026-01-06T09:40:14-05:00
summary:
gh-143424: Fix assertion in _PyMutex_LockTimed (gh-143439)
The assertion doesn't necessarily hold for `threading.Lock`, so allow
the lock to be unlocked if `_PY_LOCK_PYTHONLOCK` is set on the flags.
files:
M Python/lock.c
diff --git a/Python/lock.c b/Python/lock.c
index 789065d8162792..12b5ebc89aeec7 100644
--- a/Python/lock.c
+++ b/Python/lock.c
@@ -124,8 +124,11 @@ _PyMutex_LockTimed(PyMutex *m, PyTime_t timeout,
_PyLockFlags flags)
&entry, (flags & _PY_LOCK_DETACH) != 0);
if (ret == Py_PARK_OK) {
if (entry.handed_off) {
- // We own the lock now.
- assert(_Py_atomic_load_uint8_relaxed(&m->_bits) & _Py_LOCKED);
+ // We own the lock now. thread.Lock allows other threads
+ // to concurrently release the lock so we cannot assert that
+ // it is locked if _PY_LOCK_PYTHONLOCK is set.
+ assert(_Py_atomic_load_uint8_relaxed(&m->_bits) & _Py_LOCKED ||
+ (flags & _PY_LOCK_PYTHONLOCK) != 0);
return PY_LOCK_ACQUIRED;
}
}
_______________________________________________
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]