blob: 612e7de99befd9b51111ebc2b50f2249320670c0 [file] [log] [blame]
Guido van Rossuma027efa1997-05-05 20:56:21 +00001/* Thread and interpreter state structures and their interfaces */
2
3
Fred Drake5eb6d4e2000-07-08 23:37:28 +00004#ifndef Py_PYSTATE_H
5#define Py_PYSTATE_H
6#ifdef __cplusplus
7extern "C" {
8#endif
9
Eric Snow4c6955e2018-02-16 18:53:40 -070010#include "pythread.h"
11
Brett Cannon5c4de282016-09-07 11:16:41 -070012/* This limitation is for performance and simplicity. If needed it can be
13removed (with effort). */
14#define MAX_CO_EXTRA_USERS 255
15
Guido van Rossuma027efa1997-05-05 20:56:21 +000016/* State shared between threads */
17
Guido van Rossum29e46a91997-08-02 02:56:48 +000018struct _ts; /* Forward */
19struct _is; /* Forward */
Brett Cannon3cebf932016-09-05 15:33:46 -070020struct _frame; /* Forward declaration for PyFrameObject. */
Guido van Rossum29e46a91997-08-02 02:56:48 +000021
Martin v. Löwis4d0d4712010-12-03 20:14:31 +000022#ifdef Py_LIMITED_API
23typedef struct _is PyInterpreterState;
24#else
Brett Cannon3cebf932016-09-05 15:33:46 -070025typedef PyObject* (*_PyFrameEvalFunction)(struct _frame *, int);
26
Eric Snow1abcf672017-05-23 21:46:51 -070027
28typedef struct {
Victor Stinnerecf411c2018-07-26 02:37:22 +020029 /* Install signal handlers? Yes by default. */
30 int install_signal_handlers;
Victor Stinner8ded5b82018-01-24 17:03:28 +010031
Victor Stinnerd1457752018-07-26 16:04:56 +020032 /* If greater than 0: use environment variables.
33 Set to 0 by -E command line option. If set to -1 (default), it is
34 set to !Py_IgnoreEnvironmentFlag. */
35 int use_environment;
36
Victor Stinner25420fe2017-11-20 18:12:22 -080037 int use_hash_seed; /* PYTHONHASHSEED=x */
Eric Snow1abcf672017-05-23 21:46:51 -070038 unsigned long hash_seed;
Victor Stinnerd1457752018-07-26 16:04:56 +020039
Victor Stinnerecf411c2018-07-26 02:37:22 +020040 const char *allocator; /* Memory allocator: PYTHONMALLOC */
Victor Stinner8ded5b82018-01-24 17:03:28 +010041 int dev_mode; /* PYTHONDEVMODE, -X dev */
Victor Stinnerecf411c2018-07-26 02:37:22 +020042
43 /* Enable faulthandler?
44 Set to 1 by -X faulthandler and PYTHONFAULTHANDLER. -1 means unset. */
45 int faulthandler;
46
47 /* Enable tracemalloc?
48 Set by -X tracemalloc=N and PYTHONTRACEMALLOC. -1 means unset */
49 int tracemalloc;
50
Victor Stinner8ded5b82018-01-24 17:03:28 +010051 int import_time; /* PYTHONPROFILEIMPORTTIME, -X importtime */
Victor Stinner25420fe2017-11-20 18:12:22 -080052 int show_ref_count; /* -X showrefcount */
53 int show_alloc_count; /* -X showalloccount */
Victor Stinner6bf992a2017-12-06 17:26:10 +010054 int dump_refs; /* PYTHONDUMPREFS */
55 int malloc_stats; /* PYTHONMALLOCSTATS */
Victor Stinner94540602017-12-16 04:54:22 +010056 int coerce_c_locale; /* PYTHONCOERCECLOCALE, -1 means unknown */
57 int coerce_c_locale_warn; /* PYTHONCOERCECLOCALE=warn */
Victor Stinner56b29b62018-07-26 18:57:56 +020058
59 /* Enable UTF-8 mode?
60 Set by -X utf8 command line option and PYTHONUTF8 environment variable.
61 If set to -1 (default), inherit Py_UTF8Mode value. */
62 int utf8_mode;
63
Carl Meyerb193fa92018-06-15 22:40:56 -060064 wchar_t *pycache_prefix; /* PYTHONPYCACHEPREFIX, -X pycache_prefix=PATH */
Victor Stinnerb5fd9ad2017-12-14 02:20:52 +010065
Victor Stinnerb5fd9ad2017-12-14 02:20:52 +010066 wchar_t *program_name; /* Program name, see also Py_GetProgramName() */
Victor Stinnerc4bca952017-12-19 23:48:17 +010067 int argc; /* Number of command line arguments,
68 -1 means unset */
Victor Stinnerca719ac2017-12-20 18:00:19 +010069 wchar_t **argv; /* Command line arguments */
70 wchar_t *program; /* argv[0] or "" */
71
72 int nxoption; /* Number of -X options */
73 wchar_t **xoptions; /* -X options */
74
75 int nwarnoption; /* Number of warnings options */
76 wchar_t **warnoptions; /* Warnings options */
Victor Stinner8ded5b82018-01-24 17:03:28 +010077
78 /* Path configuration inputs */
79 wchar_t *module_search_path_env; /* PYTHONPATH environment variable */
80 wchar_t *home; /* PYTHONHOME environment variable,
81 see also Py_SetPythonHome(). */
82
83 /* Path configuration outputs */
84 int nmodule_search_path; /* Number of sys.path paths,
85 -1 means unset */
86 wchar_t **module_search_paths; /* sys.path paths */
87 wchar_t *executable; /* sys.executable */
88 wchar_t *prefix; /* sys.prefix */
89 wchar_t *base_prefix; /* sys.base_prefix */
90 wchar_t *exec_prefix; /* sys.exec_prefix */
91 wchar_t *base_exec_prefix; /* sys.base_exec_prefix */
Victor Stinnerb1147e42018-07-21 02:06:16 +020092#ifdef MS_WINDOWS
93 wchar_t *dll_path; /* Windows DLL path */
94#endif
Victor Stinner8ded5b82018-01-24 17:03:28 +010095
Victor Stinnerd19d8d52018-07-24 13:55:48 +020096 /* If greater than 0, enable isolated mode: sys.path contains
97 neither the script's directory nor the user's site-packages directory.
98
99 Set to 1 by the -I command line option. If set to -1 (default), inherit
100 Py_IsolatedFlag value. */
101 int isolated;
102
103 /* If equal to zero, disable the import of the module site and the
104 site-dependent manipulations of sys.path that it entails. Also disable
105 these manipulations if site is explicitly imported later (call
106 site.main() if you want them to be triggered).
107
Victor Stinner53b7d4e2018-07-25 01:37:05 +0200108 Set to 0 by the -S command line option. If set to -1 (default), it is
109 set to !Py_NoSiteFlag. */
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200110 int site_import;
111
Victor Stinner53b7d4e2018-07-25 01:37:05 +0200112 /* Bytes warnings:
113
114 * If equal to 1, issue a warning when comparing bytes or bytearray with
115 str or bytes with int.
116 * If equal or greater to 2, issue an error.
117
118 Incremented by the -b command line option. If set to -1 (default), inherit
119 Py_BytesWarningFlag value. */
120 int bytes_warning;
121
122 /* If greater than 0, enable inspect: when a script is passed as first
123 argument or the -c option is used, enter interactive mode after
124 executing the script or the command, even when sys.stdin does not appear
125 to be a terminal.
126
127 Incremented by the -i command line option. Set to 1 if the PYTHONINSPECT
128 environment variable is non-empty. If set to -1 (default), inherit
129 Py_InspectFlag value. */
130 int inspect;
131
132 /* If greater than 0: enable the interactive mode (REPL).
133
134 Incremented by the -i command line option. If set to -1 (default),
135 inherit Py_InteractiveFlag value. */
136 int interactive;
137
138 /* Optimization level.
139
140 Incremented by the -O command line option. Set by the PYTHONOPTIMIZE
141 environment variable. If set to -1 (default), inherit Py_OptimizeFlag
142 value. */
143 int optimization_level;
144
145 /* If greater than 0, enable the debug mode: turn on parser debugging
146 output (for expert only, depending on compilation options).
147
148 Incremented by the -d command line option. Set by the PYTHONDEBUG
149 environment variable. If set to -1 (default), inherit Py_DebugFlag
150 value. */
151 int debug;
152
153 /* If equal to 0, Python won't try to write ``.pyc`` files on the
154 import of source modules.
155
156 Set to 0 by the -B command line option and the PYTHONDONTWRITEBYTECODE
157 environment variable. If set to -1 (default), it is set to
158 !Py_DontWriteBytecodeFlag. */
159 int write_bytecode;
160
161 /* If greater than 0, enable the verbose mode: print a message each time a
162 module is initialized, showing the place (filename or built-in module)
163 from which it is loaded.
164
165 If greater or equal to 2, print a message for each file that is checked
166 for when searching for a module. Also provides information on module
167 cleanup at exit.
168
169 Incremented by the -v option. Set by the PYTHONVERBOSE environment
170 variable. If set to -1 (default), inherit Py_VerboseFlag value. */
171 int verbose;
172
173 /* If greater than 0, enable the quiet mode: Don't display the copyright
174 and version messages even in interactive mode.
175
176 Incremented by the -q option. If set to -1 (default), inherit
177 Py_QuietFlag value. */
178 int quiet;
179
180 /* If greater than 0, don't add the user site-packages directory to
181 sys.path.
182
183 Set to 0 by the -s and -I command line options , and the PYTHONNOUSERSITE
184 environment variable. If set to -1 (default), it is set to
185 !Py_NoUserSiteDirectory. */
186 int user_site_directory;
187
188 /* If greater than 0, enable unbuffered mode: force the stdout and stderr
189 streams to be unbuffered.
190
191 Set to 1 by the -u option. Set by the PYTHONUNBUFFERED environment
192 variable. If set to -1 (default), inherit Py_UnbufferedStdioFlag
193 value. */
194 int unbuffered_stdio;
195
196#ifdef MS_WINDOWS
197 /* If greater than 1, use the "mbcs" encoding instead of the UTF-8
198 encoding for the filesystem encoding.
199
200 Set to 1 if the PYTHONLEGACYWINDOWSFSENCODING environment variable is
201 set to a non-empty string. If set to -1 (default), inherit
202 Py_LegacyWindowsFSEncodingFlag value.
203
204 See PEP 529 for more details. */
205 int legacy_windows_fs_encoding;
206
207 /* If greater than zero, use io.FileIO instead of WindowsConsoleIO for sys
208 standard streams.
209
210 Set to 1 if the PYTHONLEGACYWINDOWSSTDIO environment variable is set to
211 a non-empty string. If set to -1 (default), inherit
212 Py_LegacyWindowsStdioFlag value.
213
214 See PEP 528 for more details. */
215 int legacy_windows_stdio;
216#endif
217
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200218 /* --- Private fields -------- */
219
220 /* Install importlib? If set to 0, importlib is not initialized at all.
Victor Stinner1dc6e392018-07-25 02:49:17 +0200221 Needed by freeze_importlib. */
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200222 int _install_importlib;
Victor Stinner53b7d4e2018-07-25 01:37:05 +0200223
224 /* Value of the --check-hash-based-pycs configure option. Valid values:
225
226 - "default" means the 'check_source' flag in hash-based pycs
227 determines invalidation
228 - "always" causes the interpreter to hash the source file for
229 invalidation regardless of value of 'check_source' bit
230 - "never" causes the interpreter to always assume hash-based pycs are
231 valid
232
233 Set by the --check-hash-based-pycs command line option.
234 If set to NULL (default), inherit _Py_CheckHashBasedPycsMode value.
235
236 See PEP 552 "Deterministic pycs" for more details. */
237 const char *_check_hash_pycs_mode;
Eric Snow1abcf672017-05-23 21:46:51 -0700238} _PyCoreConfig;
239
Victor Stinner53b7d4e2018-07-25 01:37:05 +0200240#ifdef MS_WINDOWS
241# define _PyCoreConfig_WINDOWS_INIT \
242 .legacy_windows_fs_encoding = -1, \
243 .legacy_windows_stdio = -1,
244#else
245# define _PyCoreConfig_WINDOWS_INIT
246#endif
247
Victor Stinner94540602017-12-16 04:54:22 +0100248#define _PyCoreConfig_INIT \
Victor Stinnerc4bca952017-12-19 23:48:17 +0100249 (_PyCoreConfig){ \
Victor Stinnerecf411c2018-07-26 02:37:22 +0200250 .install_signal_handlers = 1, \
Victor Stinnerd1457752018-07-26 16:04:56 +0200251 .use_environment = -1, \
Victor Stinnerc4bca952017-12-19 23:48:17 +0100252 .use_hash_seed = -1, \
Victor Stinnerecf411c2018-07-26 02:37:22 +0200253 .faulthandler = -1, \
Victor Stinner60b04c92018-07-25 19:23:53 +0200254 .tracemalloc = -1, \
Victor Stinnerc4bca952017-12-19 23:48:17 +0100255 .coerce_c_locale = -1, \
256 .utf8_mode = -1, \
Victor Stinner8ded5b82018-01-24 17:03:28 +0100257 .argc = -1, \
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200258 .nmodule_search_path = -1, \
259 .isolated = -1, \
260 .site_import = -1, \
Victor Stinner53b7d4e2018-07-25 01:37:05 +0200261 .bytes_warning = -1, \
262 .inspect = -1, \
263 .interactive = -1, \
264 .optimization_level = -1, \
265 .debug= -1, \
266 .write_bytecode = -1, \
267 .verbose = -1, \
268 .quiet = -1, \
269 .user_site_directory = -1, \
270 .unbuffered_stdio = -1, \
271 _PyCoreConfig_WINDOWS_INIT \
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200272 ._install_importlib = 1}
Victor Stinner33c377e2017-12-05 15:12:41 +0100273/* Note: _PyCoreConfig_INIT sets other fields to 0/NULL */
Eric Snow1abcf672017-05-23 21:46:51 -0700274
Eric Snowc7ec9982017-05-23 23:00:52 -0700275/* Placeholders while working on the new configuration API
276 *
277 * See PEP 432 for final anticipated contents
Eric Snowc7ec9982017-05-23 23:00:52 -0700278 */
279typedef struct {
Victor Stinner9cfc0022017-12-20 19:36:46 +0100280 int install_signal_handlers; /* Install signal handlers? -1 means unset */
Victor Stinner41264f12017-12-15 02:05:29 +0100281 PyObject *argv; /* sys.argv list, can be NULL */
282 PyObject *executable; /* sys.executable str */
283 PyObject *prefix; /* sys.prefix str */
284 PyObject *base_prefix; /* sys.base_prefix str, can be NULL */
285 PyObject *exec_prefix; /* sys.exec_prefix str */
286 PyObject *base_exec_prefix; /* sys.base_exec_prefix str, can be NULL */
287 PyObject *warnoptions; /* sys.warnoptions list, can be NULL */
288 PyObject *xoptions; /* sys._xoptions dict, can be NULL */
289 PyObject *module_search_path; /* sys.path list */
Carl Meyerb193fa92018-06-15 22:40:56 -0600290 PyObject *pycache_prefix; /* sys.pycache_prefix str, can be NULL */
Eric Snowc7ec9982017-05-23 23:00:52 -0700291} _PyMainInterpreterConfig;
292
Victor Stinnerd4341102017-11-23 00:12:09 +0100293#define _PyMainInterpreterConfig_INIT \
Victor Stinner33c377e2017-12-05 15:12:41 +0100294 (_PyMainInterpreterConfig){.install_signal_handlers = -1}
295/* Note: _PyMainInterpreterConfig_INIT sets other fields to 0/NULL */
Eric Snowc7ec9982017-05-23 23:00:52 -0700296
Guido van Rossuma027efa1997-05-05 20:56:21 +0000297typedef struct _is {
298
Fred Drake5eb6d4e2000-07-08 23:37:28 +0000299 struct _is *next;
300 struct _ts *tstate_head;
Guido van Rossum29e46a91997-08-02 02:56:48 +0000301
Eric Snowe3774162017-05-22 19:46:40 -0700302 int64_t id;
Eric Snow4c6955e2018-02-16 18:53:40 -0700303 int64_t id_refcount;
304 PyThread_type_lock id_mutex;
Eric Snowe3774162017-05-22 19:46:40 -0700305
Eric Snow93c92f72017-09-13 23:46:04 -0700306 PyObject *modules;
Martin v. Löwis1a214512008-06-11 05:26:20 +0000307 PyObject *modules_by_index;
Fred Drake5eb6d4e2000-07-08 23:37:28 +0000308 PyObject *sysdict;
309 PyObject *builtins;
Brett Cannonfd074152012-04-14 14:10:13 -0400310 PyObject *importlib;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000311
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600312 /* Used in Python/sysmodule.c. */
313 int check_interval;
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600314
315 /* Used in Modules/_threadmodule.c. */
316 long num_threads;
317 /* Support for runtime thread stack size tuning.
318 A value of 0 means using the platform's default stack size
319 or the size specified by the THREAD_STACK_SIZE macro. */
320 /* Used in Python/thread.c. */
321 size_t pythread_stacksize;
322
Gustavo Niemeyer5ddd4c32003-03-19 00:35:36 +0000323 PyObject *codec_search_path;
324 PyObject *codec_search_cache;
325 PyObject *codec_error_registry;
Christian Heimes6a27efa2008-10-30 21:48:26 +0000326 int codecs_initialized;
Victor Stinner793b5312011-04-27 00:24:21 +0200327 int fscodec_initialized;
Gustavo Niemeyer5ddd4c32003-03-19 00:35:36 +0000328
Eric Snow1abcf672017-05-23 21:46:51 -0700329 _PyCoreConfig core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700330 _PyMainInterpreterConfig config;
Martin v. Löwisf0473d52001-07-18 16:17:16 +0000331#ifdef HAVE_DLOPEN
332 int dlopenflags;
333#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000334
Serhiy Storchaka87a5c512014-02-10 18:21:34 +0200335 PyObject *builtins_copy;
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300336 PyObject *import_func;
Brett Cannon3cebf932016-09-05 15:33:46 -0700337 /* Initialized to PyEval_EvalFrameDefault(). */
338 _PyFrameEvalFunction eval_frame;
Dino Viehlandf3cffd22017-06-21 14:44:36 -0700339
340 Py_ssize_t co_extra_user_count;
341 freefunc co_extra_freefuncs[MAX_CO_EXTRA_USERS];
342
Antoine Pitrou346cbd32017-05-27 17:50:54 +0200343#ifdef HAVE_FORK
344 PyObject *before_forkers;
345 PyObject *after_forkers_parent;
346 PyObject *after_forkers_child;
347#endif
Marcel Plch776407f2017-12-20 11:17:58 +0100348 /* AtExit module */
349 void (*pyexitfunc)(PyObject *);
350 PyObject *pyexitmodule;
Yury Selivanovf23746a2018-01-22 19:11:18 -0500351
352 uint64_t tstate_next_unique_id;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000353} PyInterpreterState;
Victor Stinner6bf992a2017-12-06 17:26:10 +0100354#endif /* !Py_LIMITED_API */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000355
356
357/* State unique per thread */
358
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000359#ifndef Py_LIMITED_API
Fred Drake55fb6e02001-06-27 19:18:03 +0000360/* Py_tracefunc return -1 when raising an exception, or 0 for success. */
361typedef int (*Py_tracefunc)(PyObject *, struct _frame *, int, PyObject *);
362
Nick Coghlan5a851672017-09-08 10:14:16 +1000363/* The following values are used for 'what' for tracefunc functions
364 *
365 * To add a new kind of trace event, also update "trace_init" in
366 * Python/sysmodule.c to define the Python level event name
367 */
Fred Drake55fb6e02001-06-27 19:18:03 +0000368#define PyTrace_CALL 0
369#define PyTrace_EXCEPTION 1
370#define PyTrace_LINE 2
371#define PyTrace_RETURN 3
Nicholas Bastinc69ebe82004-03-24 21:57:10 +0000372#define PyTrace_C_CALL 4
373#define PyTrace_C_EXCEPTION 5
374#define PyTrace_C_RETURN 6
Nick Coghlan5a851672017-09-08 10:14:16 +1000375#define PyTrace_OPCODE 7
Victor Stinner6bf992a2017-12-06 17:26:10 +0100376#endif /* Py_LIMITED_API */
Fred Drake55fb6e02001-06-27 19:18:03 +0000377
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000378#ifdef Py_LIMITED_API
379typedef struct _ts PyThreadState;
380#else
Mark Shannonae3087c2017-10-22 22:41:51 +0100381
382typedef struct _err_stackitem {
Serhiy Storchakabdf42982017-10-26 16:59:40 +0300383 /* This struct represents an entry on the exception stack, which is a
384 * per-coroutine state. (Coroutine in the computer science sense,
Mark Shannonae3087c2017-10-22 22:41:51 +0100385 * including the thread and generators).
386 * This ensures that the exception state is not impacted by "yields"
387 * from an except handler.
388 */
389 PyObject *exc_type, *exc_value, *exc_traceback;
390
391 struct _err_stackitem *previous_item;
392
393} _PyErr_StackItem;
394
395
Guido van Rossuma027efa1997-05-05 20:56:21 +0000396typedef struct _ts {
Brett Cannon55fa66d2005-06-25 07:07:35 +0000397 /* See Python/ceval.c for comments explaining most fields */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000398
Charles-Francois Natalif28dfdd2013-05-08 21:09:52 +0200399 struct _ts *prev;
Fred Drake5eb6d4e2000-07-08 23:37:28 +0000400 struct _ts *next;
401 PyInterpreterState *interp;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000402
Fred Drake5eb6d4e2000-07-08 23:37:28 +0000403 struct _frame *frame;
404 int recursion_depth;
Martin v. Löwis5b222132007-06-10 09:51:05 +0000405 char overflowed; /* The stack has overflowed. Allow 50 more calls
Victor Stinner8e4d4072011-04-26 23:34:58 +0200406 to handle the runtime error. */
407 char recursion_critical; /* The current calls must not cause
408 a stack overflow. */
pdox18967932017-10-25 23:03:01 -0700409 int stackcheck_counter;
410
Brett Cannon55fa66d2005-06-25 07:07:35 +0000411 /* 'tracing' keeps track of the execution depth when tracing/profiling.
412 This is to prevent the actual trace/profile code from being recorded in
413 the trace/profile. */
Fred Drake5eb6d4e2000-07-08 23:37:28 +0000414 int tracing;
Fred Drake9e3ad782001-07-03 23:39:52 +0000415 int use_tracing;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000416
Fred Drake55fb6e02001-06-27 19:18:03 +0000417 Py_tracefunc c_profilefunc;
418 Py_tracefunc c_tracefunc;
419 PyObject *c_profileobj;
420 PyObject *c_traceobj;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000421
Mark Shannonae3087c2017-10-22 22:41:51 +0100422 /* The exception currently being raised */
Fred Drake5eb6d4e2000-07-08 23:37:28 +0000423 PyObject *curexc_type;
424 PyObject *curexc_value;
425 PyObject *curexc_traceback;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000426
Mark Shannonae3087c2017-10-22 22:41:51 +0100427 /* The exception currently being handled, if no coroutines/generators
428 * are present. Always last element on the stack referred to be exc_info.
429 */
430 _PyErr_StackItem exc_state;
431
432 /* Pointer to the top of the stack of the exceptions currently
433 * being handled */
434 _PyErr_StackItem *exc_info;
Guido van Rossuma027efa1997-05-05 20:56:21 +0000435
Brett Cannon55fa66d2005-06-25 07:07:35 +0000436 PyObject *dict; /* Stores per-thread state */
Guido van Rossumee0a63b1998-04-13 20:24:05 +0000437
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000438 int gilstate_counter;
Michael W. Hudson019a78e2002-11-08 12:53:11 +0000439
Guido van Rossumb8b6d0c2003-06-28 21:53:52 +0000440 PyObject *async_exc; /* Asynchronous exception to raise */
Serhiy Storchakaaefa7eb2017-03-23 15:48:39 +0200441 unsigned long thread_id; /* Thread id where this tstate was created */
Guido van Rossumb8b6d0c2003-06-28 21:53:52 +0000442
Antoine Pitrou2b0218a2012-09-06 00:59:49 +0200443 int trash_delete_nesting;
444 PyObject *trash_delete_later;
445
Antoine Pitrou7b476992013-09-07 23:38:37 +0200446 /* Called when a thread state is deleted normally, but not when it
447 * is destroyed after fork().
448 * Pain: to prevent rare but fatal shutdown errors (issue 18808),
449 * Thread.join() must wait for the join'ed thread's tstate to be unlinked
450 * from the tstate chain. That happens at the end of a thread's life,
451 * in pystate.c.
452 * The obvious way doesn't quite work: create a lock which the tstate
453 * unlinking code releases, and have Thread.join() wait to acquire that
454 * lock. The problem is that we _are_ at the end of the thread's life:
455 * if the thread holds the last reference to the lock, decref'ing the
456 * lock will delete the lock, and that may trigger arbitrary Python code
457 * if there's a weakref, with a callback, to the lock. But by this time
458 * _PyThreadState_Current is already NULL, so only the simplest of C code
459 * can be allowed to run (in particular it must not be possible to
460 * release the GIL).
461 * So instead of holding the lock directly, the tstate holds a weakref to
462 * the lock: that's the value of on_delete_data below. Decref'ing a
463 * weakref is harmless.
464 * on_delete points to _threadmodule.c's static release_sentinel() function.
465 * After the tstate is unlinked, release_sentinel is called with the
466 * weakref-to-lock (on_delete_data) argument, and release_sentinel releases
467 * the indirectly held lock.
468 */
469 void (*on_delete)(void *);
470 void *on_delete_data;
471
Nathaniel J. Smithfc2f4072018-01-21 06:44:07 -0800472 int coroutine_origin_tracking_depth;
473
Yury Selivanov75445082015-05-11 22:57:16 -0400474 PyObject *coroutine_wrapper;
Yury Selivanovaab3c4a2015-06-02 18:43:51 -0400475 int in_coroutine_wrapper;
Yury Selivanov75445082015-05-11 22:57:16 -0400476
Yury Selivanoveb636452016-09-08 22:01:51 -0700477 PyObject *async_gen_firstiter;
478 PyObject *async_gen_finalizer;
479
Yury Selivanovf23746a2018-01-22 19:11:18 -0500480 PyObject *context;
481 uint64_t context_ver;
482
483 /* Unique thread state id. */
484 uint64_t id;
485
Fred Drake5eb6d4e2000-07-08 23:37:28 +0000486 /* XXX signal handlers should also be here */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000487
488} PyThreadState;
Victor Stinner6bf992a2017-12-06 17:26:10 +0100489#endif /* !Py_LIMITED_API */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000490
491
Mark Hammond91a681d2002-08-12 07:21:58 +0000492PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_New(void);
493PyAPI_FUNC(void) PyInterpreterState_Clear(PyInterpreterState *);
494PyAPI_FUNC(void) PyInterpreterState_Delete(PyInterpreterState *);
Eric Snowe3774162017-05-22 19:46:40 -0700495#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
496/* New in 3.7 */
497PyAPI_FUNC(int64_t) PyInterpreterState_GetID(PyInterpreterState *);
498#endif
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300499#ifndef Py_LIMITED_API
Martin v. Löwis1a214512008-06-11 05:26:20 +0000500PyAPI_FUNC(int) _PyState_AddModule(PyObject*, struct PyModuleDef*);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300501#endif /* !Py_LIMITED_API */
Martin v. Löwis7800f752012-06-22 12:20:55 +0200502#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
503/* New in 3.3 */
504PyAPI_FUNC(int) PyState_AddModule(PyObject*, struct PyModuleDef*);
505PyAPI_FUNC(int) PyState_RemoveModule(struct PyModuleDef*);
506#endif
Martin v. Löwis1a214512008-06-11 05:26:20 +0000507PyAPI_FUNC(PyObject*) PyState_FindModule(struct PyModuleDef*);
Antoine Pitrou40322e62013-08-11 00:30:09 +0200508#ifndef Py_LIMITED_API
509PyAPI_FUNC(void) _PyState_ClearModules(void);
510#endif
Guido van Rossuma027efa1997-05-05 20:56:21 +0000511
Mark Hammond91a681d2002-08-12 07:21:58 +0000512PyAPI_FUNC(PyThreadState *) PyThreadState_New(PyInterpreterState *);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300513#ifndef Py_LIMITED_API
Victor Stinner45b9be52010-03-03 23:28:07 +0000514PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *);
515PyAPI_FUNC(void) _PyThreadState_Init(PyThreadState *);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300516#endif /* !Py_LIMITED_API */
Mark Hammond91a681d2002-08-12 07:21:58 +0000517PyAPI_FUNC(void) PyThreadState_Clear(PyThreadState *);
518PyAPI_FUNC(void) PyThreadState_Delete(PyThreadState *);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300519#ifndef Py_LIMITED_API
Antoine Pitrou8408cea2013-05-05 23:47:09 +0200520PyAPI_FUNC(void) _PyThreadState_DeleteExcept(PyThreadState *tstate);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300521#endif /* !Py_LIMITED_API */
Mark Hammond91a681d2002-08-12 07:21:58 +0000522PyAPI_FUNC(void) PyThreadState_DeleteCurrent(void);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300523#ifndef Py_LIMITED_API
Antoine Pitrou0c759fe2011-04-27 19:28:05 +0200524PyAPI_FUNC(void) _PyGILState_Reinit(void);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300525#endif /* !Py_LIMITED_API */
Guido van Rossuma027efa1997-05-05 20:56:21 +0000526
Victor Stinnerbfd316e2016-01-20 11:12:38 +0100527/* Return the current thread state. The global interpreter lock must be held.
528 * When the current thread state is NULL, this issues a fatal error (so that
529 * the caller needn't check for NULL). */
Mark Hammond91a681d2002-08-12 07:21:58 +0000530PyAPI_FUNC(PyThreadState *) PyThreadState_Get(void);
Victor Stinnerbfd316e2016-01-20 11:12:38 +0100531
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300532#ifndef Py_LIMITED_API
Victor Stinnerbfd316e2016-01-20 11:12:38 +0100533/* Similar to PyThreadState_Get(), but don't issue a fatal error
534 * if it is NULL. */
535PyAPI_FUNC(PyThreadState *) _PyThreadState_UncheckedGet(void);
Serhiy Storchaka9fab79b2016-09-11 11:03:14 +0300536#endif /* !Py_LIMITED_API */
Victor Stinnerbfd316e2016-01-20 11:12:38 +0100537
Mark Hammond91a681d2002-08-12 07:21:58 +0000538PyAPI_FUNC(PyThreadState *) PyThreadState_Swap(PyThreadState *);
539PyAPI_FUNC(PyObject *) PyThreadState_GetDict(void);
Serhiy Storchakaaefa7eb2017-03-23 15:48:39 +0200540PyAPI_FUNC(int) PyThreadState_SetAsyncExc(unsigned long, PyObject *);
Guido van Rossuma027efa1997-05-05 20:56:21 +0000541
Guido van Rossum275ea671998-12-21 18:28:10 +0000542
543/* Variable and macro for in-line access to current thread state */
544
Jeffrey Yasskin39370832010-05-03 19:29:34 +0000545/* Assuming the current thread holds the GIL, this is the
Victor Stinner6df29ad2015-09-18 15:06:34 +0200546 PyThreadState for the current thread. */
547#ifdef Py_BUILD_CORE
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600548# define _PyThreadState_Current _PyRuntime.gilstate.tstate_current
Victor Stinner6df29ad2015-09-18 15:06:34 +0200549# define PyThreadState_GET() \
550 ((PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current))
Guido van Rossum275ea671998-12-21 18:28:10 +0000551#else
Victor Stinner6df29ad2015-09-18 15:06:34 +0200552# define PyThreadState_GET() PyThreadState_Get()
Guido van Rossum275ea671998-12-21 18:28:10 +0000553#endif
554
Tim Peters174175b2004-03-29 02:24:26 +0000555typedef
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000556 enum {PyGILState_LOCKED, PyGILState_UNLOCKED}
557 PyGILState_STATE;
558
Victor Stinner8e4d4072011-04-26 23:34:58 +0200559
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000560/* Ensure that the current thread is ready to call the Python
561 C API, regardless of the current state of Python, or of its
562 thread lock. This may be called as many times as desired
Tim Peters174175b2004-03-29 02:24:26 +0000563 by a thread so long as each call is matched with a call to
564 PyGILState_Release(). In general, other thread-state APIs may
565 be used between _Ensure() and _Release() calls, so long as the
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000566 thread-state is restored to its previous state before the Release().
567 For example, normal use of the Py_BEGIN_ALLOW_THREADS/
568 Py_END_ALLOW_THREADS macros are acceptable.
569
570 The return value is an opaque "handle" to the thread state when
Raymond Hettinger4eec95a2004-03-13 20:45:47 +0000571 PyGILState_Ensure() was called, and must be passed to
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000572 PyGILState_Release() to ensure Python is left in the same state. Even
Tim Peters174175b2004-03-29 02:24:26 +0000573 though recursive calls are allowed, these handles can *not* be shared -
574 each unique call to PyGILState_Ensure must save the handle for its
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000575 call to PyGILState_Release.
576
577 When the function returns, the current thread will hold the GIL.
578
579 Failure is a fatal error.
580*/
581PyAPI_FUNC(PyGILState_STATE) PyGILState_Ensure(void);
582
583/* Release any resources previously acquired. After this call, Python's
584 state will be the same as it was prior to the corresponding
Tim Peters174175b2004-03-29 02:24:26 +0000585 PyGILState_Ensure() call (but generally this state will be unknown to
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000586 the caller, hence the use of the GILState API.)
587
Tim Peters174175b2004-03-29 02:24:26 +0000588 Every call to PyGILState_Ensure must be matched by a call to
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000589 PyGILState_Release on the same thread.
590*/
591PyAPI_FUNC(void) PyGILState_Release(PyGILState_STATE);
592
593/* Helper/diagnostic function - get the current thread state for
Tim Peters174175b2004-03-29 02:24:26 +0000594 this thread. May return NULL if no GILState API has been used
Sandro Tosi61baee02011-08-08 00:16:54 +0200595 on the current thread. Note that the main thread always has such a
Tim Peters174175b2004-03-29 02:24:26 +0000596 thread-state, even if no auto-thread-state call has been made
Mark Hammond8d98d2c2003-04-19 15:41:53 +0000597 on the main thread.
598*/
599PyAPI_FUNC(PyThreadState *) PyGILState_GetThisThreadState(void);
600
Martin v. Löwis1c0689c2014-01-03 21:36:49 +0100601#ifndef Py_LIMITED_API
Victor Stinner861d9ab2016-03-16 22:45:24 +0100602/* Helper/diagnostic function - return 1 if the current thread
603 currently holds the GIL, 0 otherwise.
604
605 The function returns 1 if _PyGILState_check_enabled is non-zero. */
Kristján Valur Jónsson684cd0e2013-03-23 03:36:16 -0700606PyAPI_FUNC(int) PyGILState_Check(void);
Victor Stinner861d9ab2016-03-16 22:45:24 +0100607
608/* Unsafe function to get the single PyInterpreterState used by this process'
609 GILState implementation.
610
611 Return NULL before _PyGILState_Init() is called and after _PyGILState_Fini()
612 is called. */
613PyAPI_FUNC(PyInterpreterState *) _PyGILState_GetInterpreterStateUnsafe(void);
Victor Stinner6bf992a2017-12-06 17:26:10 +0100614#endif /* !Py_LIMITED_API */
Kristján Valur Jónsson684cd0e2013-03-23 03:36:16 -0700615
Victor Stinner8e4d4072011-04-26 23:34:58 +0200616
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000617/* The implementation of sys._current_frames() Returns a dict mapping
618 thread id to that thread's current frame.
619*/
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000620#ifndef Py_LIMITED_API
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000621PyAPI_FUNC(PyObject *) _PyThread_CurrentFrames(void);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000622#endif
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000623
Guido van Rossumf5df46d2001-07-19 12:19:27 +0000624/* Routines for advanced debuggers, requested by David Beazley.
625 Don't use unless you know what you are doing! */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000626#ifndef Py_LIMITED_API
Eric Snow6b4be192017-05-22 21:36:03 -0700627PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Main(void);
Mark Hammond91a681d2002-08-12 07:21:58 +0000628PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Head(void);
629PyAPI_FUNC(PyInterpreterState *) PyInterpreterState_Next(PyInterpreterState *);
630PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *);
631PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *);
Guido van Rossumf5df46d2001-07-19 12:19:27 +0000632
Guido van Rossum6297a7a2003-02-19 15:53:17 +0000633typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_);
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000634#endif
Guido van Rossum6297a7a2003-02-19 15:53:17 +0000635
Guido van Rossuma027efa1997-05-05 20:56:21 +0000636#ifdef __cplusplus
637}
638#endif
639#endif /* !Py_PYSTATE_H */