blob: 97bb99256d899a8bd4f9c54766514f27082a9a15 [file] [log] [blame]
Nick Coghland6009512014-11-20 21:39:37 +10001/* Python interpreter top-level routines, including init/exit */
2
3#include "Python.h"
4
5#include "Python-ast.h"
Victor Stinner3bb183d2018-11-22 18:38:38 +01006#undef Yield /* undefine macro conflicting with <winbase.h> */
Victor Stinner09532fe2019-05-10 23:39:09 +02007#include "pycore_ceval.h"
Victor Stinner99fcc612019-04-29 13:04:07 +02008#include "pycore_context.h"
Victor Stinner331a6a52019-05-27 16:39:22 +02009#include "pycore_initconfig.h"
Victor Stinner353933e2018-11-23 13:08:26 +010010#include "pycore_fileutils.h"
Victor Stinner27e2d1f2018-11-01 00:52:28 +010011#include "pycore_hamt.h"
Victor Stinnera1c249c2018-11-01 03:15:58 +010012#include "pycore_pathconfig.h"
Victor Stinner621cebe2018-11-12 16:53:38 +010013#include "pycore_pylifecycle.h"
14#include "pycore_pymem.h"
15#include "pycore_pystate.h"
Victor Stinnered488662019-05-20 00:14:57 +020016#include "pycore_traceback.h"
Nick Coghland6009512014-11-20 21:39:37 +100017#include "grammar.h"
18#include "node.h"
19#include "token.h"
20#include "parsetok.h"
21#include "errcode.h"
22#include "code.h"
23#include "symtable.h"
24#include "ast.h"
25#include "marshal.h"
26#include "osdefs.h"
27#include <locale.h>
28
29#ifdef HAVE_SIGNAL_H
30#include <signal.h>
31#endif
32
33#ifdef MS_WINDOWS
34#include "malloc.h" /* for alloca */
35#endif
36
37#ifdef HAVE_LANGINFO_H
38#include <langinfo.h>
39#endif
40
41#ifdef MS_WINDOWS
42#undef BYTE
43#include "windows.h"
Steve Dower39294992016-08-30 21:22:36 -070044
45extern PyTypeObject PyWindowsConsoleIO_Type;
46#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
Nick Coghland6009512014-11-20 21:39:37 +100047#endif
48
49_Py_IDENTIFIER(flush);
50_Py_IDENTIFIER(name);
51_Py_IDENTIFIER(stdin);
52_Py_IDENTIFIER(stdout);
53_Py_IDENTIFIER(stderr);
Eric Snow3f9eee62017-09-15 16:35:20 -060054_Py_IDENTIFIER(threading);
Nick Coghland6009512014-11-20 21:39:37 +100055
56#ifdef __cplusplus
57extern "C" {
58#endif
59
Nick Coghland6009512014-11-20 21:39:37 +100060extern grammar _PyParser_Grammar; /* From graminit.c */
61
62/* Forward */
Victor Stinner331a6a52019-05-27 16:39:22 +020063static PyStatus add_main_module(PyInterpreterState *interp);
64static PyStatus init_import_size(void);
65static PyStatus init_sys_streams(PyInterpreterState *interp);
66static PyStatus init_signals(void);
Marcel Plch776407f2017-12-20 11:17:58 +010067static void call_py_exitfuncs(PyInterpreterState *);
Nick Coghland6009512014-11-20 21:39:37 +100068static void wait_for_thread_shutdown(void);
Victor Stinner8e91c242019-04-24 17:24:01 +020069static void call_ll_exitfuncs(_PyRuntimeState *runtime);
Nick Coghland6009512014-11-20 21:39:37 +100070
Gregory P. Smith38f11cc2019-02-16 12:57:40 -080071int _Py_UnhandledKeyboardInterrupt = 0;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080072_PyRuntimeState _PyRuntime = _PyRuntimeState_INIT;
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010073static int runtime_initialized = 0;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060074
Victor Stinner331a6a52019-05-27 16:39:22 +020075PyStatus
Eric Snow2ebc5ce2017-09-07 23:51:28 -060076_PyRuntime_Initialize(void)
77{
78 /* XXX We only initialize once in the process, which aligns with
79 the static initialization of the former globals now found in
80 _PyRuntime. However, _PyRuntime *should* be initialized with
81 every Py_Initialize() call, but doing so breaks the runtime.
82 This is because the runtime state is not properly finalized
83 currently. */
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010084 if (runtime_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +020085 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -080086 }
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010087 runtime_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080088
89 return _PyRuntimeState_Init(&_PyRuntime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -060090}
91
92void
93_PyRuntime_Finalize(void)
94{
95 _PyRuntimeState_Fini(&_PyRuntime);
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010096 runtime_initialized = 0;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060097}
98
99int
100_Py_IsFinalizing(void)
101{
102 return _PyRuntime.finalizing != NULL;
103}
104
Nick Coghland6009512014-11-20 21:39:37 +1000105/* Hack to force loading of object files */
106int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
107 PyOS_mystrnicmp; /* Python/pystrcmp.o */
108
109/* PyModule_GetWarningsModule is no longer necessary as of 2.6
110since _warnings is builtin. This API should not be used. */
111PyObject *
112PyModule_GetWarningsModule(void)
113{
114 return PyImport_ImportModule("warnings");
115}
116
Eric Snowc7ec9982017-05-23 23:00:52 -0700117
Eric Snow1abcf672017-05-23 21:46:51 -0700118/* APIs to access the initialization flags
119 *
120 * Can be called prior to Py_Initialize.
121 */
Nick Coghland6009512014-11-20 21:39:37 +1000122
Eric Snow1abcf672017-05-23 21:46:51 -0700123int
124_Py_IsCoreInitialized(void)
125{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600126 return _PyRuntime.core_initialized;
Eric Snow1abcf672017-05-23 21:46:51 -0700127}
Nick Coghland6009512014-11-20 21:39:37 +1000128
129int
130Py_IsInitialized(void)
131{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600132 return _PyRuntime.initialized;
Nick Coghland6009512014-11-20 21:39:37 +1000133}
134
Nick Coghlan6ea41862017-06-11 13:16:15 +1000135
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000136/* Global initializations. Can be undone by Py_FinalizeEx(). Don't
137 call this twice without an intervening Py_FinalizeEx() call. When
Nick Coghland6009512014-11-20 21:39:37 +1000138 initializations fail, a fatal error is issued and the function does
139 not return. On return, the first thread and interpreter state have
140 been created.
141
142 Locking: you must hold the interpreter lock while calling this.
143 (If the lock has not yet been initialized, that's equivalent to
144 having the lock, but you cannot use multiple threads.)
145
146*/
147
Victor Stinner331a6a52019-05-27 16:39:22 +0200148static PyStatus
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400149init_importlib(PyInterpreterState *interp, PyObject *sysmod)
Nick Coghland6009512014-11-20 21:39:37 +1000150{
151 PyObject *importlib;
152 PyObject *impmod;
Nick Coghland6009512014-11-20 21:39:37 +1000153 PyObject *value;
Victor Stinner331a6a52019-05-27 16:39:22 +0200154 int verbose = interp->config.verbose;
Nick Coghland6009512014-11-20 21:39:37 +1000155
156 /* Import _importlib through its frozen version, _frozen_importlib. */
157 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200158 return _PyStatus_ERR("can't import _frozen_importlib");
Nick Coghland6009512014-11-20 21:39:37 +1000159 }
Victor Stinnerc96be812019-05-14 17:34:56 +0200160 else if (verbose) {
Nick Coghland6009512014-11-20 21:39:37 +1000161 PySys_FormatStderr("import _frozen_importlib # frozen\n");
162 }
163 importlib = PyImport_AddModule("_frozen_importlib");
164 if (importlib == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200165 return _PyStatus_ERR("couldn't get _frozen_importlib from sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000166 }
167 interp->importlib = importlib;
168 Py_INCREF(interp->importlib);
169
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300170 interp->import_func = PyDict_GetItemString(interp->builtins, "__import__");
171 if (interp->import_func == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +0200172 return _PyStatus_ERR("__import__ not found");
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300173 Py_INCREF(interp->import_func);
174
Victor Stinnercd6e6942015-09-18 09:11:57 +0200175 /* Import the _imp module */
Benjamin Petersonc65ef772018-01-29 11:33:57 -0800176 impmod = PyInit__imp();
Nick Coghland6009512014-11-20 21:39:37 +1000177 if (impmod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200178 return _PyStatus_ERR("can't import _imp");
Nick Coghland6009512014-11-20 21:39:37 +1000179 }
Victor Stinnerc96be812019-05-14 17:34:56 +0200180 else if (verbose) {
Victor Stinnercd6e6942015-09-18 09:11:57 +0200181 PySys_FormatStderr("import _imp # builtin\n");
Nick Coghland6009512014-11-20 21:39:37 +1000182 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600183 if (_PyImport_SetModuleString("_imp", impmod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200184 return _PyStatus_ERR("can't save _imp to sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000185 }
186
Victor Stinnercd6e6942015-09-18 09:11:57 +0200187 /* Install importlib as the implementation of import */
Nick Coghland6009512014-11-20 21:39:37 +1000188 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
189 if (value == NULL) {
190 PyErr_Print();
Victor Stinner331a6a52019-05-27 16:39:22 +0200191 return _PyStatus_ERR("importlib install failed");
Nick Coghland6009512014-11-20 21:39:37 +1000192 }
193 Py_DECREF(value);
194 Py_DECREF(impmod);
195
Victor Stinner331a6a52019-05-27 16:39:22 +0200196 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000197}
198
Victor Stinner331a6a52019-05-27 16:39:22 +0200199static PyStatus
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400200init_importlib_external(PyInterpreterState *interp)
Eric Snow1abcf672017-05-23 21:46:51 -0700201{
202 PyObject *value;
203 value = PyObject_CallMethod(interp->importlib,
204 "_install_external_importers", "");
205 if (value == NULL) {
206 PyErr_Print();
Victor Stinner331a6a52019-05-27 16:39:22 +0200207 return _PyStatus_ERR("external importer setup failed");
Eric Snow1abcf672017-05-23 21:46:51 -0700208 }
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200209 Py_DECREF(value);
Victor Stinner410b85a2019-05-13 17:12:45 +0200210 return _PyImportZip_Init(interp);
Eric Snow1abcf672017-05-23 21:46:51 -0700211}
Nick Coghland6009512014-11-20 21:39:37 +1000212
Nick Coghlan6ea41862017-06-11 13:16:15 +1000213/* Helper functions to better handle the legacy C locale
214 *
215 * The legacy C locale assumes ASCII as the default text encoding, which
216 * causes problems not only for the CPython runtime, but also other
217 * components like GNU readline.
218 *
219 * Accordingly, when the CLI detects it, it attempts to coerce it to a
220 * more capable UTF-8 based alternative as follows:
221 *
222 * if (_Py_LegacyLocaleDetected()) {
223 * _Py_CoerceLegacyLocale();
224 * }
225 *
226 * See the documentation of the PYTHONCOERCECLOCALE setting for more details.
227 *
228 * Locale coercion also impacts the default error handler for the standard
229 * streams: while the usual default is "strict", the default for the legacy
230 * C locale and for any of the coercion target locales is "surrogateescape".
231 */
232
233int
Victor Stinner0f721472019-05-20 17:16:38 +0200234_Py_LegacyLocaleDetected(int warn)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000235{
236#ifndef MS_WINDOWS
Victor Stinner0f721472019-05-20 17:16:38 +0200237 if (!warn) {
238 const char *locale_override = getenv("LC_ALL");
239 if (locale_override != NULL && *locale_override != '\0') {
240 /* Don't coerce C locale if the LC_ALL environment variable
241 is set */
242 return 0;
243 }
244 }
245
Nick Coghlan6ea41862017-06-11 13:16:15 +1000246 /* On non-Windows systems, the C locale is considered a legacy locale */
Nick Coghlaneb817952017-06-18 12:29:42 +1000247 /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat
248 * the POSIX locale as a simple alias for the C locale, so
249 * we may also want to check for that explicitly.
250 */
Nick Coghlan6ea41862017-06-11 13:16:15 +1000251 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
252 return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
253#else
254 /* Windows uses code pages instead of locales, so no locale is legacy */
255 return 0;
256#endif
257}
258
Nick Coghlaneb817952017-06-18 12:29:42 +1000259static const char *_C_LOCALE_WARNING =
260 "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
261 "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
262 "C.utf8, or UTF-8 (if available) as alternative Unicode-compatible "
263 "locales is recommended.\n";
264
Nick Coghlaneb817952017-06-18 12:29:42 +1000265static void
Victor Stinner43125222019-04-24 18:23:53 +0200266emit_stderr_warning_for_legacy_locale(_PyRuntimeState *runtime)
Nick Coghlaneb817952017-06-18 12:29:42 +1000267{
Victor Stinner331a6a52019-05-27 16:39:22 +0200268 const PyPreConfig *preconfig = &runtime->preconfig;
Victor Stinner0f721472019-05-20 17:16:38 +0200269 if (preconfig->coerce_c_locale_warn && _Py_LegacyLocaleDetected(1)) {
Victor Stinnercf215042018-08-29 22:56:06 +0200270 PySys_FormatStderr("%s", _C_LOCALE_WARNING);
Nick Coghlaneb817952017-06-18 12:29:42 +1000271 }
272}
273
Nick Coghlan6ea41862017-06-11 13:16:15 +1000274typedef struct _CandidateLocale {
275 const char *locale_name; /* The locale to try as a coercion target */
276} _LocaleCoercionTarget;
277
278static _LocaleCoercionTarget _TARGET_LOCALES[] = {
279 {"C.UTF-8"},
280 {"C.utf8"},
Nick Coghlan18974c32017-06-30 00:48:14 +1000281 {"UTF-8"},
Nick Coghlan6ea41862017-06-11 13:16:15 +1000282 {NULL}
283};
284
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200285
286int
287_Py_IsLocaleCoercionTarget(const char *ctype_loc)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000288{
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200289 const _LocaleCoercionTarget *target = NULL;
290 for (target = _TARGET_LOCALES; target->locale_name; target++) {
291 if (strcmp(ctype_loc, target->locale_name) == 0) {
292 return 1;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000293 }
Victor Stinner124b9eb2018-08-29 01:29:06 +0200294 }
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200295 return 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000296}
297
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200298
Nick Coghlan6ea41862017-06-11 13:16:15 +1000299#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100300static const char C_LOCALE_COERCION_WARNING[] =
Nick Coghlan6ea41862017-06-11 13:16:15 +1000301 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale "
302 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n";
303
Victor Stinner0f721472019-05-20 17:16:38 +0200304static int
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200305_coerce_default_locale_settings(int warn, const _LocaleCoercionTarget *target)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000306{
307 const char *newloc = target->locale_name;
308
309 /* Reset locale back to currently configured defaults */
xdegaye1588be62017-11-12 12:45:59 +0100310 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000311
312 /* Set the relevant locale environment variable */
313 if (setenv("LC_CTYPE", newloc, 1)) {
314 fprintf(stderr,
315 "Error setting LC_CTYPE, skipping C locale coercion\n");
Victor Stinner0f721472019-05-20 17:16:38 +0200316 return 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000317 }
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200318 if (warn) {
Victor Stinner94540602017-12-16 04:54:22 +0100319 fprintf(stderr, C_LOCALE_COERCION_WARNING, newloc);
Nick Coghlaneb817952017-06-18 12:29:42 +1000320 }
Nick Coghlan6ea41862017-06-11 13:16:15 +1000321
322 /* Reconfigure with the overridden environment variables */
xdegaye1588be62017-11-12 12:45:59 +0100323 _Py_SetLocaleFromEnv(LC_ALL);
Victor Stinner0f721472019-05-20 17:16:38 +0200324 return 1;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000325}
326#endif
327
Victor Stinner0f721472019-05-20 17:16:38 +0200328int
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200329_Py_CoerceLegacyLocale(int warn)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000330{
Victor Stinner0f721472019-05-20 17:16:38 +0200331 int coerced = 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000332#ifdef PY_COERCE_C_LOCALE
Victor Stinner8ea09112018-09-03 17:05:18 +0200333 char *oldloc = NULL;
334
335 oldloc = _PyMem_RawStrdup(setlocale(LC_CTYPE, NULL));
336 if (oldloc == NULL) {
Victor Stinner0f721472019-05-20 17:16:38 +0200337 return coerced;
Victor Stinner8ea09112018-09-03 17:05:18 +0200338 }
339
Victor Stinner94540602017-12-16 04:54:22 +0100340 const char *locale_override = getenv("LC_ALL");
341 if (locale_override == NULL || *locale_override == '\0') {
342 /* LC_ALL is also not set (or is set to an empty string) */
343 const _LocaleCoercionTarget *target = NULL;
344 for (target = _TARGET_LOCALES; target->locale_name; target++) {
345 const char *new_locale = setlocale(LC_CTYPE,
346 target->locale_name);
347 if (new_locale != NULL) {
Victor Stinnere2510952019-05-02 11:28:57 -0400348#if !defined(_Py_FORCE_UTF8_LOCALE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94540602017-12-16 04:54:22 +0100349 /* Also ensure that nl_langinfo works in this locale */
350 char *codeset = nl_langinfo(CODESET);
351 if (!codeset || *codeset == '\0') {
352 /* CODESET is not set or empty, so skip coercion */
353 new_locale = NULL;
354 _Py_SetLocaleFromEnv(LC_CTYPE);
355 continue;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000356 }
Victor Stinner94540602017-12-16 04:54:22 +0100357#endif
358 /* Successfully configured locale, so make it the default */
Victor Stinner0f721472019-05-20 17:16:38 +0200359 coerced = _coerce_default_locale_settings(warn, target);
Victor Stinner8ea09112018-09-03 17:05:18 +0200360 goto done;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000361 }
362 }
363 }
364 /* No C locale warning here, as Py_Initialize will emit one later */
Victor Stinner8ea09112018-09-03 17:05:18 +0200365
366 setlocale(LC_CTYPE, oldloc);
367
368done:
369 PyMem_RawFree(oldloc);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000370#endif
Victor Stinner0f721472019-05-20 17:16:38 +0200371 return coerced;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000372}
373
xdegaye1588be62017-11-12 12:45:59 +0100374/* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to
375 * isolate the idiosyncrasies of different libc implementations. It reads the
376 * appropriate environment variable and uses its value to select the locale for
377 * 'category'. */
378char *
379_Py_SetLocaleFromEnv(int category)
380{
Victor Stinner353933e2018-11-23 13:08:26 +0100381 char *res;
xdegaye1588be62017-11-12 12:45:59 +0100382#ifdef __ANDROID__
383 const char *locale;
384 const char **pvar;
385#ifdef PY_COERCE_C_LOCALE
386 const char *coerce_c_locale;
387#endif
388 const char *utf8_locale = "C.UTF-8";
389 const char *env_var_set[] = {
390 "LC_ALL",
391 "LC_CTYPE",
392 "LANG",
393 NULL,
394 };
395
396 /* Android setlocale(category, "") doesn't check the environment variables
397 * and incorrectly sets the "C" locale at API 24 and older APIs. We only
398 * check the environment variables listed in env_var_set. */
399 for (pvar=env_var_set; *pvar; pvar++) {
400 locale = getenv(*pvar);
401 if (locale != NULL && *locale != '\0') {
402 if (strcmp(locale, utf8_locale) == 0 ||
403 strcmp(locale, "en_US.UTF-8") == 0) {
404 return setlocale(category, utf8_locale);
405 }
406 return setlocale(category, "C");
407 }
408 }
409
410 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
411 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
412 * Quote from POSIX section "8.2 Internationalization Variables":
413 * "4. If the LANG environment variable is not set or is set to the empty
414 * string, the implementation-defined default locale shall be used." */
415
416#ifdef PY_COERCE_C_LOCALE
417 coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
418 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
419 /* Some other ported code may check the environment variables (e.g. in
420 * extension modules), so we make sure that they match the locale
421 * configuration */
422 if (setenv("LC_CTYPE", utf8_locale, 1)) {
423 fprintf(stderr, "Warning: failed setting the LC_CTYPE "
424 "environment variable to %s\n", utf8_locale);
425 }
426 }
427#endif
Victor Stinner353933e2018-11-23 13:08:26 +0100428 res = setlocale(category, utf8_locale);
429#else /* !defined(__ANDROID__) */
430 res = setlocale(category, "");
431#endif
432 _Py_ResetForceASCII();
433 return res;
xdegaye1588be62017-11-12 12:45:59 +0100434}
435
Nick Coghlan6ea41862017-06-11 13:16:15 +1000436
Eric Snow1abcf672017-05-23 21:46:51 -0700437/* Global initializations. Can be undone by Py_Finalize(). Don't
438 call this twice without an intervening Py_Finalize() call.
439
Victor Stinner331a6a52019-05-27 16:39:22 +0200440 Every call to Py_InitializeFromConfig, Py_Initialize or Py_InitializeEx
Eric Snow1abcf672017-05-23 21:46:51 -0700441 must have a corresponding call to Py_Finalize.
442
443 Locking: you must hold the interpreter lock while calling these APIs.
444 (If the lock has not yet been initialized, that's equivalent to
445 having the lock, but you cannot use multiple threads.)
446
447*/
448
Victor Stinner331a6a52019-05-27 16:39:22 +0200449static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200450pyinit_core_reconfigure(_PyRuntimeState *runtime,
451 PyInterpreterState **interp_p,
Victor Stinner331a6a52019-05-27 16:39:22 +0200452 const PyConfig *config)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200453{
Victor Stinner331a6a52019-05-27 16:39:22 +0200454 PyStatus status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100455 PyThreadState *tstate = _PyThreadState_GET();
456 if (!tstate) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200457 return _PyStatus_ERR("failed to read thread state");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100458 }
459
460 PyInterpreterState *interp = tstate->interp;
461 if (interp == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200462 return _PyStatus_ERR("can't make main interpreter");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100463 }
464 *interp_p = interp;
465
Victor Stinner331a6a52019-05-27 16:39:22 +0200466 _PyConfig_Write(config, runtime);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200467
Victor Stinner331a6a52019-05-27 16:39:22 +0200468 status = _PyConfig_Copy(&interp->config, config);
469 if (_PyStatus_EXCEPTION(status)) {
470 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200471 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200472 config = &interp->config;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200473
Victor Stinner331a6a52019-05-27 16:39:22 +0200474 if (config->_install_importlib) {
475 status = _PyConfig_SetPathConfig(config);
476 if (_PyStatus_EXCEPTION(status)) {
477 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200478 }
479 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200480 return _PyStatus_OK();
Victor Stinner1dc6e392018-07-25 02:49:17 +0200481}
482
483
Victor Stinner331a6a52019-05-27 16:39:22 +0200484static PyStatus
Victor Stinner43125222019-04-24 18:23:53 +0200485pycore_init_runtime(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200486 const PyConfig *config)
Nick Coghland6009512014-11-20 21:39:37 +1000487{
Victor Stinner43125222019-04-24 18:23:53 +0200488 if (runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200489 return _PyStatus_ERR("main interpreter already initialized");
Victor Stinner1dc6e392018-07-25 02:49:17 +0200490 }
Victor Stinnerda273412017-12-15 01:46:02 +0100491
Victor Stinner331a6a52019-05-27 16:39:22 +0200492 _PyConfig_Write(config, runtime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600493
Eric Snow1abcf672017-05-23 21:46:51 -0700494 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
495 * threads behave a little more gracefully at interpreter shutdown.
496 * We clobber it here so the new interpreter can start with a clean
497 * slate.
498 *
499 * However, this may still lead to misbehaviour if there are daemon
500 * threads still hanging around from a previous Py_Initialize/Finalize
501 * pair :(
502 */
Victor Stinner43125222019-04-24 18:23:53 +0200503 runtime->finalizing = NULL;
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600504
Victor Stinner331a6a52019-05-27 16:39:22 +0200505 PyStatus status = _Py_HashRandomization_Init(config);
506 if (_PyStatus_EXCEPTION(status)) {
507 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800508 }
509
Victor Stinner331a6a52019-05-27 16:39:22 +0200510 status = _PyInterpreterState_Enable(runtime);
511 if (_PyStatus_EXCEPTION(status)) {
512 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -0800513 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200514 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100515}
Victor Stinnera7368ac2017-11-15 18:11:45 -0800516
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100517
Victor Stinner331a6a52019-05-27 16:39:22 +0200518static PyStatus
Victor Stinner43125222019-04-24 18:23:53 +0200519pycore_create_interpreter(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200520 const PyConfig *config,
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100521 PyInterpreterState **interp_p)
522{
523 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnerda273412017-12-15 01:46:02 +0100524 if (interp == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200525 return _PyStatus_ERR("can't make main interpreter");
Victor Stinnerda273412017-12-15 01:46:02 +0100526 }
Victor Stinner1dc6e392018-07-25 02:49:17 +0200527 *interp_p = interp;
Victor Stinnerda273412017-12-15 01:46:02 +0100528
Victor Stinner331a6a52019-05-27 16:39:22 +0200529 PyStatus status = _PyConfig_Copy(&interp->config, config);
530 if (_PyStatus_EXCEPTION(status)) {
531 return status;
Victor Stinnerda273412017-12-15 01:46:02 +0100532 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200533 config = &interp->config;
Nick Coghland6009512014-11-20 21:39:37 +1000534
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200535 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +1000536 if (tstate == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +0200537 return _PyStatus_ERR("can't make first thread");
Nick Coghland6009512014-11-20 21:39:37 +1000538 (void) PyThreadState_Swap(tstate);
539
Victor Stinner99fcc612019-04-29 13:04:07 +0200540 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
541 destroying the GIL might fail when it is being referenced from
542 another running thread (see issue #9901).
Nick Coghland6009512014-11-20 21:39:37 +1000543 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000544 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Victor Stinner09532fe2019-05-10 23:39:09 +0200545 _PyEval_FiniThreads(&runtime->ceval);
Victor Stinner2914bb32018-01-29 11:57:45 +0100546
Nick Coghland6009512014-11-20 21:39:37 +1000547 /* Auto-thread-state API */
Victor Stinner0fd2c302019-06-04 03:15:09 +0200548 _PyGILState_Init(runtime, interp, tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000549
Victor Stinner2914bb32018-01-29 11:57:45 +0100550 /* Create the GIL */
551 PyEval_InitThreads();
552
Victor Stinner331a6a52019-05-27 16:39:22 +0200553 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100554}
Nick Coghland6009512014-11-20 21:39:37 +1000555
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100556
Victor Stinner331a6a52019-05-27 16:39:22 +0200557static PyStatus
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100558pycore_init_types(void)
559{
Victor Stinner331a6a52019-05-27 16:39:22 +0200560 PyStatus status = _PyTypes_Init();
561 if (_PyStatus_EXCEPTION(status)) {
562 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100563 }
564
Victor Stinner331a6a52019-05-27 16:39:22 +0200565 status = _PyUnicode_Init();
566 if (_PyStatus_EXCEPTION(status)) {
567 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100568 }
569
570 if (_PyStructSequence_Init() < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200571 return _PyStatus_ERR("can't initialize structseq");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100572 }
573
574 if (!_PyLong_Init()) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200575 return _PyStatus_ERR("can't init longs");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100576 }
Nick Coghland6009512014-11-20 21:39:37 +1000577
Victor Stinner331a6a52019-05-27 16:39:22 +0200578 status = _PyExc_Init();
579 if (_PyStatus_EXCEPTION(status)) {
580 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100581 }
582
583 if (!_PyFloat_Init()) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200584 return _PyStatus_ERR("can't init float");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100585 }
Nick Coghland6009512014-11-20 21:39:37 +1000586
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100587 if (!_PyContext_Init()) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200588 return _PyStatus_ERR("can't init context");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100589 }
Victor Stinneref9d9b62019-05-22 11:28:22 +0200590
Victor Stinner331a6a52019-05-27 16:39:22 +0200591 status = _PyErr_Init();
592 if (_PyStatus_EXCEPTION(status)) {
593 return status;
Victor Stinneref9d9b62019-05-22 11:28:22 +0200594 }
595
Victor Stinner331a6a52019-05-27 16:39:22 +0200596 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100597}
598
599
Victor Stinner331a6a52019-05-27 16:39:22 +0200600static PyStatus
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100601pycore_init_builtins(PyInterpreterState *interp)
602{
603 PyObject *bimod = _PyBuiltin_Init();
604 if (bimod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200605 return _PyStatus_ERR("can't initialize builtins modules");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100606 }
607 _PyImport_FixupBuiltin(bimod, "builtins", interp->modules);
608
609 interp->builtins = PyModule_GetDict(bimod);
610 if (interp->builtins == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200611 return _PyStatus_ERR("can't initialize builtins dict");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100612 }
613 Py_INCREF(interp->builtins);
614
Victor Stinner331a6a52019-05-27 16:39:22 +0200615 PyStatus status = _PyBuiltins_AddExceptions(bimod);
616 if (_PyStatus_EXCEPTION(status)) {
617 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100618 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200619 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100620}
621
622
Victor Stinner331a6a52019-05-27 16:39:22 +0200623static PyStatus
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100624pycore_init_import_warnings(PyInterpreterState *interp, PyObject *sysmod)
625{
Victor Stinner331a6a52019-05-27 16:39:22 +0200626 PyStatus status = _PyImport_Init(interp);
627 if (_PyStatus_EXCEPTION(status)) {
628 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800629 }
Nick Coghland6009512014-11-20 21:39:37 +1000630
Victor Stinner331a6a52019-05-27 16:39:22 +0200631 status = _PyImportHooks_Init();
632 if (_PyStatus_EXCEPTION(status)) {
633 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800634 }
Nick Coghland6009512014-11-20 21:39:37 +1000635
636 /* Initialize _warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100637 if (_PyWarnings_Init() == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200638 return _PyStatus_ERR("can't initialize warnings");
Victor Stinner1f151112017-11-23 10:43:14 +0100639 }
Nick Coghland6009512014-11-20 21:39:37 +1000640
Victor Stinner331a6a52019-05-27 16:39:22 +0200641 if (interp->config._install_importlib) {
642 status = _PyConfig_SetPathConfig(&interp->config);
643 if (_PyStatus_EXCEPTION(status)) {
644 return status;
Victor Stinnerb1147e42018-07-21 02:06:16 +0200645 }
646 }
647
Eric Snow1abcf672017-05-23 21:46:51 -0700648 /* This call sets up builtin and frozen import support */
Victor Stinner331a6a52019-05-27 16:39:22 +0200649 if (interp->config._install_importlib) {
650 status = init_importlib(interp, sysmod);
651 if (_PyStatus_EXCEPTION(status)) {
652 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800653 }
Eric Snow1abcf672017-05-23 21:46:51 -0700654 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200655 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100656}
657
658
Victor Stinner331a6a52019-05-27 16:39:22 +0200659static PyStatus
660pyinit_config(_PyRuntimeState *runtime,
661 PyInterpreterState **interp_p,
662 const PyConfig *config)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100663{
664 PyInterpreterState *interp;
665
Victor Stinner331a6a52019-05-27 16:39:22 +0200666 _PyConfig_Write(config, runtime);
Victor Stinner20004952019-03-26 02:31:11 +0100667
Victor Stinner331a6a52019-05-27 16:39:22 +0200668 PyStatus status = pycore_init_runtime(runtime, config);
669 if (_PyStatus_EXCEPTION(status)) {
670 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100671 }
672
Victor Stinner331a6a52019-05-27 16:39:22 +0200673 status = pycore_create_interpreter(runtime, config, &interp);
674 if (_PyStatus_EXCEPTION(status)) {
675 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100676 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200677 config = &interp->config;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100678 *interp_p = interp;
679
Victor Stinner331a6a52019-05-27 16:39:22 +0200680 status = pycore_init_types();
681 if (_PyStatus_EXCEPTION(status)) {
682 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100683 }
684
685 PyObject *sysmod;
Victor Stinner0fd2c302019-06-04 03:15:09 +0200686 status = _PySys_Create(runtime, interp, &sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200687 if (_PyStatus_EXCEPTION(status)) {
688 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100689 }
690
Victor Stinner331a6a52019-05-27 16:39:22 +0200691 status = pycore_init_builtins(interp);
692 if (_PyStatus_EXCEPTION(status)) {
693 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100694 }
695
Victor Stinner331a6a52019-05-27 16:39:22 +0200696 status = pycore_init_import_warnings(interp, sysmod);
697 if (_PyStatus_EXCEPTION(status)) {
698 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100699 }
Eric Snow1abcf672017-05-23 21:46:51 -0700700
701 /* Only when we get here is the runtime core fully initialized */
Victor Stinner43125222019-04-24 18:23:53 +0200702 runtime->core_initialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200703 return _PyStatus_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700704}
705
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100706
Victor Stinner331a6a52019-05-27 16:39:22 +0200707PyStatus
708_Py_PreInitializeFromPyArgv(const PyPreConfig *src_config, const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100709{
Victor Stinner331a6a52019-05-27 16:39:22 +0200710 PyStatus status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100711
Victor Stinner6d1c4672019-05-20 11:02:00 +0200712 if (src_config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200713 return _PyStatus_ERR("preinitialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +0200714 }
715
Victor Stinner331a6a52019-05-27 16:39:22 +0200716 status = _PyRuntime_Initialize();
717 if (_PyStatus_EXCEPTION(status)) {
718 return status;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100719 }
Victor Stinner43125222019-04-24 18:23:53 +0200720 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100721
Victor Stinner47bbab92019-09-18 14:10:16 +0200722 if (runtime->preinitialized) {
Victor Stinnerf72346c2019-03-25 17:54:58 +0100723 /* If it's already configured: ignored the new configuration */
Victor Stinner331a6a52019-05-27 16:39:22 +0200724 return _PyStatus_OK();
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100725 }
726
Victor Stinner47bbab92019-09-18 14:10:16 +0200727 /* Note: preinitialized remains 1 on error, it is only set to 0
728 at exit on success. */
729 runtime->preinitializing = 1;
730
Victor Stinner331a6a52019-05-27 16:39:22 +0200731 PyPreConfig config;
Victor Stinner6d1c4672019-05-20 11:02:00 +0200732 _PyPreConfig_InitFromPreConfig(&config, src_config);
Victor Stinnerf72346c2019-03-25 17:54:58 +0100733
Victor Stinner331a6a52019-05-27 16:39:22 +0200734 status = _PyPreConfig_Read(&config, args);
735 if (_PyStatus_EXCEPTION(status)) {
736 return status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100737 }
738
Victor Stinner331a6a52019-05-27 16:39:22 +0200739 status = _PyPreConfig_Write(&config);
740 if (_PyStatus_EXCEPTION(status)) {
741 return status;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100742 }
743
Victor Stinner47bbab92019-09-18 14:10:16 +0200744 runtime->preinitializing = 0;
745 runtime->preinitialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200746 return _PyStatus_OK();
Victor Stinnerf72346c2019-03-25 17:54:58 +0100747}
748
Victor Stinner70005ac2019-05-02 15:25:34 -0400749
Victor Stinner331a6a52019-05-27 16:39:22 +0200750PyStatus
751Py_PreInitializeFromBytesArgs(const PyPreConfig *src_config, Py_ssize_t argc, char **argv)
Victor Stinnerf72346c2019-03-25 17:54:58 +0100752{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100753 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400754 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100755}
756
757
Victor Stinner331a6a52019-05-27 16:39:22 +0200758PyStatus
759Py_PreInitializeFromArgs(const PyPreConfig *src_config, Py_ssize_t argc, wchar_t **argv)
Victor Stinner20004952019-03-26 02:31:11 +0100760{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100761 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400762 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinner20004952019-03-26 02:31:11 +0100763}
764
765
Victor Stinner331a6a52019-05-27 16:39:22 +0200766PyStatus
767Py_PreInitialize(const PyPreConfig *src_config)
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100768{
Victor Stinner70005ac2019-05-02 15:25:34 -0400769 return _Py_PreInitializeFromPyArgv(src_config, NULL);
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100770}
771
772
Victor Stinner331a6a52019-05-27 16:39:22 +0200773PyStatus
774_Py_PreInitializeFromConfig(const PyConfig *config,
775 const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100776{
Victor Stinner331a6a52019-05-27 16:39:22 +0200777 assert(config != NULL);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200778
Victor Stinner331a6a52019-05-27 16:39:22 +0200779 PyStatus status = _PyRuntime_Initialize();
780 if (_PyStatus_EXCEPTION(status)) {
781 return status;
Victor Stinner6d1c4672019-05-20 11:02:00 +0200782 }
783 _PyRuntimeState *runtime = &_PyRuntime;
784
Victor Stinner47bbab92019-09-18 14:10:16 +0200785 if (runtime->preinitialized) {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200786 /* Already initialized: do nothing */
Victor Stinner331a6a52019-05-27 16:39:22 +0200787 return _PyStatus_OK();
Victor Stinner70005ac2019-05-02 15:25:34 -0400788 }
Victor Stinnercab5d072019-05-17 19:01:14 +0200789
Victor Stinner331a6a52019-05-27 16:39:22 +0200790 PyPreConfig preconfig;
791 _PyPreConfig_InitFromConfig(&preconfig, config);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200792
Victor Stinner331a6a52019-05-27 16:39:22 +0200793 if (!config->parse_argv) {
794 return Py_PreInitialize(&preconfig);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200795 }
796 else if (args == NULL) {
Victor Stinnercab5d072019-05-17 19:01:14 +0200797 _PyArgv config_args = {
798 .use_bytes_argv = 0,
Victor Stinner331a6a52019-05-27 16:39:22 +0200799 .argc = config->argv.length,
800 .wchar_argv = config->argv.items};
Victor Stinner6d1c4672019-05-20 11:02:00 +0200801 return _Py_PreInitializeFromPyArgv(&preconfig, &config_args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200802 }
803 else {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200804 return _Py_PreInitializeFromPyArgv(&preconfig, args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200805 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100806}
807
808
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100809/* Begin interpreter initialization
810 *
811 * On return, the first thread and interpreter state have been created,
812 * but the compiler, signal handling, multithreading and
813 * multiple interpreter support, and codec infrastructure are not yet
814 * available.
815 *
816 * The import system will support builtin and frozen modules only.
817 * The only supported io is writing to sys.stderr
818 *
819 * If any operation invoked by this function fails, a fatal error is
820 * issued and the function does not return.
821 *
822 * Any code invoked from this function should *not* assume it has access
823 * to the Python C API (unless the API is explicitly listed as being
824 * safe to call without calling Py_Initialize first)
825 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200826static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200827pyinit_core(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200828 const PyConfig *src_config,
Victor Stinner5edcf262019-05-23 00:57:57 +0200829 PyInterpreterState **interp_p)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200830{
Victor Stinner331a6a52019-05-27 16:39:22 +0200831 PyStatus status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200832
Victor Stinner331a6a52019-05-27 16:39:22 +0200833 status = _Py_PreInitializeFromConfig(src_config, NULL);
834 if (_PyStatus_EXCEPTION(status)) {
835 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200836 }
837
Victor Stinner331a6a52019-05-27 16:39:22 +0200838 PyConfig config;
839 _PyConfig_InitCompatConfig(&config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200840
Victor Stinner331a6a52019-05-27 16:39:22 +0200841 status = _PyConfig_Copy(&config, src_config);
842 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200843 goto done;
844 }
845
Victor Stinner331a6a52019-05-27 16:39:22 +0200846 status = PyConfig_Read(&config);
847 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200848 goto done;
849 }
850
851 if (!runtime->core_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200852 status = pyinit_config(runtime, interp_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200853 }
854 else {
Victor Stinner331a6a52019-05-27 16:39:22 +0200855 status = pyinit_core_reconfigure(runtime, interp_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200856 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200857 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200858 goto done;
859 }
860
861done:
Victor Stinner331a6a52019-05-27 16:39:22 +0200862 PyConfig_Clear(&config);
863 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200864}
865
Victor Stinner5ac27a52019-03-27 13:40:14 +0100866
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200867/* Py_Initialize() has already been called: update the main interpreter
868 configuration. Example of bpo-34008: Py_Main() called after
869 Py_Initialize(). */
Victor Stinner331a6a52019-05-27 16:39:22 +0200870static PyStatus
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100871_Py_ReconfigureMainInterpreter(PyInterpreterState *interp)
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200872{
Victor Stinner331a6a52019-05-27 16:39:22 +0200873 PyConfig *config = &interp->config;
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100874
Victor Stinner331a6a52019-05-27 16:39:22 +0200875 PyObject *argv = _PyWideStringList_AsList(&config->argv);
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100876 if (argv == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200877 return _PyStatus_NO_MEMORY(); \
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100878 }
879
880 int res = PyDict_SetItemString(interp->sysdict, "argv", argv);
881 Py_DECREF(argv);
882 if (res < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200883 return _PyStatus_ERR("fail to set sys.argv");
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200884 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200885 return _PyStatus_OK();
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200886}
887
Eric Snowc7ec9982017-05-23 23:00:52 -0700888/* Update interpreter state based on supplied configuration settings
889 *
890 * After calling this function, most of the restrictions on the interpreter
891 * are lifted. The only remaining incomplete settings are those related
892 * to the main module (sys.argv[0], __main__ metadata)
893 *
894 * Calling this when the interpreter is not initializing, is already
895 * initialized or without a valid current thread state is a fatal error.
896 * Other errors should be reported as normal Python exceptions with a
897 * non-zero return code.
898 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200899static PyStatus
Victor Stinner0fd2c302019-06-04 03:15:09 +0200900pyinit_main(_PyRuntimeState *runtime, PyInterpreterState *interp)
Eric Snow1abcf672017-05-23 21:46:51 -0700901{
Victor Stinner43125222019-04-24 18:23:53 +0200902 if (!runtime->core_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200903 return _PyStatus_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700904 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700905
Victor Stinner1dc6e392018-07-25 02:49:17 +0200906 /* Configure the main interpreter */
Victor Stinner331a6a52019-05-27 16:39:22 +0200907 PyConfig *config = &interp->config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700908
Victor Stinner43125222019-04-24 18:23:53 +0200909 if (runtime->initialized) {
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100910 return _Py_ReconfigureMainInterpreter(interp);
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200911 }
912
Victor Stinner331a6a52019-05-27 16:39:22 +0200913 if (!config->_install_importlib) {
Eric Snow1abcf672017-05-23 21:46:51 -0700914 /* Special mode for freeze_importlib: run with no import system
915 *
916 * This means anything which needs support from extension modules
917 * or pure Python code in the standard library won't work.
918 */
Victor Stinner43125222019-04-24 18:23:53 +0200919 runtime->initialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200920 return _PyStatus_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700921 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100922
Victor Stinner33c377e2017-12-05 15:12:41 +0100923 if (_PyTime_Init() < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200924 return _PyStatus_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100925 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200926
Victor Stinner0fd2c302019-06-04 03:15:09 +0200927 if (_PySys_InitMain(runtime, interp) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200928 return _PyStatus_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100929 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800930
Victor Stinner331a6a52019-05-27 16:39:22 +0200931 PyStatus status = init_importlib_external(interp);
932 if (_PyStatus_EXCEPTION(status)) {
933 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800934 }
Nick Coghland6009512014-11-20 21:39:37 +1000935
936 /* initialize the faulthandler module */
Victor Stinner331a6a52019-05-27 16:39:22 +0200937 status = _PyFaulthandler_Init(config->faulthandler);
938 if (_PyStatus_EXCEPTION(status)) {
939 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800940 }
Nick Coghland6009512014-11-20 21:39:37 +1000941
Victor Stinner331a6a52019-05-27 16:39:22 +0200942 status = _PyUnicode_InitEncodings(interp);
943 if (_PyStatus_EXCEPTION(status)) {
944 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800945 }
Nick Coghland6009512014-11-20 21:39:37 +1000946
Victor Stinner331a6a52019-05-27 16:39:22 +0200947 if (config->install_signal_handlers) {
948 status = init_signals();
949 if (_PyStatus_EXCEPTION(status)) {
950 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800951 }
952 }
Nick Coghland6009512014-11-20 21:39:37 +1000953
Victor Stinner331a6a52019-05-27 16:39:22 +0200954 if (_PyTraceMalloc_Init(config->tracemalloc) < 0) {
955 return _PyStatus_ERR("can't initialize tracemalloc");
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200956 }
Nick Coghland6009512014-11-20 21:39:37 +1000957
Victor Stinner331a6a52019-05-27 16:39:22 +0200958 status = add_main_module(interp);
959 if (_PyStatus_EXCEPTION(status)) {
960 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800961 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800962
Victor Stinner331a6a52019-05-27 16:39:22 +0200963 status = init_sys_streams(interp);
964 if (_PyStatus_EXCEPTION(status)) {
965 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800966 }
Nick Coghland6009512014-11-20 21:39:37 +1000967
968 /* Initialize warnings. */
Victor Stinner37cd9822018-11-16 11:55:35 +0100969 PyObject *warnoptions = PySys_GetObject("warnoptions");
970 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
Victor Stinner5d862462017-12-19 11:35:58 +0100971 {
Nick Coghland6009512014-11-20 21:39:37 +1000972 PyObject *warnings_module = PyImport_ImportModule("warnings");
973 if (warnings_module == NULL) {
974 fprintf(stderr, "'import warnings' failed; traceback:\n");
975 PyErr_Print();
976 }
977 Py_XDECREF(warnings_module);
978 }
979
Victor Stinner43125222019-04-24 18:23:53 +0200980 runtime->initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700981
Victor Stinner331a6a52019-05-27 16:39:22 +0200982 if (config->site_import) {
983 status = init_import_size(); /* Module site */
984 if (_PyStatus_EXCEPTION(status)) {
985 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800986 }
987 }
Victor Stinnercf215042018-08-29 22:56:06 +0200988
989#ifndef MS_WINDOWS
Victor Stinner43125222019-04-24 18:23:53 +0200990 emit_stderr_warning_for_legacy_locale(runtime);
Victor Stinnercf215042018-08-29 22:56:06 +0200991#endif
992
Victor Stinner331a6a52019-05-27 16:39:22 +0200993 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000994}
995
Victor Stinner9ef5dca2019-05-16 17:38:16 +0200996
Victor Stinner331a6a52019-05-27 16:39:22 +0200997PyStatus
Victor Stinner9ef5dca2019-05-16 17:38:16 +0200998_Py_InitializeMain(void)
999{
Victor Stinner331a6a52019-05-27 16:39:22 +02001000 PyStatus status = _PyRuntime_Initialize();
1001 if (_PyStatus_EXCEPTION(status)) {
1002 return status;
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001003 }
1004 _PyRuntimeState *runtime = &_PyRuntime;
1005 PyInterpreterState *interp = _PyRuntimeState_GetThreadState(runtime)->interp;
1006
Victor Stinner0fd2c302019-06-04 03:15:09 +02001007 return pyinit_main(runtime, interp);
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001008}
1009
1010
Victor Stinner331a6a52019-05-27 16:39:22 +02001011PyStatus
1012Py_InitializeFromConfig(const PyConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -07001013{
Victor Stinner6d1c4672019-05-20 11:02:00 +02001014 if (config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001015 return _PyStatus_ERR("initialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +02001016 }
1017
Victor Stinner331a6a52019-05-27 16:39:22 +02001018 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001019
Victor Stinner331a6a52019-05-27 16:39:22 +02001020 status = _PyRuntime_Initialize();
1021 if (_PyStatus_EXCEPTION(status)) {
1022 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001023 }
1024 _PyRuntimeState *runtime = &_PyRuntime;
1025
1026 PyInterpreterState *interp = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001027 status = pyinit_core(runtime, config, &interp);
1028 if (_PyStatus_EXCEPTION(status)) {
1029 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001030 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001031 config = &interp->config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +01001032
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001033 if (config->_init_main) {
Victor Stinner0fd2c302019-06-04 03:15:09 +02001034 status = pyinit_main(runtime, interp);
Victor Stinner331a6a52019-05-27 16:39:22 +02001035 if (_PyStatus_EXCEPTION(status)) {
1036 return status;
Victor Stinner484f20d2019-03-27 02:04:16 +01001037 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001038 }
Victor Stinner484f20d2019-03-27 02:04:16 +01001039
Victor Stinner331a6a52019-05-27 16:39:22 +02001040 return _PyStatus_OK();
Victor Stinner5ac27a52019-03-27 13:40:14 +01001041}
1042
1043
Eric Snow1abcf672017-05-23 21:46:51 -07001044void
Nick Coghland6009512014-11-20 21:39:37 +10001045Py_InitializeEx(int install_sigs)
1046{
Victor Stinner331a6a52019-05-27 16:39:22 +02001047 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001048
Victor Stinner331a6a52019-05-27 16:39:22 +02001049 status = _PyRuntime_Initialize();
1050 if (_PyStatus_EXCEPTION(status)) {
1051 Py_ExitStatusException(status);
Victor Stinner43125222019-04-24 18:23:53 +02001052 }
1053 _PyRuntimeState *runtime = &_PyRuntime;
1054
1055 if (runtime->initialized) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001056 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
1057 return;
1058 }
1059
Victor Stinner331a6a52019-05-27 16:39:22 +02001060 PyConfig config;
1061 _PyConfig_InitCompatConfig(&config);
Victor Stinner1dc6e392018-07-25 02:49:17 +02001062 config.install_signal_handlers = install_sigs;
1063
Victor Stinner331a6a52019-05-27 16:39:22 +02001064 status = Py_InitializeFromConfig(&config);
1065 if (_PyStatus_EXCEPTION(status)) {
1066 Py_ExitStatusException(status);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001067 }
Nick Coghland6009512014-11-20 21:39:37 +10001068}
1069
1070void
1071Py_Initialize(void)
1072{
1073 Py_InitializeEx(1);
1074}
1075
1076
1077#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001078extern void _Py_dump_counts(FILE*);
Nick Coghland6009512014-11-20 21:39:37 +10001079#endif
1080
1081/* Flush stdout and stderr */
1082
1083static int
1084file_is_closed(PyObject *fobj)
1085{
1086 int r;
1087 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1088 if (tmp == NULL) {
1089 PyErr_Clear();
1090 return 0;
1091 }
1092 r = PyObject_IsTrue(tmp);
1093 Py_DECREF(tmp);
1094 if (r < 0)
1095 PyErr_Clear();
1096 return r > 0;
1097}
1098
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001099static int
Nick Coghland6009512014-11-20 21:39:37 +10001100flush_std_files(void)
1101{
1102 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1103 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1104 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001105 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001106
1107 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001108 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001109 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001110 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001111 status = -1;
1112 }
Nick Coghland6009512014-11-20 21:39:37 +10001113 else
1114 Py_DECREF(tmp);
1115 }
1116
1117 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001118 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001119 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001120 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001121 status = -1;
1122 }
Nick Coghland6009512014-11-20 21:39:37 +10001123 else
1124 Py_DECREF(tmp);
1125 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001126
1127 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001128}
1129
1130/* Undo the effect of Py_Initialize().
1131
1132 Beware: if multiple interpreter and/or thread states exist, these
1133 are not wiped out; only the current thread and interpreter state
1134 are deleted. But since everything else is deleted, those other
1135 interpreter and thread states should no longer be used.
1136
1137 (XXX We should do better, e.g. wipe out all interpreters and
1138 threads.)
1139
1140 Locking: as above.
1141
1142*/
1143
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001144int
1145Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001146{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001147 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001148
Victor Stinner8e91c242019-04-24 17:24:01 +02001149 _PyRuntimeState *runtime = &_PyRuntime;
1150 if (!runtime->initialized) {
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001151 return status;
Victor Stinner8e91c242019-04-24 17:24:01 +02001152 }
Nick Coghland6009512014-11-20 21:39:37 +10001153
Eric Snow842a2f02019-03-15 15:47:51 -06001154 // Wrap up existing "threading"-module-created, non-daemon threads.
Nick Coghland6009512014-11-20 21:39:37 +10001155 wait_for_thread_shutdown();
1156
Eric Snow842a2f02019-03-15 15:47:51 -06001157 // Make any remaining pending calls.
Victor Stinnere225beb2019-06-03 18:14:24 +02001158 _Py_FinishPendingCalls(runtime);
1159
1160 /* Get current thread state and interpreter pointer */
1161 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
1162 PyInterpreterState *interp = tstate->interp;
Victor Stinner8e91c242019-04-24 17:24:01 +02001163
Nick Coghland6009512014-11-20 21:39:37 +10001164 /* The interpreter is still entirely intact at this point, and the
1165 * exit funcs may be relying on that. In particular, if some thread
1166 * or exit func is still waiting to do an import, the import machinery
1167 * expects Py_IsInitialized() to return true. So don't say the
Eric Snow842a2f02019-03-15 15:47:51 -06001168 * runtime is uninitialized until after the exit funcs have run.
Nick Coghland6009512014-11-20 21:39:37 +10001169 * Note that Threading.py uses an exit func to do a join on all the
1170 * threads created thru it, so this also protects pending imports in
1171 * the threads created via Threading.
1172 */
Nick Coghland6009512014-11-20 21:39:37 +10001173
Marcel Plch776407f2017-12-20 11:17:58 +01001174 call_py_exitfuncs(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001175
Victor Stinnerda273412017-12-15 01:46:02 +01001176 /* Copy the core config, PyInterpreterState_Delete() free
1177 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001178#ifdef Py_REF_DEBUG
Victor Stinner331a6a52019-05-27 16:39:22 +02001179 int show_ref_count = interp->config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001180#endif
1181#ifdef Py_TRACE_REFS
Victor Stinner331a6a52019-05-27 16:39:22 +02001182 int dump_refs = interp->config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001183#endif
1184#ifdef WITH_PYMALLOC
Victor Stinner331a6a52019-05-27 16:39:22 +02001185 int malloc_stats = interp->config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001186#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001187
Nick Coghland6009512014-11-20 21:39:37 +10001188 /* Remaining threads (e.g. daemon threads) will automatically exit
1189 after taking the GIL (in PyEval_RestoreThread()). */
Victor Stinner8e91c242019-04-24 17:24:01 +02001190 runtime->finalizing = tstate;
1191 runtime->initialized = 0;
1192 runtime->core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001193
Victor Stinnere0deff32015-03-24 13:46:18 +01001194 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001195 if (flush_std_files() < 0) {
1196 status = -1;
1197 }
Nick Coghland6009512014-11-20 21:39:37 +10001198
1199 /* Disable signal handling */
1200 PyOS_FiniInterrupts();
1201
1202 /* Collect garbage. This may call finalizers; it's nice to call these
1203 * before all modules are destroyed.
1204 * XXX If a __del__ or weakref callback is triggered here, and tries to
1205 * XXX import a module, bad things can happen, because Python no
1206 * XXX longer believes it's initialized.
1207 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1208 * XXX is easy to provoke that way. I've also seen, e.g.,
1209 * XXX Exception exceptions.ImportError: 'No module named sha'
1210 * XXX in <function callback at 0x008F5718> ignored
1211 * XXX but I'm unclear on exactly how that one happens. In any case,
1212 * XXX I haven't seen a real-life report of either of these.
1213 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001214 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001215#ifdef COUNT_ALLOCS
1216 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1217 each collection might release some types from the type
1218 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001219 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001220 /* nothing */;
1221#endif
Eric Snowdae02762017-09-14 00:35:58 -07001222
Steve Dowerb82e17e2019-05-23 08:45:22 -07001223 /* Clear all loghooks */
1224 /* We want minimal exposure of this function, so define the extern
1225 * here. The linker should discover the correct function without
1226 * exporting a symbol. */
1227 extern void _PySys_ClearAuditHooks(void);
1228 _PySys_ClearAuditHooks();
1229
Nick Coghland6009512014-11-20 21:39:37 +10001230 /* Destroy all modules */
1231 PyImport_Cleanup();
1232
Inada Naoki91234a12019-06-03 21:30:58 +09001233 /* Print debug stats if any */
1234 _PyEval_Fini();
1235
Victor Stinnere0deff32015-03-24 13:46:18 +01001236 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001237 if (flush_std_files() < 0) {
1238 status = -1;
1239 }
Nick Coghland6009512014-11-20 21:39:37 +10001240
1241 /* Collect final garbage. This disposes of cycles created by
1242 * class definitions, for example.
1243 * XXX This is disabled because it caused too many problems. If
1244 * XXX a __del__ or weakref callback triggers here, Python code has
1245 * XXX a hard time running, because even the sys module has been
1246 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1247 * XXX One symptom is a sequence of information-free messages
1248 * XXX coming from threads (if a __del__ or callback is invoked,
1249 * XXX other threads can execute too, and any exception they encounter
1250 * XXX triggers a comedy of errors as subsystem after subsystem
1251 * XXX fails to find what it *expects* to find in sys to help report
1252 * XXX the exception and consequent unexpected failures). I've also
1253 * XXX seen segfaults then, after adding print statements to the
1254 * XXX Python code getting called.
1255 */
1256#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001257 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001258#endif
1259
1260 /* Disable tracemalloc after all Python objects have been destroyed,
1261 so it is possible to use tracemalloc in objects destructor. */
1262 _PyTraceMalloc_Fini();
1263
1264 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1265 _PyImport_Fini();
1266
1267 /* Cleanup typeobject.c's internal caches. */
1268 _PyType_Fini();
1269
1270 /* unload faulthandler module */
1271 _PyFaulthandler_Fini();
1272
1273 /* Debugging stuff */
1274#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001275 _Py_dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001276#endif
1277 /* dump hash stats */
1278 _PyHash_Fini();
1279
Eric Snowdae02762017-09-14 00:35:58 -07001280#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001281 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001282 _PyDebug_PrintTotalRefs();
1283 }
Eric Snowdae02762017-09-14 00:35:58 -07001284#endif
Nick Coghland6009512014-11-20 21:39:37 +10001285
1286#ifdef Py_TRACE_REFS
1287 /* Display all objects still alive -- this can invoke arbitrary
1288 * __repr__ overrides, so requires a mostly-intact interpreter.
1289 * Alas, a lot of stuff may still be alive now that will be cleaned
1290 * up later.
1291 */
Victor Stinnerda273412017-12-15 01:46:02 +01001292 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001293 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001294 }
Nick Coghland6009512014-11-20 21:39:37 +10001295#endif /* Py_TRACE_REFS */
1296
1297 /* Clear interpreter state and all thread states. */
1298 PyInterpreterState_Clear(interp);
1299
1300 /* Now we decref the exception classes. After this point nothing
1301 can raise an exception. That's okay, because each Fini() method
1302 below has been checked to make sure no exceptions are ever
1303 raised.
1304 */
1305
1306 _PyExc_Fini();
1307
1308 /* Sundry finalizers */
1309 PyMethod_Fini();
1310 PyFrame_Fini();
1311 PyCFunction_Fini();
1312 PyTuple_Fini();
1313 PyList_Fini();
1314 PySet_Fini();
1315 PyBytes_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001316 PyLong_Fini();
1317 PyFloat_Fini();
1318 PyDict_Fini();
1319 PySlice_Fini();
Victor Stinner8e91c242019-04-24 17:24:01 +02001320 _PyGC_Fini(runtime);
Eric Snow86ea5812019-05-10 13:29:55 -04001321 _PyWarnings_Fini(interp);
Eric Snow6b4be192017-05-22 21:36:03 -07001322 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001323 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001324 PyAsyncGen_Fini();
Yury Selivanovf23746a2018-01-22 19:11:18 -05001325 _PyContext_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001326
1327 /* Cleanup Unicode implementation */
1328 _PyUnicode_Fini();
1329
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001330 _Py_ClearFileSystemEncoding();
Nick Coghland6009512014-11-20 21:39:37 +10001331
1332 /* XXX Still allocated:
1333 - various static ad-hoc pointers to interned strings
1334 - int and float free list blocks
1335 - whatever various modules and libraries allocate
1336 */
1337
1338 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1339
1340 /* Cleanup auto-thread-state */
Victor Stinner8e91c242019-04-24 17:24:01 +02001341 _PyGILState_Fini(runtime);
Nick Coghland6009512014-11-20 21:39:37 +10001342
1343 /* Delete current thread. After this, many C API calls become crashy. */
1344 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001345
Nick Coghland6009512014-11-20 21:39:37 +10001346 PyInterpreterState_Delete(interp);
1347
1348#ifdef Py_TRACE_REFS
1349 /* Display addresses (& refcnts) of all objects still alive.
1350 * An address can be used to find the repr of the object, printed
1351 * above by _Py_PrintReferences.
1352 */
Victor Stinnerda273412017-12-15 01:46:02 +01001353 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001354 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001355 }
Nick Coghland6009512014-11-20 21:39:37 +10001356#endif /* Py_TRACE_REFS */
Victor Stinner34be807c2016-03-14 12:04:26 +01001357#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001358 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001359 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be807c2016-03-14 12:04:26 +01001360 }
Nick Coghland6009512014-11-20 21:39:37 +10001361#endif
1362
Victor Stinner8e91c242019-04-24 17:24:01 +02001363 call_ll_exitfuncs(runtime);
Victor Stinner9316ee42017-11-25 03:17:57 +01001364
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001365 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001366 return status;
1367}
1368
1369void
1370Py_Finalize(void)
1371{
1372 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001373}
1374
1375/* Create and initialize a new interpreter and thread, and return the
1376 new thread. This requires that Py_Initialize() has been called
1377 first.
1378
1379 Unsuccessful initialization yields a NULL pointer. Note that *no*
1380 exception information is available even in this case -- the
1381 exception information is held in the thread, and there is no
1382 thread.
1383
1384 Locking: as above.
1385
1386*/
1387
Victor Stinner331a6a52019-05-27 16:39:22 +02001388static PyStatus
Victor Stinnera7368ac2017-11-15 18:11:45 -08001389new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001390{
Victor Stinner331a6a52019-05-27 16:39:22 +02001391 PyStatus status;
Nick Coghland6009512014-11-20 21:39:37 +10001392
Victor Stinner331a6a52019-05-27 16:39:22 +02001393 status = _PyRuntime_Initialize();
1394 if (_PyStatus_EXCEPTION(status)) {
1395 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001396 }
1397 _PyRuntimeState *runtime = &_PyRuntime;
1398
1399 if (!runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001400 return _PyStatus_ERR("Py_Initialize must be called first");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001401 }
Nick Coghland6009512014-11-20 21:39:37 +10001402
Victor Stinner8a1be612016-03-14 22:07:55 +01001403 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1404 interpreters: disable PyGILState_Check(). */
1405 _PyGILState_check_enabled = 0;
1406
Victor Stinner43125222019-04-24 18:23:53 +02001407 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001408 if (interp == NULL) {
1409 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001410 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001411 }
Nick Coghland6009512014-11-20 21:39:37 +10001412
Victor Stinner43125222019-04-24 18:23:53 +02001413 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001414 if (tstate == NULL) {
1415 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001416 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001417 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001418 }
1419
Victor Stinner43125222019-04-24 18:23:53 +02001420 PyThreadState *save_tstate = PyThreadState_Swap(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001421
Eric Snow1abcf672017-05-23 21:46:51 -07001422 /* Copy the current interpreter config into the new interpreter */
Victor Stinner331a6a52019-05-27 16:39:22 +02001423 PyConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001424 if (save_tstate != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001425 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001426 } else {
1427 /* No current thread state, copy from the main interpreter */
1428 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinner331a6a52019-05-27 16:39:22 +02001429 config = &main_interp->config;
Victor Stinnerda273412017-12-15 01:46:02 +01001430 }
1431
Victor Stinner331a6a52019-05-27 16:39:22 +02001432 status = _PyConfig_Copy(&interp->config, config);
1433 if (_PyStatus_EXCEPTION(status)) {
1434 return status;
Victor Stinnerda273412017-12-15 01:46:02 +01001435 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001436 config = &interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001437
Victor Stinner331a6a52019-05-27 16:39:22 +02001438 status = _PyExc_Init();
1439 if (_PyStatus_EXCEPTION(status)) {
1440 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001441 }
1442
Victor Stinner331a6a52019-05-27 16:39:22 +02001443 status = _PyErr_Init();
1444 if (_PyStatus_EXCEPTION(status)) {
1445 return status;
Victor Stinneref9d9b62019-05-22 11:28:22 +02001446 }
1447
1448
Nick Coghland6009512014-11-20 21:39:37 +10001449 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001450 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001451 if (modules == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001452 return _PyStatus_ERR("can't make modules dictionary");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001453 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001454 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001455
Victor Stinner43125222019-04-24 18:23:53 +02001456 PyObject *sysmod = _PyImport_FindBuiltin("sys", modules);
Eric Snowd393c1b2017-09-14 12:18:12 -06001457 if (sysmod != NULL) {
1458 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinner43125222019-04-24 18:23:53 +02001459 if (interp->sysdict == NULL) {
Eric Snowd393c1b2017-09-14 12:18:12 -06001460 goto handle_error;
Victor Stinner43125222019-04-24 18:23:53 +02001461 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001462 Py_INCREF(interp->sysdict);
1463 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner0fd2c302019-06-04 03:15:09 +02001464 if (_PySys_InitMain(runtime, interp) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001465 return _PyStatus_ERR("can't finish initializing sys");
Victor Stinnerab672812019-01-23 15:04:40 +01001466 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001467 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001468 else if (PyErr_Occurred()) {
1469 goto handle_error;
1470 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001471
Victor Stinner43125222019-04-24 18:23:53 +02001472 PyObject *bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001473 if (bimod != NULL) {
1474 interp->builtins = PyModule_GetDict(bimod);
1475 if (interp->builtins == NULL)
1476 goto handle_error;
1477 Py_INCREF(interp->builtins);
1478 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001479 else if (PyErr_Occurred()) {
1480 goto handle_error;
1481 }
Nick Coghland6009512014-11-20 21:39:37 +10001482
Nick Coghland6009512014-11-20 21:39:37 +10001483 if (bimod != NULL && sysmod != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001484 status = _PyBuiltins_AddExceptions(bimod);
1485 if (_PyStatus_EXCEPTION(status)) {
1486 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001487 }
Nick Coghland6009512014-11-20 21:39:37 +10001488
Victor Stinner331a6a52019-05-27 16:39:22 +02001489 status = _PySys_SetPreliminaryStderr(interp->sysdict);
1490 if (_PyStatus_EXCEPTION(status)) {
1491 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001492 }
Nick Coghland6009512014-11-20 21:39:37 +10001493
Victor Stinner331a6a52019-05-27 16:39:22 +02001494 status = _PyImportHooks_Init();
1495 if (_PyStatus_EXCEPTION(status)) {
1496 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001497 }
Nick Coghland6009512014-11-20 21:39:37 +10001498
Victor Stinner331a6a52019-05-27 16:39:22 +02001499 status = init_importlib(interp, sysmod);
1500 if (_PyStatus_EXCEPTION(status)) {
1501 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001502 }
Nick Coghland6009512014-11-20 21:39:37 +10001503
Victor Stinner331a6a52019-05-27 16:39:22 +02001504 status = init_importlib_external(interp);
1505 if (_PyStatus_EXCEPTION(status)) {
1506 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001507 }
Nick Coghland6009512014-11-20 21:39:37 +10001508
Victor Stinner331a6a52019-05-27 16:39:22 +02001509 status = _PyUnicode_InitEncodings(interp);
1510 if (_PyStatus_EXCEPTION(status)) {
1511 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001512 }
1513
Victor Stinner331a6a52019-05-27 16:39:22 +02001514 status = init_sys_streams(interp);
1515 if (_PyStatus_EXCEPTION(status)) {
1516 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001517 }
1518
Victor Stinner331a6a52019-05-27 16:39:22 +02001519 status = add_main_module(interp);
1520 if (_PyStatus_EXCEPTION(status)) {
1521 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001522 }
1523
Victor Stinner331a6a52019-05-27 16:39:22 +02001524 if (config->site_import) {
1525 status = init_import_size();
1526 if (_PyStatus_EXCEPTION(status)) {
1527 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001528 }
1529 }
Nick Coghland6009512014-11-20 21:39:37 +10001530 }
1531
Victor Stinnera7368ac2017-11-15 18:11:45 -08001532 if (PyErr_Occurred()) {
1533 goto handle_error;
1534 }
Nick Coghland6009512014-11-20 21:39:37 +10001535
Victor Stinnera7368ac2017-11-15 18:11:45 -08001536 *tstate_p = tstate;
Victor Stinner331a6a52019-05-27 16:39:22 +02001537 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001538
Nick Coghland6009512014-11-20 21:39:37 +10001539handle_error:
1540 /* Oops, it didn't work. Undo it all. */
1541
1542 PyErr_PrintEx(0);
1543 PyThreadState_Clear(tstate);
1544 PyThreadState_Swap(save_tstate);
1545 PyThreadState_Delete(tstate);
1546 PyInterpreterState_Delete(interp);
1547
Victor Stinnera7368ac2017-11-15 18:11:45 -08001548 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001549 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001550}
1551
1552PyThreadState *
1553Py_NewInterpreter(void)
1554{
Stéphane Wirtel9e06d2b2019-03-18 17:10:29 +01001555 PyThreadState *tstate = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001556 PyStatus status = new_interpreter(&tstate);
1557 if (_PyStatus_EXCEPTION(status)) {
1558 Py_ExitStatusException(status);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001559 }
1560 return tstate;
1561
Nick Coghland6009512014-11-20 21:39:37 +10001562}
1563
1564/* Delete an interpreter and its last thread. This requires that the
1565 given thread state is current, that the thread has no remaining
1566 frames, and that it is its interpreter's only remaining thread.
1567 It is a fatal error to violate these constraints.
1568
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001569 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001570 everything, regardless.)
1571
1572 Locking: as above.
1573
1574*/
1575
1576void
1577Py_EndInterpreter(PyThreadState *tstate)
1578{
1579 PyInterpreterState *interp = tstate->interp;
1580
Victor Stinner50b48572018-11-01 01:51:40 +01001581 if (tstate != _PyThreadState_GET())
Nick Coghland6009512014-11-20 21:39:37 +10001582 Py_FatalError("Py_EndInterpreter: thread is not current");
1583 if (tstate->frame != NULL)
1584 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Eric Snow5be45a62019-03-08 22:47:07 -07001585 interp->finalizing = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001586
Eric Snow842a2f02019-03-15 15:47:51 -06001587 // Wrap up existing "threading"-module-created, non-daemon threads.
Nick Coghland6009512014-11-20 21:39:37 +10001588 wait_for_thread_shutdown();
1589
Marcel Plch776407f2017-12-20 11:17:58 +01001590 call_py_exitfuncs(interp);
1591
Nick Coghland6009512014-11-20 21:39:37 +10001592 if (tstate != interp->tstate_head || tstate->next != NULL)
1593 Py_FatalError("Py_EndInterpreter: not the last thread");
1594
1595 PyImport_Cleanup();
1596 PyInterpreterState_Clear(interp);
1597 PyThreadState_Swap(NULL);
1598 PyInterpreterState_Delete(interp);
1599}
1600
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001601/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001602
Victor Stinner331a6a52019-05-27 16:39:22 +02001603static PyStatus
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001604add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001605{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001606 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001607 m = PyImport_AddModule("__main__");
1608 if (m == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +02001609 return _PyStatus_ERR("can't create __main__ module");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001610
Nick Coghland6009512014-11-20 21:39:37 +10001611 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001612 ann_dict = PyDict_New();
1613 if ((ann_dict == NULL) ||
1614 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001615 return _PyStatus_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001616 }
1617 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001618
Nick Coghland6009512014-11-20 21:39:37 +10001619 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1620 PyObject *bimod = PyImport_ImportModule("builtins");
1621 if (bimod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001622 return _PyStatus_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001623 }
1624 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001625 return _PyStatus_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001626 }
1627 Py_DECREF(bimod);
1628 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001629
Nick Coghland6009512014-11-20 21:39:37 +10001630 /* Main is a little special - imp.is_builtin("__main__") will return
1631 * False, but BuiltinImporter is still the most appropriate initial
1632 * setting for its __loader__ attribute. A more suitable value will
1633 * be set if __main__ gets further initialized later in the startup
1634 * process.
1635 */
1636 loader = PyDict_GetItemString(d, "__loader__");
1637 if (loader == NULL || loader == Py_None) {
1638 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1639 "BuiltinImporter");
1640 if (loader == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001641 return _PyStatus_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001642 }
1643 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001644 return _PyStatus_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001645 }
1646 Py_DECREF(loader);
1647 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001648 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001649}
1650
Nick Coghland6009512014-11-20 21:39:37 +10001651/* Import the site module (not into __main__ though) */
1652
Victor Stinner331a6a52019-05-27 16:39:22 +02001653static PyStatus
Victor Stinner43fc3bb2019-05-02 11:54:20 -04001654init_import_size(void)
Nick Coghland6009512014-11-20 21:39:37 +10001655{
1656 PyObject *m;
1657 m = PyImport_ImportModule("site");
1658 if (m == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001659 return _PyStatus_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001660 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001661 Py_DECREF(m);
Victor Stinner331a6a52019-05-27 16:39:22 +02001662 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001663}
1664
Victor Stinner874dbe82015-09-04 17:29:57 +02001665/* Check if a file descriptor is valid or not.
1666 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1667static int
1668is_valid_fd(int fd)
1669{
Victor Stinner3092d6b2019-04-17 18:09:12 +02001670/* dup() is faster than fstat(): fstat() can require input/output operations,
1671 whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python
1672 startup. Problem: dup() doesn't check if the file descriptor is valid on
1673 some platforms.
1674
1675 bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other
1676 side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with
1677 EBADF. FreeBSD has similar issue (bpo-32849).
1678
1679 Only use dup() on platforms where dup() is enough to detect invalid FD in
1680 corner cases: on Linux and Windows (bpo-32849). */
1681#if defined(__linux__) || defined(MS_WINDOWS)
1682 if (fd < 0) {
1683 return 0;
1684 }
1685 int fd2;
1686
1687 _Py_BEGIN_SUPPRESS_IPH
1688 fd2 = dup(fd);
1689 if (fd2 >= 0) {
1690 close(fd2);
1691 }
1692 _Py_END_SUPPRESS_IPH
1693
1694 return (fd2 >= 0);
1695#else
Victor Stinner1c4670e2017-05-04 00:45:56 +02001696 struct stat st;
1697 return (fstat(fd, &st) == 0);
Victor Stinner1c4670e2017-05-04 00:45:56 +02001698#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001699}
1700
1701/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001702static PyObject*
Victor Stinner331a6a52019-05-27 16:39:22 +02001703create_stdio(const PyConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001704 int fd, int write_mode, const char* name,
Victor Stinner709d23d2019-05-02 14:56:30 -04001705 const wchar_t* encoding, const wchar_t* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001706{
1707 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1708 const char* mode;
1709 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001710 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001711 int buffering, isatty;
1712 _Py_IDENTIFIER(open);
1713 _Py_IDENTIFIER(isatty);
1714 _Py_IDENTIFIER(TextIOWrapper);
1715 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001716 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001717
Victor Stinner874dbe82015-09-04 17:29:57 +02001718 if (!is_valid_fd(fd))
1719 Py_RETURN_NONE;
1720
Nick Coghland6009512014-11-20 21:39:37 +10001721 /* stdin is always opened in buffered mode, first because it shouldn't
1722 make a difference in common use cases, second because TextIOWrapper
1723 depends on the presence of a read1() method which only exists on
1724 buffered streams.
1725 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001726 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001727 buffering = 0;
1728 else
1729 buffering = -1;
1730 if (write_mode)
1731 mode = "wb";
1732 else
1733 mode = "rb";
1734 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1735 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001736 Py_None, Py_None, /* encoding, errors */
1737 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001738 if (buf == NULL)
1739 goto error;
1740
1741 if (buffering) {
1742 _Py_IDENTIFIER(raw);
1743 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1744 if (raw == NULL)
1745 goto error;
1746 }
1747 else {
1748 raw = buf;
1749 Py_INCREF(raw);
1750 }
1751
Steve Dower39294992016-08-30 21:22:36 -07001752#ifdef MS_WINDOWS
1753 /* Windows console IO is always UTF-8 encoded */
1754 if (PyWindowsConsoleIO_Check(raw))
Victor Stinner709d23d2019-05-02 14:56:30 -04001755 encoding = L"utf-8";
Steve Dower39294992016-08-30 21:22:36 -07001756#endif
1757
Nick Coghland6009512014-11-20 21:39:37 +10001758 text = PyUnicode_FromString(name);
1759 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1760 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001761 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001762 if (res == NULL)
1763 goto error;
1764 isatty = PyObject_IsTrue(res);
1765 Py_DECREF(res);
1766 if (isatty == -1)
1767 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001768 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001769 write_through = Py_True;
1770 else
1771 write_through = Py_False;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001772 if (isatty && buffered_stdio)
Nick Coghland6009512014-11-20 21:39:37 +10001773 line_buffering = Py_True;
1774 else
1775 line_buffering = Py_False;
1776
1777 Py_CLEAR(raw);
1778 Py_CLEAR(text);
1779
1780#ifdef MS_WINDOWS
1781 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1782 newlines to "\n".
1783 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1784 newline = NULL;
1785#else
1786 /* sys.stdin: split lines at "\n".
1787 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1788 newline = "\n";
1789#endif
1790
Victor Stinner709d23d2019-05-02 14:56:30 -04001791 PyObject *encoding_str = PyUnicode_FromWideChar(encoding, -1);
1792 if (encoding_str == NULL) {
1793 Py_CLEAR(buf);
1794 goto error;
1795 }
1796
1797 PyObject *errors_str = PyUnicode_FromWideChar(errors, -1);
1798 if (errors_str == NULL) {
1799 Py_CLEAR(buf);
1800 Py_CLEAR(encoding_str);
1801 goto error;
1802 }
1803
1804 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OOOsOO",
1805 buf, encoding_str, errors_str,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001806 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001807 Py_CLEAR(buf);
Victor Stinner709d23d2019-05-02 14:56:30 -04001808 Py_CLEAR(encoding_str);
1809 Py_CLEAR(errors_str);
Nick Coghland6009512014-11-20 21:39:37 +10001810 if (stream == NULL)
1811 goto error;
1812
1813 if (write_mode)
1814 mode = "w";
1815 else
1816 mode = "r";
1817 text = PyUnicode_FromString(mode);
1818 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1819 goto error;
1820 Py_CLEAR(text);
1821 return stream;
1822
1823error:
1824 Py_XDECREF(buf);
1825 Py_XDECREF(stream);
1826 Py_XDECREF(text);
1827 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001828
Victor Stinner874dbe82015-09-04 17:29:57 +02001829 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1830 /* Issue #24891: the file descriptor was closed after the first
1831 is_valid_fd() check was called. Ignore the OSError and set the
1832 stream to None. */
1833 PyErr_Clear();
1834 Py_RETURN_NONE;
1835 }
1836 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001837}
1838
1839/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinner331a6a52019-05-27 16:39:22 +02001840static PyStatus
Victor Stinner91106cd2017-12-13 12:29:09 +01001841init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001842{
1843 PyObject *iomod = NULL, *wrapper;
1844 PyObject *bimod = NULL;
1845 PyObject *m;
1846 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001847 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001848 PyObject * encoding_attr;
Victor Stinner331a6a52019-05-27 16:39:22 +02001849 PyStatus res = _PyStatus_OK();
1850 PyConfig *config = &interp->config;
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001851
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001852 /* Check that stdin is not a directory
1853 Using shell redirection, you can redirect stdin to a directory,
1854 crashing the Python interpreter. Catch this common mistake here
1855 and output a useful error message. Note that under MS Windows,
1856 the shell already prevents that. */
1857#ifndef MS_WINDOWS
1858 struct _Py_stat_struct sb;
1859 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1860 S_ISDIR(sb.st_mode)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001861 return _PyStatus_ERR("<stdin> is a directory, cannot continue");
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001862 }
1863#endif
1864
Nick Coghland6009512014-11-20 21:39:37 +10001865 /* Hack to avoid a nasty recursion issue when Python is invoked
1866 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1867 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1868 goto error;
1869 }
1870 Py_DECREF(m);
1871
1872 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1873 goto error;
1874 }
1875 Py_DECREF(m);
1876
1877 if (!(bimod = PyImport_ImportModule("builtins"))) {
1878 goto error;
1879 }
1880
1881 if (!(iomod = PyImport_ImportModule("io"))) {
1882 goto error;
1883 }
1884 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1885 goto error;
1886 }
1887
1888 /* Set builtins.open */
1889 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1890 Py_DECREF(wrapper);
1891 goto error;
1892 }
1893 Py_DECREF(wrapper);
1894
Nick Coghland6009512014-11-20 21:39:37 +10001895 /* Set sys.stdin */
1896 fd = fileno(stdin);
1897 /* Under some conditions stdin, stdout and stderr may not be connected
1898 * and fileno() may point to an invalid file descriptor. For example
1899 * GUI apps don't have valid standard streams by default.
1900 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001901 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001902 config->stdio_encoding,
1903 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001904 if (std == NULL)
1905 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001906 PySys_SetObject("__stdin__", std);
1907 _PySys_SetObjectId(&PyId_stdin, std);
1908 Py_DECREF(std);
1909
1910 /* Set sys.stdout */
1911 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001912 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001913 config->stdio_encoding,
1914 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001915 if (std == NULL)
1916 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001917 PySys_SetObject("__stdout__", std);
1918 _PySys_SetObjectId(&PyId_stdout, std);
1919 Py_DECREF(std);
1920
1921#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1922 /* Set sys.stderr, replaces the preliminary stderr */
1923 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001924 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001925 config->stdio_encoding,
Victor Stinner709d23d2019-05-02 14:56:30 -04001926 L"backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001927 if (std == NULL)
1928 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001929
1930 /* Same as hack above, pre-import stderr's codec to avoid recursion
1931 when import.c tries to write to stderr in verbose mode. */
1932 encoding_attr = PyObject_GetAttrString(std, "encoding");
1933 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001934 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001935 if (std_encoding != NULL) {
1936 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1937 Py_XDECREF(codec_info);
1938 }
1939 Py_DECREF(encoding_attr);
1940 }
1941 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1942
1943 if (PySys_SetObject("__stderr__", std) < 0) {
1944 Py_DECREF(std);
1945 goto error;
1946 }
1947 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1948 Py_DECREF(std);
1949 goto error;
1950 }
1951 Py_DECREF(std);
1952#endif
1953
Victor Stinnera7368ac2017-11-15 18:11:45 -08001954 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001955
Victor Stinnera7368ac2017-11-15 18:11:45 -08001956error:
Victor Stinner331a6a52019-05-27 16:39:22 +02001957 res = _PyStatus_ERR("can't initialize sys standard streams");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001958
1959done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02001960 _Py_ClearStandardStreamEncoding();
Victor Stinner31e99082017-12-20 23:41:38 +01001961
Nick Coghland6009512014-11-20 21:39:37 +10001962 Py_XDECREF(bimod);
1963 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001964 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001965}
1966
1967
Victor Stinner10dc4842015-03-24 12:01:30 +01001968static void
Victor Stinner47bbab92019-09-18 14:10:16 +02001969_Py_FatalError_DumpTracebacks(int fd, PyInterpreterState *interp,
1970 PyThreadState *tstate)
Victor Stinner10dc4842015-03-24 12:01:30 +01001971{
Victor Stinner10dc4842015-03-24 12:01:30 +01001972 fputc('\n', stderr);
1973 fflush(stderr);
1974
1975 /* display the current Python stack */
Victor Stinner47bbab92019-09-18 14:10:16 +02001976 _Py_DumpTracebackThreads(fd, interp, tstate);
Victor Stinner10dc4842015-03-24 12:01:30 +01001977}
Victor Stinner791da1c2016-03-14 16:53:12 +01001978
1979/* Print the current exception (if an exception is set) with its traceback,
1980 or display the current Python stack.
1981
1982 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1983 called on catastrophic cases.
1984
1985 Return 1 if the traceback was displayed, 0 otherwise. */
1986
1987static int
1988_Py_FatalError_PrintExc(int fd)
1989{
1990 PyObject *ferr, *res;
1991 PyObject *exception, *v, *tb;
1992 int has_tb;
1993
Victor Stinner791da1c2016-03-14 16:53:12 +01001994 PyErr_Fetch(&exception, &v, &tb);
1995 if (exception == NULL) {
1996 /* No current exception */
1997 return 0;
1998 }
1999
2000 ferr = _PySys_GetObjectId(&PyId_stderr);
2001 if (ferr == NULL || ferr == Py_None) {
2002 /* sys.stderr is not set yet or set to None,
2003 no need to try to display the exception */
2004 return 0;
2005 }
2006
2007 PyErr_NormalizeException(&exception, &v, &tb);
2008 if (tb == NULL) {
2009 tb = Py_None;
2010 Py_INCREF(tb);
2011 }
2012 PyException_SetTraceback(v, tb);
2013 if (exception == NULL) {
2014 /* PyErr_NormalizeException() failed */
2015 return 0;
2016 }
2017
2018 has_tb = (tb != Py_None);
2019 PyErr_Display(exception, v, tb);
2020 Py_XDECREF(exception);
2021 Py_XDECREF(v);
2022 Py_XDECREF(tb);
2023
2024 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07002025 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01002026 if (res == NULL)
2027 PyErr_Clear();
2028 else
2029 Py_DECREF(res);
2030
2031 return has_tb;
2032}
2033
Nick Coghland6009512014-11-20 21:39:37 +10002034/* Print fatal error message and abort */
2035
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002036#ifdef MS_WINDOWS
2037static void
2038fatal_output_debug(const char *msg)
2039{
2040 /* buffer of 256 bytes allocated on the stack */
2041 WCHAR buffer[256 / sizeof(WCHAR)];
2042 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2043 size_t msglen;
2044
2045 OutputDebugStringW(L"Fatal Python error: ");
2046
2047 msglen = strlen(msg);
2048 while (msglen) {
2049 size_t i;
2050
2051 if (buflen > msglen) {
2052 buflen = msglen;
2053 }
2054
2055 /* Convert the message to wchar_t. This uses a simple one-to-one
2056 conversion, assuming that the this error message actually uses
2057 ASCII only. If this ceases to be true, we will have to convert. */
2058 for (i=0; i < buflen; ++i) {
2059 buffer[i] = msg[i];
2060 }
2061 buffer[i] = L'\0';
2062 OutputDebugStringW(buffer);
2063
2064 msg += buflen;
2065 msglen -= buflen;
2066 }
2067 OutputDebugStringW(L"\n");
2068}
2069#endif
2070
Victor Stinner47bbab92019-09-18 14:10:16 +02002071
2072static void
2073fatal_error_dump_runtime(FILE *stream, _PyRuntimeState *runtime)
2074{
2075 fprintf(stream, "Python runtime state: ");
2076 if (runtime->finalizing) {
2077 fprintf(stream, "finalizing (tstate=%p)", runtime->finalizing);
2078 }
2079 else if (runtime->initialized) {
2080 fprintf(stream, "initialized");
2081 }
2082 else if (runtime->core_initialized) {
2083 fprintf(stream, "core initialized");
2084 }
2085 else if (runtime->preinitialized) {
2086 fprintf(stream, "preinitialized");
2087 }
2088 else if (runtime->preinitializing) {
2089 fprintf(stream, "preinitializing");
2090 }
2091 else {
2092 fprintf(stream, "unknown");
2093 }
2094 fprintf(stream, "\n");
2095 fflush(stream);
2096}
2097
2098
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002099static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002100fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002101{
Victor Stinner47bbab92019-09-18 14:10:16 +02002102 FILE *stream = stderr;
2103 const int fd = fileno(stream);
Victor Stinner53345a42015-03-25 01:55:14 +01002104 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002105
2106 if (reentrant) {
2107 /* Py_FatalError() caused a second fatal error.
2108 Example: flush_std_files() raises a recursion error. */
2109 goto exit;
2110 }
2111 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002112
Victor Stinner47bbab92019-09-18 14:10:16 +02002113 fprintf(stream, "Fatal Python error: ");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002114 if (prefix) {
Victor Stinner47bbab92019-09-18 14:10:16 +02002115 fputs(prefix, stream);
2116 fputs(": ", stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002117 }
2118 if (msg) {
Victor Stinner47bbab92019-09-18 14:10:16 +02002119 fputs(msg, stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002120 }
2121 else {
Victor Stinner47bbab92019-09-18 14:10:16 +02002122 fprintf(stream, "<message not set>");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002123 }
Victor Stinner47bbab92019-09-18 14:10:16 +02002124 fputs("\n", stream);
2125 fflush(stream); /* it helps in Windows debug build */
2126
2127 _PyRuntimeState *runtime = &_PyRuntime;
2128 fatal_error_dump_runtime(stream, runtime);
2129
2130 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
2131 PyInterpreterState *interp = NULL;
2132 if (tstate != NULL) {
2133 interp = tstate->interp;
2134 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002135
Victor Stinner3a228ab2018-11-01 00:26:41 +01002136 /* Check if the current thread has a Python thread state
Victor Stinner47bbab92019-09-18 14:10:16 +02002137 and holds the GIL.
Victor Stinner3a228ab2018-11-01 00:26:41 +01002138
Victor Stinner47bbab92019-09-18 14:10:16 +02002139 tss_tstate is NULL if Py_FatalError() is called from a C thread which
2140 has no Python thread state.
2141
2142 tss_tstate != tstate if the current Python thread does not hold the GIL.
2143 */
2144 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2145 int has_tstate_and_gil = (tss_tstate != NULL && tss_tstate == tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002146 if (has_tstate_and_gil) {
2147 /* If an exception is set, print the exception with its traceback */
2148 if (!_Py_FatalError_PrintExc(fd)) {
2149 /* No exception is set, or an exception is set without traceback */
Victor Stinner47bbab92019-09-18 14:10:16 +02002150 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002151 }
2152 }
2153 else {
Victor Stinner47bbab92019-09-18 14:10:16 +02002154 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002155 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002156
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002157 /* The main purpose of faulthandler is to display the traceback.
2158 This function already did its best to display a traceback.
2159 Disable faulthandler to prevent writing a second traceback
2160 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002161 _PyFaulthandler_Fini();
2162
Victor Stinner791da1c2016-03-14 16:53:12 +01002163 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002164 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002165 /* Flush sys.stdout and sys.stderr */
2166 flush_std_files();
2167 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002168
Nick Coghland6009512014-11-20 21:39:37 +10002169#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002170 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002171#endif /* MS_WINDOWS */
2172
2173exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002174 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002175#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002176 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002177#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002178 abort();
2179 }
2180 else {
2181 exit(status);
2182 }
2183}
2184
Victor Stinner19760862017-12-20 01:41:59 +01002185void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002186Py_FatalError(const char *msg)
2187{
2188 fatal_error(NULL, msg, -1);
2189}
2190
Victor Stinner19760862017-12-20 01:41:59 +01002191void _Py_NO_RETURN
Victor Stinner331a6a52019-05-27 16:39:22 +02002192Py_ExitStatusException(PyStatus status)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002193{
Victor Stinner331a6a52019-05-27 16:39:22 +02002194 if (_PyStatus_IS_EXIT(status)) {
2195 exit(status.exitcode);
Victor Stinnerdbacfc22019-05-16 16:39:26 +02002196 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002197 else if (_PyStatus_IS_ERROR(status)) {
2198 fatal_error(status.func, status.err_msg, 1);
Victor Stinnerdfe88472019-03-01 12:14:41 +01002199 }
2200 else {
Victor Stinner331a6a52019-05-27 16:39:22 +02002201 Py_FatalError("Py_ExitStatusException() must not be called on success");
Victor Stinnerdfe88472019-03-01 12:14:41 +01002202 }
Nick Coghland6009512014-11-20 21:39:37 +10002203}
2204
2205/* Clean up and exit */
2206
Victor Stinnerd7292b52016-06-17 12:29:00 +02002207# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002208
Nick Coghland6009512014-11-20 21:39:37 +10002209/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002210void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002211{
Victor Stinnercaba55b2018-08-03 15:33:52 +02002212 PyInterpreterState *is = _PyInterpreterState_Get();
Marcel Plch776407f2017-12-20 11:17:58 +01002213
Antoine Pitroufc5db952017-12-13 02:29:07 +01002214 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002215 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2216
2217 is->pyexitfunc = func;
2218 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002219}
2220
2221static void
Marcel Plch776407f2017-12-20 11:17:58 +01002222call_py_exitfuncs(PyInterpreterState *istate)
Nick Coghland6009512014-11-20 21:39:37 +10002223{
Marcel Plch776407f2017-12-20 11:17:58 +01002224 if (istate->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002225 return;
2226
Marcel Plch776407f2017-12-20 11:17:58 +01002227 (*istate->pyexitfunc)(istate->pyexitmodule);
Nick Coghland6009512014-11-20 21:39:37 +10002228 PyErr_Clear();
2229}
2230
2231/* Wait until threading._shutdown completes, provided
2232 the threading module was imported in the first place.
2233 The shutdown routine will wait until all non-daemon
2234 "threading" threads have completed. */
2235static void
2236wait_for_thread_shutdown(void)
2237{
Nick Coghland6009512014-11-20 21:39:37 +10002238 _Py_IDENTIFIER(_shutdown);
2239 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002240 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002241 if (threading == NULL) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002242 if (PyErr_Occurred()) {
2243 PyErr_WriteUnraisable(NULL);
2244 }
2245 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002246 return;
2247 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002248 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002249 if (result == NULL) {
2250 PyErr_WriteUnraisable(threading);
2251 }
2252 else {
2253 Py_DECREF(result);
2254 }
2255 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002256}
2257
2258#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002259int Py_AtExit(void (*func)(void))
2260{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002261 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002262 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002263 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002264 return 0;
2265}
2266
2267static void
Victor Stinner8e91c242019-04-24 17:24:01 +02002268call_ll_exitfuncs(_PyRuntimeState *runtime)
Nick Coghland6009512014-11-20 21:39:37 +10002269{
Victor Stinner8e91c242019-04-24 17:24:01 +02002270 while (runtime->nexitfuncs > 0) {
Victor Stinner87d23a02019-04-26 05:49:26 +02002271 /* pop last function from the list */
2272 runtime->nexitfuncs--;
2273 void (*exitfunc)(void) = runtime->exitfuncs[runtime->nexitfuncs];
2274 runtime->exitfuncs[runtime->nexitfuncs] = NULL;
2275
2276 exitfunc();
Victor Stinner8e91c242019-04-24 17:24:01 +02002277 }
Nick Coghland6009512014-11-20 21:39:37 +10002278
2279 fflush(stdout);
2280 fflush(stderr);
2281}
2282
Victor Stinnercfc88312018-08-01 16:41:25 +02002283void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002284Py_Exit(int sts)
2285{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002286 if (Py_FinalizeEx() < 0) {
2287 sts = 120;
2288 }
Nick Coghland6009512014-11-20 21:39:37 +10002289
2290 exit(sts);
2291}
2292
Victor Stinner331a6a52019-05-27 16:39:22 +02002293static PyStatus
Victor Stinner43fc3bb2019-05-02 11:54:20 -04002294init_signals(void)
Nick Coghland6009512014-11-20 21:39:37 +10002295{
2296#ifdef SIGPIPE
2297 PyOS_setsig(SIGPIPE, SIG_IGN);
2298#endif
2299#ifdef SIGXFZ
2300 PyOS_setsig(SIGXFZ, SIG_IGN);
2301#endif
2302#ifdef SIGXFSZ
2303 PyOS_setsig(SIGXFSZ, SIG_IGN);
2304#endif
2305 PyOS_InitInterrupts(); /* May imply initsignal() */
2306 if (PyErr_Occurred()) {
Victor Stinner331a6a52019-05-27 16:39:22 +02002307 return _PyStatus_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002308 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002309 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002310}
2311
2312
2313/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2314 *
2315 * All of the code in this function must only use async-signal-safe functions,
2316 * listed at `man 7 signal` or
2317 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2318 */
2319void
2320_Py_RestoreSignals(void)
2321{
2322#ifdef SIGPIPE
2323 PyOS_setsig(SIGPIPE, SIG_DFL);
2324#endif
2325#ifdef SIGXFZ
2326 PyOS_setsig(SIGXFZ, SIG_DFL);
2327#endif
2328#ifdef SIGXFSZ
2329 PyOS_setsig(SIGXFSZ, SIG_DFL);
2330#endif
2331}
2332
2333
2334/*
2335 * The file descriptor fd is considered ``interactive'' if either
2336 * a) isatty(fd) is TRUE, or
2337 * b) the -i flag was given, and the filename associated with
2338 * the descriptor is NULL or "<stdin>" or "???".
2339 */
2340int
2341Py_FdIsInteractive(FILE *fp, const char *filename)
2342{
2343 if (isatty((int)fileno(fp)))
2344 return 1;
2345 if (!Py_InteractiveFlag)
2346 return 0;
2347 return (filename == NULL) ||
2348 (strcmp(filename, "<stdin>") == 0) ||
2349 (strcmp(filename, "???") == 0);
2350}
2351
2352
Nick Coghland6009512014-11-20 21:39:37 +10002353/* Wrappers around sigaction() or signal(). */
2354
2355PyOS_sighandler_t
2356PyOS_getsig(int sig)
2357{
2358#ifdef HAVE_SIGACTION
2359 struct sigaction context;
2360 if (sigaction(sig, NULL, &context) == -1)
2361 return SIG_ERR;
2362 return context.sa_handler;
2363#else
2364 PyOS_sighandler_t handler;
2365/* Special signal handling for the secure CRT in Visual Studio 2005 */
2366#if defined(_MSC_VER) && _MSC_VER >= 1400
2367 switch (sig) {
2368 /* Only these signals are valid */
2369 case SIGINT:
2370 case SIGILL:
2371 case SIGFPE:
2372 case SIGSEGV:
2373 case SIGTERM:
2374 case SIGBREAK:
2375 case SIGABRT:
2376 break;
2377 /* Don't call signal() with other values or it will assert */
2378 default:
2379 return SIG_ERR;
2380 }
2381#endif /* _MSC_VER && _MSC_VER >= 1400 */
2382 handler = signal(sig, SIG_IGN);
2383 if (handler != SIG_ERR)
2384 signal(sig, handler);
2385 return handler;
2386#endif
2387}
2388
2389/*
2390 * All of the code in this function must only use async-signal-safe functions,
2391 * listed at `man 7 signal` or
2392 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2393 */
2394PyOS_sighandler_t
2395PyOS_setsig(int sig, PyOS_sighandler_t handler)
2396{
2397#ifdef HAVE_SIGACTION
2398 /* Some code in Modules/signalmodule.c depends on sigaction() being
2399 * used here if HAVE_SIGACTION is defined. Fix that if this code
2400 * changes to invalidate that assumption.
2401 */
2402 struct sigaction context, ocontext;
2403 context.sa_handler = handler;
2404 sigemptyset(&context.sa_mask);
2405 context.sa_flags = 0;
2406 if (sigaction(sig, &context, &ocontext) == -1)
2407 return SIG_ERR;
2408 return ocontext.sa_handler;
2409#else
2410 PyOS_sighandler_t oldhandler;
2411 oldhandler = signal(sig, handler);
2412#ifdef HAVE_SIGINTERRUPT
2413 siginterrupt(sig, 1);
2414#endif
2415 return oldhandler;
2416#endif
2417}
2418
2419#ifdef __cplusplus
2420}
2421#endif