@@ -17,37 +17,74 @@ extern "C" {
17
17
#include "pycore_warnings.h"
18
18
19
19
20
- /* GIL state */
20
+ /* interpreter state */
21
21
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
35
62
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 ;
38
67
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 ];
42
70
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 ;
43
79
44
- /* interpreter state */
80
+ uint64_t tstate_next_unique_id ;
81
+ };
45
82
46
- PyAPI_FUNC (PyInterpreterState * ) _PyInterpreterState_LookUpID (PY_INT64_T );
83
+ PyAPI_FUNC (struct _is * ) _PyInterpreterState_LookUpID (PY_INT64_T );
47
84
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 * );
51
88
52
89
53
90
/* cross-interpreter data */
@@ -119,6 +156,30 @@ struct _xidregitem {
119
156
};
120
157
121
158
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
+
122
183
/* Full Python runtime state */
123
184
124
185
typedef struct pyruntimestate {
0 commit comments