Issue #17522: Add the PyGILState_Check() API.

parent d4296fc1
......@@ -654,6 +654,18 @@ with sub-interpreters:
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
example usage in the Python source distribution.
......
......@@ -212,6 +212,11 @@ PyAPI_FUNC(void) PyGILState_Release(PyGILState_STATE);
*/
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 */
/* 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
-----------------
- Issue #17522: Add the PyGILState_Check() API.
- Issue #16475: Support object instancing, recursion and interned strings
in marshal
......
......@@ -697,6 +697,15 @@ PyGILState_GetThisThreadState(void)
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_Ensure(void)
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment