| | #ifndef Py_INTERNAL_PYSTATE_H |
| | #define Py_INTERNAL_PYSTATE_H |
| | #ifdef __cplusplus |
| | extern "C" { |
| | #endif |
| |
|
| | #ifndef Py_BUILD_CORE |
| | # error "this header requires Py_BUILD_CORE define" |
| | #endif |
| |
|
| | #include "pycore_runtime.h" |
| |
|
| |
|
| | |
| | |
| | static inline int |
| | _Py_IsMainThread(void) |
| | { |
| | unsigned long thread = PyThread_get_thread_ident(); |
| | return (thread == _PyRuntime.main_thread); |
| | } |
| |
|
| |
|
| | static inline int |
| | _Py_IsMainInterpreter(PyThreadState* tstate) |
| | { |
| | |
| | |
| | return (tstate->interp == _PyRuntime.interpreters.main); |
| | } |
| |
|
| |
|
| | |
| | static inline int |
| | _Py_ThreadCanHandleSignals(PyInterpreterState *interp) |
| | { |
| | return (_Py_IsMainThread() && interp == _PyRuntime.interpreters.main); |
| | } |
| |
|
| |
|
| | |
| | static inline int |
| | _Py_ThreadCanHandlePendingCalls(void) |
| | { |
| | return _Py_IsMainThread(); |
| | } |
| |
|
| |
|
| | |
| | |
| |
|
| | static inline PyThreadState* |
| | _PyRuntimeState_GetThreadState(_PyRuntimeState *runtime) |
| | { |
| | return (PyThreadState*)_Py_atomic_load_relaxed(&runtime->gilstate.tstate_current); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | static inline PyThreadState* |
| | _PyThreadState_GET(void) |
| | { |
| | return _PyRuntimeState_GetThreadState(&_PyRuntime); |
| | } |
| |
|
| | |
| | #undef PyThreadState_GET |
| | #define PyThreadState_GET() _PyThreadState_GET() |
| |
|
| | PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalError_TstateNULL(const char *func); |
| |
|
| | static inline void |
| | _Py_EnsureFuncTstateNotNULL(const char *func, PyThreadState *tstate) |
| | { |
| | if (tstate == NULL) { |
| | _Py_FatalError_TstateNULL(func); |
| | } |
| | } |
| |
|
| | |
| | #define _Py_EnsureTstateNotNULL(tstate) \ |
| | _Py_EnsureFuncTstateNotNULL(__func__, tstate) |
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | static inline PyInterpreterState* _PyInterpreterState_GET(void) { |
| | PyThreadState *tstate = _PyThreadState_GET(); |
| | #ifdef Py_DEBUG |
| | _Py_EnsureTstateNotNULL(tstate); |
| | #endif |
| | return tstate->interp; |
| | } |
| |
|
| |
|
| | |
| |
|
| | PyAPI_FUNC(void) _PyThreadState_Init( |
| | PyThreadState *tstate); |
| | PyAPI_FUNC(void) _PyThreadState_DeleteExcept( |
| | _PyRuntimeState *runtime, |
| | PyThreadState *tstate); |
| |
|
| | PyAPI_FUNC(PyThreadState *) _PyThreadState_Swap( |
| | struct _gilstate_runtime_state *gilstate, |
| | PyThreadState *newts); |
| |
|
| | PyAPI_FUNC(PyStatus) _PyInterpreterState_Enable(_PyRuntimeState *runtime); |
| | PyAPI_FUNC(void) _PyInterpreterState_DeleteExceptMain(_PyRuntimeState *runtime); |
| |
|
| | PyAPI_FUNC(void) _PyGILState_Reinit(_PyRuntimeState *runtime); |
| |
|
| |
|
| | PyAPI_FUNC(int) _PyState_AddModule( |
| | PyThreadState *tstate, |
| | PyObject* module, |
| | struct PyModuleDef* def); |
| |
|
| |
|
| | PyAPI_FUNC(int) _PyOS_InterruptOccurred(PyThreadState *tstate); |
| |
|
| | #ifdef __cplusplus |
| | } |
| | #endif |
| | #endif |
| |
|