bpo-35886: Make PyInterpreterState an opaque type in the public API. … · python/cpython@be3b295
@@ -17,37 +17,74 @@ extern "C" {
1717#include "pycore_warnings.h"
1818191920-/* GIL state */
20+/* interpreter state */
212122-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
356236-/* 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;
386739-/* 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];
427071+#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;
437944-/* interpreter state */
80+uint64_t tstate_next_unique_id;
81+};
458246-PyAPI_FUNC(PyInterpreterState *) _PyInterpreterState_LookUpID(PY_INT64_T);
83+PyAPI_FUNC(struct _is*) _PyInterpreterState_LookUpID(PY_INT64_T);
478448-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 *);
518852895390/* cross-interpreter data */
@@ -119,6 +156,30 @@ struct _xidregitem {
119156};
120157121158159+/* 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 */
123184124185typedef struct pyruntimestate {