mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Issue #17522: Add the PyGILState_Check() API.
This commit is contained in:
parent
d4296fc19c
commit
684cd0e643
4 changed files with 28 additions and 0 deletions
|
@ -654,6 +654,18 @@ with sub-interpreters:
|
||||||
made on the main thread. This is mainly a helper/diagnostic function.
|
made on the main thread. This is mainly a helper/diagnostic function.
|
||||||
|
|
||||||
|
|
||||||
|
.. c:function:: int PyGILState_Check()
|
||||||
|
|
||||||
|
Return 1 if the current thread is holding the GIL and 0 otherwise.
|
||||||
|
This function can be called from any thread at any time.
|
||||||
|
Only if it has had its Python thread state initialized and currently is
|
||||||
|
holding the GIL will it return 1.
|
||||||
|
This is mainly a helper/diagnostic function. It can be useful
|
||||||
|
for example in callback contexts or memory allocation functions when
|
||||||
|
knowing that the GIL is locked can allow the caller to perform sensitive
|
||||||
|
actions or otherwise behave differently.
|
||||||
|
|
||||||
|
|
||||||
The following macros are normally used without a trailing semicolon; look for
|
The following macros are normally used without a trailing semicolon; look for
|
||||||
example usage in the Python source distribution.
|
example usage in the Python source distribution.
|
||||||
|
|
||||||
|
|
|
@ -212,6 +212,11 @@ PyAPI_FUNC(void) PyGILState_Release(PyGILState_STATE);
|
||||||
*/
|
*/
|
||||||
PyAPI_FUNC(PyThreadState *) PyGILState_GetThisThreadState(void);
|
PyAPI_FUNC(PyThreadState *) PyGILState_GetThisThreadState(void);
|
||||||
|
|
||||||
|
/* Helper/diagnostic function - return 1 if the current thread
|
||||||
|
* currently holds the GIL, 0 otherwise
|
||||||
|
*/
|
||||||
|
PyAPI_FUNC(int) PyGILState_Check(void);
|
||||||
|
|
||||||
#endif /* #ifdef WITH_THREAD */
|
#endif /* #ifdef WITH_THREAD */
|
||||||
|
|
||||||
/* The implementation of sys._current_frames() Returns a dict mapping
|
/* The implementation of sys._current_frames() Returns a dict mapping
|
||||||
|
|
|
@ -10,6 +10,8 @@ What's New in Python 3.4.0 Alpha 1?
|
||||||
Core and Builtins
|
Core and Builtins
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
- Issue #17522: Add the PyGILState_Check() API.
|
||||||
|
|
||||||
- Issue #16475: Support object instancing, recursion and interned strings
|
- Issue #16475: Support object instancing, recursion and interned strings
|
||||||
in marshal
|
in marshal
|
||||||
|
|
||||||
|
|
|
@ -697,6 +697,15 @@ PyGILState_GetThisThreadState(void)
|
||||||
return (PyThreadState *)PyThread_get_key_value(autoTLSkey);
|
return (PyThreadState *)PyThread_get_key_value(autoTLSkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
PyGILState_Check(void)
|
||||||
|
{
|
||||||
|
/* can't use PyThreadState_Get() since it will assert that it has the GIL */
|
||||||
|
PyThreadState *tstate = (PyThreadState*)_Py_atomic_load_relaxed(
|
||||||
|
&_PyThreadState_Current);
|
||||||
|
return tstate && (tstate == PyGILState_GetThisThreadState());
|
||||||
|
}
|
||||||
|
|
||||||
PyGILState_STATE
|
PyGILState_STATE
|
||||||
PyGILState_Ensure(void)
|
PyGILState_Ensure(void)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue