mirror of
https://github.com/pybind/pybind11.git
synced 2026-04-23 08:19:13 +00:00
Add fallback implementation of PyCriticalSection_BeginMutex for Python 3.13t (#5981)
* Add failback implementation of `PyCriticalSection_BeginMutex` for Python 3.13t * Add comment for Python version * Use `_PyCriticalSection_BeginSlow` * Add forward declaration * Fix forward declaration * Remove always true condition `defined(PY_VERSION_HEX)` * Detect musllinux * Add manylinux test * Use direct mutex locking for Python 3.13t `_PyCriticalSection_BeginSlow` is a private CPython function not exported on Linux. For Python < 3.14.0rc1, use direct `mutex.lock()`/`mutex.unlock()` instead of critical section APIs. * Empty commit to trigger CI * Empty commit to trigger CI * Empty commit to trigger CI * Run apt update before apt install * Remove unnecessary prefix * Add manylinux test with Python 3.13t * Simplify pycritical_section with std::unique_lock fallback for Python < 3.14 * Fix potential deadlock in make_iterator_impl for Python 3.13t Refactor pycritical_section into a unified class with internal version checks instead of using a type alias fallback. Skip locking in make_iterator_impl for Python < 3.14.0rc1 to avoid deadlock during type registration, as pycritical_section cannot release the mutex during Python callbacks without PyCriticalSection_BeginMutex. * Add reference for xfail message
This commit is contained in:
12
tests/env.py
12
tests/env.py
@@ -11,6 +11,18 @@ MACOS = sys.platform.startswith("darwin")
|
||||
WIN = sys.platform.startswith("win32") or sys.platform.startswith("cygwin")
|
||||
FREEBSD = sys.platform.startswith("freebsd")
|
||||
|
||||
MUSLLINUX = False
|
||||
MANYLINUX = False
|
||||
if LINUX:
|
||||
|
||||
def _is_musl() -> bool:
|
||||
libc, _ = platform.libc_ver()
|
||||
return libc == "musl" or (libc != "glibc" and libc != "")
|
||||
|
||||
MUSLLINUX = _is_musl()
|
||||
MANYLINUX = not MUSLLINUX
|
||||
del _is_musl
|
||||
|
||||
CPYTHON = platform.python_implementation() == "CPython"
|
||||
PYPY = platform.python_implementation() == "PyPy"
|
||||
GRAALPY = sys.implementation.name == "graalpy"
|
||||
|
||||
Reference in New Issue
Block a user