@@ -17,37 +17,74 @@ extern "C" {
1717#include "pycore_warnings.h"
1818
1919
20- /* GIL state */
20+ /* interpreter state */
2121
22- struct _gilstate_runtime_state {
23- int check_enabled ;
24- /* Assuming the current thread holds the GIL, this is the
25- PyThreadState for the current thread. */
26- _Py_atomic_address tstate_current ;
27- PyThreadFrameGetter getframe ;
28- /* The single PyInterpreterState used by this process'
29- GILState implementation
30- */
31- /* TODO: Given interp_main, it may be possible to kill this ref */
32- PyInterpreterState * autoInterpreterState ;
33- Py_tss_t autoTSSkey ;
34- };
22+ typedef PyObject * (* _PyFrameEvalFunction )(struct _frame * , int );
23+
24+ // The PyInterpreterState typedef is in Include/pystate.h.
25+ struct _is {
26+
27+ struct _is * next ;
28+ struct _ts * tstate_head ;
29+
30+ int64_t id ;
31+ int64_t id_refcount ;
32+ PyThread_type_lock id_mutex ;
33+
34+ PyObject * modules ;
35+ PyObject * modules_by_index ;
36+ PyObject * sysdict ;
37+ PyObject * builtins ;
38+ PyObject * importlib ;
39+
40+ /* Used in Python/sysmodule.c. */
41+ int check_interval ;
42+
43+ /* Used in Modules/_threadmodule.c. */
44+ long num_threads ;
45+ /* Support for runtime thread stack size tuning.
46+ A value of 0 means using the platform's default stack size
47+ or the size specified by the THREAD_STACK_SIZE macro. */
48+ /* Used in Python/thread.c. */
49+ size_t pythread_stacksize ;
50+
51+ PyObject * codec_search_path ;
52+ PyObject * codec_search_cache ;
53+ PyObject * codec_error_registry ;
54+ int codecs_initialized ;
55+ int fscodec_initialized ;
56+
57+ _PyCoreConfig core_config ;
58+ _PyMainInterpreterConfig config ;
59+ #ifdef HAVE_DLOPEN
60+ int dlopenflags ;
61+ #endif
3562
36- /* hook for PyEval_GetFrame(), requested for Psyco */
37- #define _PyThreadState_GetFrame _PyRuntime.gilstate.getframe
63+ PyObject * builtins_copy ;
64+ PyObject * import_func ;
65+ /* Initialized to PyEval_EvalFrameDefault(). */
66+ _PyFrameEvalFunction eval_frame ;
3867
39- /* Issue #26558: Flag to disable PyGILState_Check().
40- If set to non-zero, PyGILState_Check() always return 1. */
41- #define _PyGILState_check_enabled _PyRuntime.gilstate.check_enabled
68+ Py_ssize_t co_extra_user_count ;
69+ freefunc co_extra_freefuncs [MAX_CO_EXTRA_USERS ];
4270
71+ #ifdef HAVE_FORK
72+ PyObject * before_forkers ;
73+ PyObject * after_forkers_parent ;
74+ PyObject * after_forkers_child ;
75+ #endif
76+ /* AtExit module */
77+ void (* pyexitfunc )(PyObject * );
78+ PyObject * pyexitmodule ;
4379
44- /* interpreter state */
80+ uint64_t tstate_next_unique_id ;
81+ };
4582
46- PyAPI_FUNC (PyInterpreterState * ) _PyInterpreterState_LookUpID (PY_INT64_T );
83+ PyAPI_FUNC (struct _is * ) _PyInterpreterState_LookUpID (PY_INT64_T );
4784
48- PyAPI_FUNC (int ) _PyInterpreterState_IDInitref (PyInterpreterState * );
49- PyAPI_FUNC (void ) _PyInterpreterState_IDIncref (PyInterpreterState * );
50- PyAPI_FUNC (void ) _PyInterpreterState_IDDecref (PyInterpreterState * );
85+ PyAPI_FUNC (int ) _PyInterpreterState_IDInitref (struct _is * );
86+ PyAPI_FUNC (void ) _PyInterpreterState_IDIncref (struct _is * );
87+ PyAPI_FUNC (void ) _PyInterpreterState_IDDecref (struct _is * );
5188
5289
5390/* cross-interpreter data */
@@ -119,6 +156,30 @@ struct _xidregitem {
119156};
120157
121158
159+ /* GIL state */
160+
161+ struct _gilstate_runtime_state {
162+ int check_enabled ;
163+ /* Assuming the current thread holds the GIL, this is the
164+ PyThreadState for the current thread. */
165+ _Py_atomic_address tstate_current ;
166+ PyThreadFrameGetter getframe ;
167+ /* The single PyInterpreterState used by this process'
168+ GILState implementation
169+ */
170+ /* TODO: Given interp_main, it may be possible to kill this ref */
171+ PyInterpreterState * autoInterpreterState ;
172+ Py_tss_t autoTSSkey ;
173+ };
174+
175+ /* hook for PyEval_GetFrame(), requested for Psyco */
176+ #define _PyThreadState_GetFrame _PyRuntime.gilstate.getframe
177+
178+ /* Issue #26558: Flag to disable PyGILState_Check().
179+ If set to non-zero, PyGILState_Check() always return 1. */
180+ #define _PyGILState_check_enabled _PyRuntime.gilstate.check_enabled
181+
182+
122183/* Full Python runtime state */
123184
124185typedef struct pyruntimestate {
0 commit comments