mirror of
https://github.com/python/cpython.git
synced 2025-11-24 20:30:18 +00:00
[3.14] gh-134009: Expose PyMutex_IsLocked in the public C API (gh-134365) (#136971)
Co-authored-by: Sam Gross <colesbury@gmail.com>
This commit is contained in:
parent
11f510167c
commit
8e43b130f7
6 changed files with 33 additions and 7 deletions
|
|
@ -2441,6 +2441,18 @@ The C-API provides a basic mutual exclusion lock.
|
||||||
|
|
||||||
.. versionadded:: 3.13
|
.. versionadded:: 3.13
|
||||||
|
|
||||||
|
.. c:function:: int PyMutex_IsLocked(PyMutex *m)
|
||||||
|
|
||||||
|
Returns non-zero if the mutex *m* is currently locked, zero otherwise.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
This function is intended for use in assertions and debugging only and
|
||||||
|
should not be used to make concurrency control decisions, as the lock
|
||||||
|
state may change immediately after the check.
|
||||||
|
|
||||||
|
.. versionadded:: 3.14
|
||||||
|
|
||||||
.. _python-critical-section-api:
|
.. _python-critical-section-api:
|
||||||
|
|
||||||
Python Critical Section API
|
Python Critical Section API
|
||||||
|
|
|
||||||
|
|
@ -3027,6 +3027,7 @@ Porting to Python 3.14
|
||||||
* ``_PyLong_IsPositive()``: :c:func:`PyLong_IsPositive`
|
* ``_PyLong_IsPositive()``: :c:func:`PyLong_IsPositive`
|
||||||
* ``_PyLong_IsZero()``: :c:func:`PyLong_IsZero`
|
* ``_PyLong_IsZero()``: :c:func:`PyLong_IsZero`
|
||||||
* ``_PyLong_Sign()``: :c:func:`PyLong_GetSign`
|
* ``_PyLong_Sign()``: :c:func:`PyLong_GetSign`
|
||||||
|
* ``_PyMutex_IsLocked()`` : :c:func:`PyMutex_IsLocked`
|
||||||
* ``_PyUnicodeWriter_Dealloc()``: :c:func:`PyUnicodeWriter_Discard`
|
* ``_PyUnicodeWriter_Dealloc()``: :c:func:`PyUnicodeWriter_Discard`
|
||||||
* ``_PyUnicodeWriter_Finish()``: :c:func:`PyUnicodeWriter_Finish`
|
* ``_PyUnicodeWriter_Finish()``: :c:func:`PyUnicodeWriter_Finish`
|
||||||
* ``_PyUnicodeWriter_Init()``: use :c:func:`PyUnicodeWriter_Create`
|
* ``_PyUnicodeWriter_Init()``: use :c:func:`PyUnicodeWriter_Create`
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,9 @@ PyAPI_FUNC(void) PyMutex_Lock(PyMutex *m);
|
||||||
// exported function for unlocking the mutex
|
// exported function for unlocking the mutex
|
||||||
PyAPI_FUNC(void) PyMutex_Unlock(PyMutex *m);
|
PyAPI_FUNC(void) PyMutex_Unlock(PyMutex *m);
|
||||||
|
|
||||||
|
// exported function for checking if the mutex is locked
|
||||||
|
PyAPI_FUNC(int) PyMutex_IsLocked(PyMutex *m);
|
||||||
|
|
||||||
// Locks the mutex.
|
// Locks the mutex.
|
||||||
//
|
//
|
||||||
// If the mutex is currently locked, the calling thread will be parked until
|
// If the mutex is currently locked, the calling thread will be parked until
|
||||||
|
|
@ -61,3 +64,11 @@ _PyMutex_Unlock(PyMutex *m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#define PyMutex_Unlock _PyMutex_Unlock
|
#define PyMutex_Unlock _PyMutex_Unlock
|
||||||
|
|
||||||
|
// Checks if the mutex is currently locked.
|
||||||
|
static inline int
|
||||||
|
_PyMutex_IsLocked(PyMutex *m)
|
||||||
|
{
|
||||||
|
return (_Py_atomic_load_uint8(&m->_bits) & _Py_LOCKED) != 0;
|
||||||
|
}
|
||||||
|
#define PyMutex_IsLocked _PyMutex_IsLocked
|
||||||
|
|
|
||||||
|
|
@ -25,13 +25,6 @@ PyMutex_LockFast(PyMutex *m)
|
||||||
return _Py_atomic_compare_exchange_uint8(lock_bits, &expected, _Py_LOCKED);
|
return _Py_atomic_compare_exchange_uint8(lock_bits, &expected, _Py_LOCKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Checks if the mutex is currently locked.
|
|
||||||
static inline int
|
|
||||||
PyMutex_IsLocked(PyMutex *m)
|
|
||||||
{
|
|
||||||
return (_Py_atomic_load_uint8(&m->_bits) & _Py_LOCKED) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Re-initializes the mutex after a fork to the unlocked state.
|
// Re-initializes the mutex after a fork to the unlocked state.
|
||||||
static inline void
|
static inline void
|
||||||
_PyMutex_at_fork_reinit(PyMutex *m)
|
_PyMutex_at_fork_reinit(PyMutex *m)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
Expose :c:func:`PyMutex_IsLocked` as part of the public C API.
|
||||||
|
|
@ -619,3 +619,11 @@ PyMutex_Unlock(PyMutex *m)
|
||||||
Py_FatalError("unlocking mutex that is not locked");
|
Py_FatalError("unlocking mutex that is not locked");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#undef PyMutex_IsLocked
|
||||||
|
int
|
||||||
|
PyMutex_IsLocked(PyMutex *m)
|
||||||
|
{
|
||||||
|
return _PyMutex_IsLocked(m);
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue