(root)/
Python-3.11.7/
Include/
pystate.h
       1  /* Thread and interpreter state structures and their interfaces */
       2  
       3  
       4  #ifndef Py_PYSTATE_H
       5  #define Py_PYSTATE_H
       6  #ifdef __cplusplus
       7  extern "C" {
       8  #endif
       9  
      10  /* This limitation is for performance and simplicity. If needed it can be
      11  removed (with effort). */
      12  #define MAX_CO_EXTRA_USERS 255
      13  
      14  PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_New(void);
      15  PyAPI_FUNC(void) PyInterpreterState_Clear(PyInterpreterState *);
      16  PyAPI_FUNC(void) PyInterpreterState_Delete(PyInterpreterState *);
      17  
      18  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
      19  /* New in 3.9 */
      20  /* Get the current interpreter state.
      21  
      22     Issue a fatal error if there no current Python thread state or no current
      23     interpreter. It cannot return NULL.
      24  
      25     The caller must hold the GIL. */
      26  PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Get(void);
      27  #endif
      28  
      29  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03080000
      30  /* New in 3.8 */
      31  PyAPI_FUNC(PyObject *) PyInterpreterState_GetDict(PyInterpreterState *);
      32  #endif
      33  
      34  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
      35  /* New in 3.7 */
      36  PyAPI_FUNC(int64_t) PyInterpreterState_GetID(PyInterpreterState *);
      37  #endif
      38  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
      39  
      40  /* State unique per thread */
      41  
      42  /* New in 3.3 */
      43  PyAPI_FUNC(int) PyState_AddModule(PyObject*, PyModuleDef*);
      44  PyAPI_FUNC(int) PyState_RemoveModule(PyModuleDef*);
      45  #endif
      46  PyAPI_FUNC(PyObject*) PyState_FindModule(PyModuleDef*);
      47  
      48  PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *);
      49  PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *);
      50  PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *);
      51  
      52  /* Get the current thread state.
      53  
      54     When the current thread state is NULL, this issues a fatal error (so that
      55     the caller needn't check for NULL).
      56  
      57     The caller must hold the GIL.
      58  
      59     See also _PyThreadState_UncheckedGet() and _PyThreadState_GET(). */
      60  PyAPI_FUNC(PyThreadState *) PyThreadState_Get(void);
      61  
      62  // Alias to PyThreadState_Get()
      63  #define PyThreadState_GET() PyThreadState_Get()
      64  
      65  PyAPI_FUNC(PyThreadState *) PyThreadState_Swap(PyThreadState *);
      66  PyAPI_FUNC(PyObject *) PyThreadState_GetDict(void);
      67  PyAPI_FUNC(int) PyThreadState_SetAsyncExc(unsigned long, PyObject *);
      68  
      69  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
      70  /* New in 3.9 */
      71  PyAPI_FUNC(PyInterpreterState*) PyThreadState_GetInterpreter(PyThreadState *tstate);
      72  PyAPI_FUNC(PyFrameObject*) PyThreadState_GetFrame(PyThreadState *tstate);
      73  PyAPI_FUNC(uint64_t) PyThreadState_GetID(PyThreadState *tstate);
      74  #endif
      75  
      76  typedef
      77      enum {PyGILState_LOCKED, PyGILState_UNLOCKED}
      78          PyGILState_STATE;
      79  
      80  
      81  /* Ensure that the current thread is ready to call the Python
      82     C API, regardless of the current state of Python, or of its
      83     thread lock.  This may be called as many times as desired
      84     by a thread so long as each call is matched with a call to
      85     PyGILState_Release().  In general, other thread-state APIs may
      86     be used between _Ensure() and _Release() calls, so long as the
      87     thread-state is restored to its previous state before the Release().
      88     For example, normal use of the Py_BEGIN_ALLOW_THREADS/
      89     Py_END_ALLOW_THREADS macros are acceptable.
      90  
      91     The return value is an opaque "handle" to the thread state when
      92     PyGILState_Ensure() was called, and must be passed to
      93     PyGILState_Release() to ensure Python is left in the same state. Even
      94     though recursive calls are allowed, these handles can *not* be shared -
      95     each unique call to PyGILState_Ensure must save the handle for its
      96     call to PyGILState_Release.
      97  
      98     When the function returns, the current thread will hold the GIL.
      99  
     100     Failure is a fatal error.
     101  */
     102  PyAPI_FUNC(PyGILState_STATE) PyGILState_Ensure(void);
     103  
     104  /* Release any resources previously acquired.  After this call, Python's
     105     state will be the same as it was prior to the corresponding
     106     PyGILState_Ensure() call (but generally this state will be unknown to
     107     the caller, hence the use of the GILState API.)
     108  
     109     Every call to PyGILState_Ensure must be matched by a call to
     110     PyGILState_Release on the same thread.
     111  */
     112  PyAPI_FUNC(void) PyGILState_Release(PyGILState_STATE);
     113  
     114  /* Helper/diagnostic function - get the current thread state for
     115     this thread.  May return NULL if no GILState API has been used
     116     on the current thread.  Note that the main thread always has such a
     117     thread-state, even if no auto-thread-state call has been made
     118     on the main thread.
     119  */
     120  PyAPI_FUNC(PyThreadState *) PyGILState_GetThisThreadState(void);
     121  
     122  
     123  #ifndef Py_LIMITED_API
     124  #  define Py_CPYTHON_PYSTATE_H
     125  #  include "cpython/pystate.h"
     126  #  undef Py_CPYTHON_PYSTATE_H
     127  #endif
     128  
     129  #ifdef __cplusplus
     130  }
     131  #endif
     132  #endif /* !Py_PYSTATE_H */