@@ -47,13 +47,35 @@ struct _Py_long_state {
47
47
The PyInterpreterState typedef is in Include/pytypedefs.h.
48
48
*/
49
49
struct _is {
50
-
51
- struct _ceval_state ceval ;
52
50
PyInterpreterState * next ;
53
51
52
+ int64_t id ;
53
+ int64_t id_refcount ;
54
+ int requires_idref ;
55
+ PyThread_type_lock id_mutex ;
56
+
57
+ /* Has been initialized to a safe state.
58
+
59
+ In order to be effective, this must be set to 0 during or right
60
+ after allocation. */
61
+ int _initialized ;
62
+ int finalizing ;
63
+
54
64
uint64_t monitoring_version ;
55
65
uint64_t last_restart_version ;
56
66
67
+ /* The fields above this line are declared as early as possible to
68
+ facilitate out-of-process observability tools. */
69
+
70
+ /* Set by Py_EndInterpreter().
71
+
72
+ Use _PyInterpreterState_GetFinalizing()
73
+ and _PyInterpreterState_SetFinalizing()
74
+ to access it, don't access it directly. */
75
+ _Py_atomic_address _finalizing ;
76
+
77
+ PyCodeObject * interpreter_trampoline ;
78
+
57
79
struct pythreads {
58
80
uint64_t next_unique_id ;
59
81
/* The linked list of threads, newest first. */
@@ -72,30 +94,22 @@ struct _is {
72
94
Get runtime from tstate: tstate->interp->runtime. */
73
95
struct pyruntimestate * runtime ;
74
96
75
- int64_t id ;
76
- int64_t id_refcount ;
77
- int requires_idref ;
78
- PyThread_type_lock id_mutex ;
79
-
80
- /* Has been initialized to a safe state.
81
-
82
- In order to be effective, this must be set to 0 during or right
83
- after allocation. */
84
- int _initialized ;
85
- int finalizing ;
86
-
87
- /* Set by Py_EndInterpreter().
97
+ struct _gc_runtime_state gc ;
88
98
89
- Use _PyInterpreterState_GetFinalizing()
90
- and _PyInterpreterState_SetFinalizing()
91
- to access it, don't access it directly. */
92
- _Py_atomic_address _finalizing ;
99
+ /* The following fields are here to avoid allocation during init.
100
+ The data is exposed through PyInterpreterState pointer fields.
101
+ These fields should not be accessed directly outside of init.
93
102
94
- struct _obmalloc_state obmalloc ;
103
+ All other PyInterpreterState pointer fields are populated when
104
+ needed and default to NULL.
95
105
96
- struct _gc_runtime_state gc ;
106
+ For now there are some exceptions to that rule, which require
107
+ allocation during init. These will be addressed on a case-by-case
108
+ basis. Also see _PyRuntimeState regarding the various mutex fields.
109
+ */
97
110
98
- struct _import_state imports ;
111
+ /* The per-interpreter GIL, which might not be used. */
112
+ struct _gil_runtime_state _gil ;
99
113
100
114
// Dictionary of the sys module
101
115
PyObject * sysdict ;
@@ -133,6 +147,12 @@ struct _is {
133
147
struct _warnings_runtime_state warnings ;
134
148
struct atexit_state atexit ;
135
149
150
+ struct _ceval_state ceval ;
151
+
152
+ struct _obmalloc_state obmalloc ;
153
+
154
+ struct _import_state imports ;
155
+
136
156
PyObject * audit_hooks ;
137
157
PyType_WatchCallback type_watchers [TYPE_MAX_WATCHERS ];
138
158
PyCode_WatchCallback code_watchers [CODE_MAX_WATCHERS ];
@@ -159,7 +179,6 @@ struct _is {
159
179
struct ast_state ast ;
160
180
struct types_state types ;
161
181
struct callable_cache callable_cache ;
162
- PyCodeObject * interpreter_trampoline ;
163
182
_PyOptimizerObject * optimizer ;
164
183
uint16_t optimizer_resume_threshold ;
165
184
uint16_t optimizer_backedge_threshold ;
@@ -176,21 +195,6 @@ struct _is {
176
195
struct _Py_interp_cached_objects cached_objects ;
177
196
struct _Py_interp_static_objects static_objects ;
178
197
179
- /* The following fields are here to avoid allocation during init.
180
- The data is exposed through PyInterpreterState pointer fields.
181
- These fields should not be accessed directly outside of init.
182
-
183
- All other PyInterpreterState pointer fields are populated when
184
- needed and default to NULL.
185
-
186
- For now there are some exceptions to that rule, which require
187
- allocation during init. These will be addressed on a case-by-case
188
- basis. Also see _PyRuntimeState regarding the various mutex fields.
189
- */
190
-
191
- /* The per-interpreter GIL, which might not be used. */
192
- struct _gil_runtime_state _gil ;
193
-
194
198
/* the initial PyInterpreterState.threads.head */
195
199
PyThreadState _initial_thread ;
196
200
};
0 commit comments