]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-143424: Fix assertion in _PyMutex_LockTimed (gh-143439)
authorSam Gross <colesbury@gmail.com>
Tue, 6 Jan 2026 14:40:14 +0000 (09:40 -0500)
committerGitHub <noreply@github.com>
Tue, 6 Jan 2026 14:40:14 +0000 (09:40 -0500)
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.

Python/lock.c

index 789065d816279266df578c7ab1aca0972bde435d..12b5ebc89aeec78341f6e8a53172c8e934ce22fb 100644 (file)
@@ -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;
             }
         }