blob: d00bf821c570a4a84793c7dcadd7f80f36805f67 [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 Stinner0a28f8d2019-06-19 02:54:39 +02009#include "pycore_import.h" /* _PyImport_FindBuiltin */
Victor Stinner331a6a52019-05-27 16:39:22 +020010#include "pycore_initconfig.h"
Victor Stinner353933e2018-11-23 13:08:26 +010011#include "pycore_fileutils.h"
Victor Stinner27e2d1f2018-11-01 00:52:28 +010012#include "pycore_hamt.h"
Victor Stinner4b524162020-02-03 17:28:26 +010013#include "pycore_object.h"
Victor Stinnera1c249c2018-11-01 03:15:58 +010014#include "pycore_pathconfig.h"
Victor Stinnerb45d2592019-06-20 00:05:23 +020015#include "pycore_pyerrors.h"
Victor Stinner621cebe2018-11-12 16:53:38 +010016#include "pycore_pylifecycle.h"
17#include "pycore_pymem.h"
18#include "pycore_pystate.h"
Victor Stinnered488662019-05-20 00:14:57 +020019#include "pycore_traceback.h"
Nick Coghland6009512014-11-20 21:39:37 +100020#include "grammar.h"
21#include "node.h"
22#include "token.h"
23#include "parsetok.h"
24#include "errcode.h"
25#include "code.h"
26#include "symtable.h"
27#include "ast.h"
28#include "marshal.h"
29#include "osdefs.h"
30#include <locale.h>
31
32#ifdef HAVE_SIGNAL_H
33#include <signal.h>
34#endif
35
36#ifdef MS_WINDOWS
37#include "malloc.h" /* for alloca */
38#endif
39
40#ifdef HAVE_LANGINFO_H
41#include <langinfo.h>
42#endif
43
44#ifdef MS_WINDOWS
45#undef BYTE
46#include "windows.h"
Steve Dower39294992016-08-30 21:22:36 -070047
48extern PyTypeObject PyWindowsConsoleIO_Type;
49#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
Nick Coghland6009512014-11-20 21:39:37 +100050#endif
51
52_Py_IDENTIFIER(flush);
53_Py_IDENTIFIER(name);
54_Py_IDENTIFIER(stdin);
55_Py_IDENTIFIER(stdout);
56_Py_IDENTIFIER(stderr);
Eric Snow3f9eee62017-09-15 16:35:20 -060057_Py_IDENTIFIER(threading);
Nick Coghland6009512014-11-20 21:39:37 +100058
59#ifdef __cplusplus
60extern "C" {
61#endif
62
Nick Coghland6009512014-11-20 21:39:37 +100063extern grammar _PyParser_Grammar; /* From graminit.c */
64
Victor Stinnerb45d2592019-06-20 00:05:23 +020065/* Forward declarations */
Victor Stinner331a6a52019-05-27 16:39:22 +020066static PyStatus add_main_module(PyInterpreterState *interp);
Victor Stinnerb45d2592019-06-20 00:05:23 +020067static PyStatus init_import_site(void);
Victor Stinnere0c9ab82019-11-22 16:19:14 +010068static PyStatus init_set_builtins_open(PyThreadState *tstate);
Victor Stinnerb45d2592019-06-20 00:05:23 +020069static PyStatus init_sys_streams(PyThreadState *tstate);
70static PyStatus init_signals(PyThreadState *tstate);
71static void call_py_exitfuncs(PyThreadState *tstate);
72static void wait_for_thread_shutdown(PyThreadState *tstate);
Victor Stinner8e91c242019-04-24 17:24:01 +020073static void call_ll_exitfuncs(_PyRuntimeState *runtime);
Nick Coghland6009512014-11-20 21:39:37 +100074
Gregory P. Smith38f11cc2019-02-16 12:57:40 -080075int _Py_UnhandledKeyboardInterrupt = 0;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080076_PyRuntimeState _PyRuntime = _PyRuntimeState_INIT;
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010077static int runtime_initialized = 0;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060078
Victor Stinner331a6a52019-05-27 16:39:22 +020079PyStatus
Eric Snow2ebc5ce2017-09-07 23:51:28 -060080_PyRuntime_Initialize(void)
81{
82 /* XXX We only initialize once in the process, which aligns with
83 the static initialization of the former globals now found in
84 _PyRuntime. However, _PyRuntime *should* be initialized with
85 every Py_Initialize() call, but doing so breaks the runtime.
86 This is because the runtime state is not properly finalized
87 currently. */
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010088 if (runtime_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +020089 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -080090 }
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010091 runtime_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080092
93 return _PyRuntimeState_Init(&_PyRuntime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -060094}
95
96void
97_PyRuntime_Finalize(void)
98{
99 _PyRuntimeState_Fini(&_PyRuntime);
Victor Stinnerfd23cfa2019-03-20 00:03:01 +0100100 runtime_initialized = 0;
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600101}
102
103int
104_Py_IsFinalizing(void)
105{
Victor Stinner7b3c2522020-03-07 00:24:23 +0100106 return _PyRuntimeState_GetFinalizing(&_PyRuntime) != NULL;
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600107}
108
Nick Coghland6009512014-11-20 21:39:37 +1000109/* Hack to force loading of object files */
110int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
111 PyOS_mystrnicmp; /* Python/pystrcmp.o */
112
113/* PyModule_GetWarningsModule is no longer necessary as of 2.6
114since _warnings is builtin. This API should not be used. */
115PyObject *
116PyModule_GetWarningsModule(void)
117{
118 return PyImport_ImportModule("warnings");
119}
120
Eric Snowc7ec9982017-05-23 23:00:52 -0700121
Eric Snow1abcf672017-05-23 21:46:51 -0700122/* APIs to access the initialization flags
123 *
124 * Can be called prior to Py_Initialize.
125 */
Nick Coghland6009512014-11-20 21:39:37 +1000126
Eric Snow1abcf672017-05-23 21:46:51 -0700127int
128_Py_IsCoreInitialized(void)
129{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600130 return _PyRuntime.core_initialized;
Eric Snow1abcf672017-05-23 21:46:51 -0700131}
Nick Coghland6009512014-11-20 21:39:37 +1000132
133int
134Py_IsInitialized(void)
135{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600136 return _PyRuntime.initialized;
Nick Coghland6009512014-11-20 21:39:37 +1000137}
138
Nick Coghlan6ea41862017-06-11 13:16:15 +1000139
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000140/* Global initializations. Can be undone by Py_FinalizeEx(). Don't
141 call this twice without an intervening Py_FinalizeEx() call. When
Nick Coghland6009512014-11-20 21:39:37 +1000142 initializations fail, a fatal error is issued and the function does
143 not return. On return, the first thread and interpreter state have
144 been created.
145
146 Locking: you must hold the interpreter lock while calling this.
147 (If the lock has not yet been initialized, that's equivalent to
148 having the lock, but you cannot use multiple threads.)
149
150*/
151
Victor Stinner331a6a52019-05-27 16:39:22 +0200152static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200153init_importlib(PyThreadState *tstate, PyObject *sysmod)
Nick Coghland6009512014-11-20 21:39:37 +1000154{
155 PyObject *importlib;
156 PyObject *impmod;
Nick Coghland6009512014-11-20 21:39:37 +1000157 PyObject *value;
Victor Stinnerb45d2592019-06-20 00:05:23 +0200158 PyInterpreterState *interp = tstate->interp;
Victor Stinner331a6a52019-05-27 16:39:22 +0200159 int verbose = interp->config.verbose;
Nick Coghland6009512014-11-20 21:39:37 +1000160
161 /* Import _importlib through its frozen version, _frozen_importlib. */
162 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200163 return _PyStatus_ERR("can't import _frozen_importlib");
Nick Coghland6009512014-11-20 21:39:37 +1000164 }
Victor Stinnerc96be812019-05-14 17:34:56 +0200165 else if (verbose) {
Nick Coghland6009512014-11-20 21:39:37 +1000166 PySys_FormatStderr("import _frozen_importlib # frozen\n");
167 }
168 importlib = PyImport_AddModule("_frozen_importlib");
169 if (importlib == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200170 return _PyStatus_ERR("couldn't get _frozen_importlib from sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000171 }
172 interp->importlib = importlib;
173 Py_INCREF(interp->importlib);
174
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300175 interp->import_func = PyDict_GetItemString(interp->builtins, "__import__");
176 if (interp->import_func == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +0200177 return _PyStatus_ERR("__import__ not found");
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300178 Py_INCREF(interp->import_func);
179
Victor Stinnercd6e6942015-09-18 09:11:57 +0200180 /* Import the _imp module */
Benjamin Petersonc65ef772018-01-29 11:33:57 -0800181 impmod = PyInit__imp();
Nick Coghland6009512014-11-20 21:39:37 +1000182 if (impmod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200183 return _PyStatus_ERR("can't import _imp");
Nick Coghland6009512014-11-20 21:39:37 +1000184 }
Victor Stinnerc96be812019-05-14 17:34:56 +0200185 else if (verbose) {
Victor Stinnercd6e6942015-09-18 09:11:57 +0200186 PySys_FormatStderr("import _imp # builtin\n");
Nick Coghland6009512014-11-20 21:39:37 +1000187 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600188 if (_PyImport_SetModuleString("_imp", impmod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200189 return _PyStatus_ERR("can't save _imp to sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000190 }
191
Victor Stinnercd6e6942015-09-18 09:11:57 +0200192 /* Install importlib as the implementation of import */
Nick Coghland6009512014-11-20 21:39:37 +1000193 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
194 if (value == NULL) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200195 _PyErr_Print(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200196 return _PyStatus_ERR("importlib install failed");
Nick Coghland6009512014-11-20 21:39:37 +1000197 }
198 Py_DECREF(value);
199 Py_DECREF(impmod);
200
Victor Stinner331a6a52019-05-27 16:39:22 +0200201 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000202}
203
Victor Stinner331a6a52019-05-27 16:39:22 +0200204static PyStatus
Victor Stinner0a28f8d2019-06-19 02:54:39 +0200205init_importlib_external(PyThreadState *tstate)
Eric Snow1abcf672017-05-23 21:46:51 -0700206{
207 PyObject *value;
Victor Stinner0a28f8d2019-06-19 02:54:39 +0200208 value = PyObject_CallMethod(tstate->interp->importlib,
Eric Snow1abcf672017-05-23 21:46:51 -0700209 "_install_external_importers", "");
210 if (value == NULL) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200211 _PyErr_Print(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200212 return _PyStatus_ERR("external importer setup failed");
Eric Snow1abcf672017-05-23 21:46:51 -0700213 }
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200214 Py_DECREF(value);
Victor Stinner0a28f8d2019-06-19 02:54:39 +0200215 return _PyImportZip_Init(tstate);
Eric Snow1abcf672017-05-23 21:46:51 -0700216}
Nick Coghland6009512014-11-20 21:39:37 +1000217
Nick Coghlan6ea41862017-06-11 13:16:15 +1000218/* Helper functions to better handle the legacy C locale
219 *
220 * The legacy C locale assumes ASCII as the default text encoding, which
221 * causes problems not only for the CPython runtime, but also other
222 * components like GNU readline.
223 *
224 * Accordingly, when the CLI detects it, it attempts to coerce it to a
225 * more capable UTF-8 based alternative as follows:
226 *
227 * if (_Py_LegacyLocaleDetected()) {
228 * _Py_CoerceLegacyLocale();
229 * }
230 *
231 * See the documentation of the PYTHONCOERCECLOCALE setting for more details.
232 *
233 * Locale coercion also impacts the default error handler for the standard
234 * streams: while the usual default is "strict", the default for the legacy
235 * C locale and for any of the coercion target locales is "surrogateescape".
236 */
237
238int
Victor Stinner0f721472019-05-20 17:16:38 +0200239_Py_LegacyLocaleDetected(int warn)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000240{
241#ifndef MS_WINDOWS
Victor Stinner0f721472019-05-20 17:16:38 +0200242 if (!warn) {
243 const char *locale_override = getenv("LC_ALL");
244 if (locale_override != NULL && *locale_override != '\0') {
245 /* Don't coerce C locale if the LC_ALL environment variable
246 is set */
247 return 0;
248 }
249 }
250
Nick Coghlan6ea41862017-06-11 13:16:15 +1000251 /* On non-Windows systems, the C locale is considered a legacy locale */
Nick Coghlaneb817952017-06-18 12:29:42 +1000252 /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat
253 * the POSIX locale as a simple alias for the C locale, so
254 * we may also want to check for that explicitly.
255 */
Nick Coghlan6ea41862017-06-11 13:16:15 +1000256 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
257 return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
258#else
259 /* Windows uses code pages instead of locales, so no locale is legacy */
260 return 0;
261#endif
262}
263
Victor Stinnerb0051362019-11-22 17:52:42 +0100264#ifndef MS_WINDOWS
Nick Coghlaneb817952017-06-18 12:29:42 +1000265static const char *_C_LOCALE_WARNING =
266 "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
267 "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
268 "C.utf8, or UTF-8 (if available) as alternative Unicode-compatible "
269 "locales is recommended.\n";
270
Nick Coghlaneb817952017-06-18 12:29:42 +1000271static void
Victor Stinner43125222019-04-24 18:23:53 +0200272emit_stderr_warning_for_legacy_locale(_PyRuntimeState *runtime)
Nick Coghlaneb817952017-06-18 12:29:42 +1000273{
Victor Stinner331a6a52019-05-27 16:39:22 +0200274 const PyPreConfig *preconfig = &runtime->preconfig;
Victor Stinner0f721472019-05-20 17:16:38 +0200275 if (preconfig->coerce_c_locale_warn && _Py_LegacyLocaleDetected(1)) {
Victor Stinnercf215042018-08-29 22:56:06 +0200276 PySys_FormatStderr("%s", _C_LOCALE_WARNING);
Nick Coghlaneb817952017-06-18 12:29:42 +1000277 }
278}
Victor Stinnerb0051362019-11-22 17:52:42 +0100279#endif /* !defined(MS_WINDOWS) */
Nick Coghlaneb817952017-06-18 12:29:42 +1000280
Nick Coghlan6ea41862017-06-11 13:16:15 +1000281typedef struct _CandidateLocale {
282 const char *locale_name; /* The locale to try as a coercion target */
283} _LocaleCoercionTarget;
284
285static _LocaleCoercionTarget _TARGET_LOCALES[] = {
286 {"C.UTF-8"},
287 {"C.utf8"},
Nick Coghlan18974c32017-06-30 00:48:14 +1000288 {"UTF-8"},
Nick Coghlan6ea41862017-06-11 13:16:15 +1000289 {NULL}
290};
291
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200292
293int
294_Py_IsLocaleCoercionTarget(const char *ctype_loc)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000295{
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200296 const _LocaleCoercionTarget *target = NULL;
297 for (target = _TARGET_LOCALES; target->locale_name; target++) {
298 if (strcmp(ctype_loc, target->locale_name) == 0) {
299 return 1;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000300 }
Victor Stinner124b9eb2018-08-29 01:29:06 +0200301 }
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200302 return 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000303}
304
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200305
Nick Coghlan6ea41862017-06-11 13:16:15 +1000306#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100307static const char C_LOCALE_COERCION_WARNING[] =
Nick Coghlan6ea41862017-06-11 13:16:15 +1000308 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale "
309 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n";
310
Victor Stinner0f721472019-05-20 17:16:38 +0200311static int
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200312_coerce_default_locale_settings(int warn, const _LocaleCoercionTarget *target)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000313{
314 const char *newloc = target->locale_name;
315
316 /* Reset locale back to currently configured defaults */
xdegaye1588be62017-11-12 12:45:59 +0100317 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000318
319 /* Set the relevant locale environment variable */
320 if (setenv("LC_CTYPE", newloc, 1)) {
321 fprintf(stderr,
322 "Error setting LC_CTYPE, skipping C locale coercion\n");
Victor Stinner0f721472019-05-20 17:16:38 +0200323 return 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000324 }
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200325 if (warn) {
Victor Stinner94540602017-12-16 04:54:22 +0100326 fprintf(stderr, C_LOCALE_COERCION_WARNING, newloc);
Nick Coghlaneb817952017-06-18 12:29:42 +1000327 }
Nick Coghlan6ea41862017-06-11 13:16:15 +1000328
329 /* Reconfigure with the overridden environment variables */
xdegaye1588be62017-11-12 12:45:59 +0100330 _Py_SetLocaleFromEnv(LC_ALL);
Victor Stinner0f721472019-05-20 17:16:38 +0200331 return 1;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000332}
333#endif
334
Victor Stinner0f721472019-05-20 17:16:38 +0200335int
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200336_Py_CoerceLegacyLocale(int warn)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000337{
Victor Stinner0f721472019-05-20 17:16:38 +0200338 int coerced = 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000339#ifdef PY_COERCE_C_LOCALE
Victor Stinner8ea09112018-09-03 17:05:18 +0200340 char *oldloc = NULL;
341
342 oldloc = _PyMem_RawStrdup(setlocale(LC_CTYPE, NULL));
343 if (oldloc == NULL) {
Victor Stinner0f721472019-05-20 17:16:38 +0200344 return coerced;
Victor Stinner8ea09112018-09-03 17:05:18 +0200345 }
346
Victor Stinner94540602017-12-16 04:54:22 +0100347 const char *locale_override = getenv("LC_ALL");
348 if (locale_override == NULL || *locale_override == '\0') {
349 /* LC_ALL is also not set (or is set to an empty string) */
350 const _LocaleCoercionTarget *target = NULL;
351 for (target = _TARGET_LOCALES; target->locale_name; target++) {
352 const char *new_locale = setlocale(LC_CTYPE,
353 target->locale_name);
354 if (new_locale != NULL) {
Victor Stinnere2510952019-05-02 11:28:57 -0400355#if !defined(_Py_FORCE_UTF8_LOCALE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94540602017-12-16 04:54:22 +0100356 /* Also ensure that nl_langinfo works in this locale */
357 char *codeset = nl_langinfo(CODESET);
358 if (!codeset || *codeset == '\0') {
359 /* CODESET is not set or empty, so skip coercion */
360 new_locale = NULL;
361 _Py_SetLocaleFromEnv(LC_CTYPE);
362 continue;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000363 }
Victor Stinner94540602017-12-16 04:54:22 +0100364#endif
365 /* Successfully configured locale, so make it the default */
Victor Stinner0f721472019-05-20 17:16:38 +0200366 coerced = _coerce_default_locale_settings(warn, target);
Victor Stinner8ea09112018-09-03 17:05:18 +0200367 goto done;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000368 }
369 }
370 }
371 /* No C locale warning here, as Py_Initialize will emit one later */
Victor Stinner8ea09112018-09-03 17:05:18 +0200372
373 setlocale(LC_CTYPE, oldloc);
374
375done:
376 PyMem_RawFree(oldloc);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000377#endif
Victor Stinner0f721472019-05-20 17:16:38 +0200378 return coerced;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000379}
380
xdegaye1588be62017-11-12 12:45:59 +0100381/* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to
382 * isolate the idiosyncrasies of different libc implementations. It reads the
383 * appropriate environment variable and uses its value to select the locale for
384 * 'category'. */
385char *
386_Py_SetLocaleFromEnv(int category)
387{
Victor Stinner353933e2018-11-23 13:08:26 +0100388 char *res;
xdegaye1588be62017-11-12 12:45:59 +0100389#ifdef __ANDROID__
390 const char *locale;
391 const char **pvar;
392#ifdef PY_COERCE_C_LOCALE
393 const char *coerce_c_locale;
394#endif
395 const char *utf8_locale = "C.UTF-8";
396 const char *env_var_set[] = {
397 "LC_ALL",
398 "LC_CTYPE",
399 "LANG",
400 NULL,
401 };
402
403 /* Android setlocale(category, "") doesn't check the environment variables
404 * and incorrectly sets the "C" locale at API 24 and older APIs. We only
405 * check the environment variables listed in env_var_set. */
406 for (pvar=env_var_set; *pvar; pvar++) {
407 locale = getenv(*pvar);
408 if (locale != NULL && *locale != '\0') {
409 if (strcmp(locale, utf8_locale) == 0 ||
410 strcmp(locale, "en_US.UTF-8") == 0) {
411 return setlocale(category, utf8_locale);
412 }
413 return setlocale(category, "C");
414 }
415 }
416
417 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
418 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
419 * Quote from POSIX section "8.2 Internationalization Variables":
420 * "4. If the LANG environment variable is not set or is set to the empty
421 * string, the implementation-defined default locale shall be used." */
422
423#ifdef PY_COERCE_C_LOCALE
424 coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
425 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
426 /* Some other ported code may check the environment variables (e.g. in
427 * extension modules), so we make sure that they match the locale
428 * configuration */
429 if (setenv("LC_CTYPE", utf8_locale, 1)) {
430 fprintf(stderr, "Warning: failed setting the LC_CTYPE "
431 "environment variable to %s\n", utf8_locale);
432 }
433 }
434#endif
Victor Stinner353933e2018-11-23 13:08:26 +0100435 res = setlocale(category, utf8_locale);
436#else /* !defined(__ANDROID__) */
437 res = setlocale(category, "");
438#endif
439 _Py_ResetForceASCII();
440 return res;
xdegaye1588be62017-11-12 12:45:59 +0100441}
442
Nick Coghlan6ea41862017-06-11 13:16:15 +1000443
Eric Snow1abcf672017-05-23 21:46:51 -0700444/* Global initializations. Can be undone by Py_Finalize(). Don't
445 call this twice without an intervening Py_Finalize() call.
446
Victor Stinner331a6a52019-05-27 16:39:22 +0200447 Every call to Py_InitializeFromConfig, Py_Initialize or Py_InitializeEx
Eric Snow1abcf672017-05-23 21:46:51 -0700448 must have a corresponding call to Py_Finalize.
449
450 Locking: you must hold the interpreter lock while calling these APIs.
451 (If the lock has not yet been initialized, that's equivalent to
452 having the lock, but you cannot use multiple threads.)
453
454*/
455
Victor Stinner331a6a52019-05-27 16:39:22 +0200456static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200457pyinit_core_reconfigure(_PyRuntimeState *runtime,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200458 PyThreadState **tstate_p,
Victor Stinner331a6a52019-05-27 16:39:22 +0200459 const PyConfig *config)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200460{
Victor Stinner331a6a52019-05-27 16:39:22 +0200461 PyStatus status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100462 PyThreadState *tstate = _PyThreadState_GET();
463 if (!tstate) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200464 return _PyStatus_ERR("failed to read thread state");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100465 }
Victor Stinnerb45d2592019-06-20 00:05:23 +0200466 *tstate_p = tstate;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100467
468 PyInterpreterState *interp = tstate->interp;
469 if (interp == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200470 return _PyStatus_ERR("can't make main interpreter");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100471 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100472
Victor Stinner331a6a52019-05-27 16:39:22 +0200473 _PyConfig_Write(config, runtime);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200474
Victor Stinner331a6a52019-05-27 16:39:22 +0200475 status = _PyConfig_Copy(&interp->config, config);
476 if (_PyStatus_EXCEPTION(status)) {
477 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200478 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200479 config = &interp->config;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200480
Victor Stinner331a6a52019-05-27 16:39:22 +0200481 if (config->_install_importlib) {
Victor Stinner12f2f172019-09-26 15:51:50 +0200482 status = _PyConfig_WritePathConfig(config);
Victor Stinner331a6a52019-05-27 16:39:22 +0200483 if (_PyStatus_EXCEPTION(status)) {
484 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200485 }
486 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200487 return _PyStatus_OK();
Victor Stinner1dc6e392018-07-25 02:49:17 +0200488}
489
490
Victor Stinner331a6a52019-05-27 16:39:22 +0200491static PyStatus
Victor Stinner43125222019-04-24 18:23:53 +0200492pycore_init_runtime(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200493 const PyConfig *config)
Nick Coghland6009512014-11-20 21:39:37 +1000494{
Victor Stinner43125222019-04-24 18:23:53 +0200495 if (runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200496 return _PyStatus_ERR("main interpreter already initialized");
Victor Stinner1dc6e392018-07-25 02:49:17 +0200497 }
Victor Stinnerda273412017-12-15 01:46:02 +0100498
Victor Stinner331a6a52019-05-27 16:39:22 +0200499 _PyConfig_Write(config, runtime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600500
Eric Snow1abcf672017-05-23 21:46:51 -0700501 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
502 * threads behave a little more gracefully at interpreter shutdown.
503 * We clobber it here so the new interpreter can start with a clean
504 * slate.
505 *
506 * However, this may still lead to misbehaviour if there are daemon
507 * threads still hanging around from a previous Py_Initialize/Finalize
508 * pair :(
509 */
Victor Stinner7b3c2522020-03-07 00:24:23 +0100510 _PyRuntimeState_SetFinalizing(runtime, NULL);
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600511
Victor Stinner331a6a52019-05-27 16:39:22 +0200512 PyStatus status = _Py_HashRandomization_Init(config);
513 if (_PyStatus_EXCEPTION(status)) {
514 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800515 }
516
Victor Stinner331a6a52019-05-27 16:39:22 +0200517 status = _PyInterpreterState_Enable(runtime);
518 if (_PyStatus_EXCEPTION(status)) {
519 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -0800520 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200521 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100522}
Victor Stinnera7368ac2017-11-15 18:11:45 -0800523
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100524
Victor Stinner331a6a52019-05-27 16:39:22 +0200525static PyStatus
Victor Stinner43125222019-04-24 18:23:53 +0200526pycore_create_interpreter(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200527 const PyConfig *config,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200528 PyThreadState **tstate_p)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100529{
530 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnerda273412017-12-15 01:46:02 +0100531 if (interp == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200532 return _PyStatus_ERR("can't make main interpreter");
Victor Stinnerda273412017-12-15 01:46:02 +0100533 }
534
Victor Stinner331a6a52019-05-27 16:39:22 +0200535 PyStatus status = _PyConfig_Copy(&interp->config, config);
536 if (_PyStatus_EXCEPTION(status)) {
537 return status;
Victor Stinnerda273412017-12-15 01:46:02 +0100538 }
Nick Coghland6009512014-11-20 21:39:37 +1000539
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200540 PyThreadState *tstate = PyThreadState_New(interp);
Victor Stinnerb45d2592019-06-20 00:05:23 +0200541 if (tstate == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200542 return _PyStatus_ERR("can't make first thread");
Victor Stinnerb45d2592019-06-20 00:05:23 +0200543 }
Nick Coghland6009512014-11-20 21:39:37 +1000544 (void) PyThreadState_Swap(tstate);
545
Victor Stinner99fcc612019-04-29 13:04:07 +0200546 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
547 destroying the GIL might fail when it is being referenced from
548 another running thread (see issue #9901).
Nick Coghland6009512014-11-20 21:39:37 +1000549 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000550 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Victor Stinner09532fe2019-05-10 23:39:09 +0200551 _PyEval_FiniThreads(&runtime->ceval);
Victor Stinner2914bb32018-01-29 11:57:45 +0100552
Nick Coghland6009512014-11-20 21:39:37 +1000553 /* Auto-thread-state API */
Victor Stinner01b1cc12019-11-20 02:27:56 +0100554 _PyGILState_Init(tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000555
Victor Stinner2914bb32018-01-29 11:57:45 +0100556 /* Create the GIL */
Victor Stinner111e4ee2020-03-09 21:24:14 +0100557 status = _PyEval_InitThreads(tstate);
558 if (_PyStatus_EXCEPTION(status)) {
559 return status;
560 }
Victor Stinner2914bb32018-01-29 11:57:45 +0100561
Victor Stinnerb45d2592019-06-20 00:05:23 +0200562 *tstate_p = tstate;
Victor Stinner331a6a52019-05-27 16:39:22 +0200563 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100564}
Nick Coghland6009512014-11-20 21:39:37 +1000565
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100566
Victor Stinner331a6a52019-05-27 16:39:22 +0200567static PyStatus
Victor Stinnerb93f31f2019-11-20 18:39:12 +0100568pycore_init_types(PyThreadState *tstate)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100569{
Victor Stinner444b39b2019-11-20 01:18:11 +0100570 PyStatus status;
Victor Stinnerb93f31f2019-11-20 18:39:12 +0100571 int is_main_interp = _Py_IsMainInterpreter(tstate);
Victor Stinner444b39b2019-11-20 01:18:11 +0100572
Victor Stinner01b1cc12019-11-20 02:27:56 +0100573 status = _PyGC_Init(tstate);
Victor Stinner444b39b2019-11-20 01:18:11 +0100574 if (_PyStatus_EXCEPTION(status)) {
575 return status;
576 }
577
Victor Stinnere7e699e2019-11-20 12:08:13 +0100578 if (is_main_interp) {
579 status = _PyTypes_Init();
580 if (_PyStatus_EXCEPTION(status)) {
581 return status;
582 }
Victor Stinner630c8df2019-12-17 13:02:18 +0100583 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100584
Victor Stinner630c8df2019-12-17 13:02:18 +0100585
586 if (!_PyLong_Init(tstate)) {
587 return _PyStatus_ERR("can't init longs");
Victor Stinnerb93f31f2019-11-20 18:39:12 +0100588 }
Victor Stinneref5aa9a2019-11-20 00:38:03 +0100589
Victor Stinnerb93f31f2019-11-20 18:39:12 +0100590 if (is_main_interp) {
Victor Stinnere7e699e2019-11-20 12:08:13 +0100591 status = _PyUnicode_Init();
592 if (_PyStatus_EXCEPTION(status)) {
593 return status;
594 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100595 }
596
Victor Stinner331a6a52019-05-27 16:39:22 +0200597 status = _PyExc_Init();
598 if (_PyStatus_EXCEPTION(status)) {
599 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100600 }
601
Victor Stinnere7e699e2019-11-20 12:08:13 +0100602 if (is_main_interp) {
603 if (!_PyFloat_Init()) {
604 return _PyStatus_ERR("can't init float");
605 }
Nick Coghland6009512014-11-20 21:39:37 +1000606
Victor Stinnere7e699e2019-11-20 12:08:13 +0100607 if (_PyStructSequence_Init() < 0) {
608 return _PyStatus_ERR("can't initialize structseq");
609 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100610 }
Victor Stinneref9d9b62019-05-22 11:28:22 +0200611
Victor Stinner331a6a52019-05-27 16:39:22 +0200612 status = _PyErr_Init();
613 if (_PyStatus_EXCEPTION(status)) {
614 return status;
Victor Stinneref9d9b62019-05-22 11:28:22 +0200615 }
616
Victor Stinnere7e699e2019-11-20 12:08:13 +0100617 if (is_main_interp) {
618 if (!_PyContext_Init()) {
619 return _PyStatus_ERR("can't init context");
620 }
Victor Stinneref5aa9a2019-11-20 00:38:03 +0100621 }
622
Victor Stinner331a6a52019-05-27 16:39:22 +0200623 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100624}
625
626
Victor Stinner331a6a52019-05-27 16:39:22 +0200627static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200628pycore_init_builtins(PyThreadState *tstate)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100629{
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100630 assert(!_PyErr_Occurred(tstate));
631
Victor Stinnerb45d2592019-06-20 00:05:23 +0200632 PyObject *bimod = _PyBuiltin_Init(tstate);
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100633 if (bimod == NULL) {
Victor Stinner2582d462019-11-22 19:24:49 +0100634 goto error;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100635 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100636
Victor Stinner2582d462019-11-22 19:24:49 +0100637 PyInterpreterState *interp = tstate->interp;
638 if (_PyImport_FixupBuiltin(bimod, "builtins", interp->modules) < 0) {
639 goto error;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100640 }
Victor Stinner2582d462019-11-22 19:24:49 +0100641
642 PyObject *builtins_dict = PyModule_GetDict(bimod);
643 if (builtins_dict == NULL) {
644 goto error;
645 }
646 Py_INCREF(builtins_dict);
647 interp->builtins = builtins_dict;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100648
Victor Stinner331a6a52019-05-27 16:39:22 +0200649 PyStatus status = _PyBuiltins_AddExceptions(bimod);
650 if (_PyStatus_EXCEPTION(status)) {
651 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100652 }
Victor Stinner2582d462019-11-22 19:24:49 +0100653
654 interp->builtins_copy = PyDict_Copy(interp->builtins);
655 if (interp->builtins_copy == NULL) {
656 goto error;
657 }
Pablo Galindob96c6b02019-12-04 11:19:59 +0000658 Py_DECREF(bimod);
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100659
660 assert(!_PyErr_Occurred(tstate));
661
Victor Stinner331a6a52019-05-27 16:39:22 +0200662 return _PyStatus_OK();
Victor Stinner2582d462019-11-22 19:24:49 +0100663
664error:
Pablo Galindob96c6b02019-12-04 11:19:59 +0000665 Py_XDECREF(bimod);
Victor Stinner2582d462019-11-22 19:24:49 +0100666 return _PyStatus_ERR("can't initialize builtins module");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100667}
668
669
Victor Stinner331a6a52019-05-27 16:39:22 +0200670static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200671pycore_init_import_warnings(PyThreadState *tstate, PyObject *sysmod)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100672{
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100673 assert(!_PyErr_Occurred(tstate));
Victor Stinnerb45d2592019-06-20 00:05:23 +0200674
Victor Stinner2582d462019-11-22 19:24:49 +0100675 PyStatus status = _PyImportHooks_Init(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200676 if (_PyStatus_EXCEPTION(status)) {
677 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800678 }
Nick Coghland6009512014-11-20 21:39:37 +1000679
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100680 const PyConfig *config = &tstate->interp->config;
Victor Stinner2ec1a1b2019-11-22 21:54:33 +0100681 if (_Py_IsMainInterpreter(tstate)) {
682 /* Initialize _warnings. */
Victor Stinner66b79732020-03-02 15:02:18 +0100683 status = _PyWarnings_InitState(tstate);
684 if (_PyStatus_EXCEPTION(status)) {
685 return status;
Victor Stinner2ec1a1b2019-11-22 21:54:33 +0100686 }
Nick Coghland6009512014-11-20 21:39:37 +1000687
Victor Stinner2ec1a1b2019-11-22 21:54:33 +0100688 if (config->_install_importlib) {
689 status = _PyConfig_WritePathConfig(config);
690 if (_PyStatus_EXCEPTION(status)) {
691 return status;
692 }
Victor Stinnerb1147e42018-07-21 02:06:16 +0200693 }
694 }
695
Eric Snow1abcf672017-05-23 21:46:51 -0700696 /* This call sets up builtin and frozen import support */
Victor Stinnerb45d2592019-06-20 00:05:23 +0200697 if (config->_install_importlib) {
698 status = init_importlib(tstate, sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200699 if (_PyStatus_EXCEPTION(status)) {
700 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800701 }
Eric Snow1abcf672017-05-23 21:46:51 -0700702 }
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100703
704 assert(!_PyErr_Occurred(tstate));
705
Victor Stinner331a6a52019-05-27 16:39:22 +0200706 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100707}
708
709
Victor Stinner331a6a52019-05-27 16:39:22 +0200710static PyStatus
Victor Stinnerd863ade2019-12-06 03:37:07 +0100711pycore_interp_init(PyThreadState *tstate)
712{
713 PyStatus status;
Victor Stinner080ee5a2019-12-08 21:55:58 +0100714 PyObject *sysmod = NULL;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100715
716 status = pycore_init_types(tstate);
717 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner080ee5a2019-12-08 21:55:58 +0100718 goto done;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100719 }
720
Victor Stinnerd863ade2019-12-06 03:37:07 +0100721 status = _PySys_Create(tstate, &sysmod);
722 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner080ee5a2019-12-08 21:55:58 +0100723 goto done;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100724 }
725
726 status = pycore_init_builtins(tstate);
727 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner080ee5a2019-12-08 21:55:58 +0100728 goto done;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100729 }
730
Victor Stinner080ee5a2019-12-08 21:55:58 +0100731 status = pycore_init_import_warnings(tstate, sysmod);
732
733done:
734 /* sys.modules['sys'] contains a strong reference to the module */
735 Py_XDECREF(sysmod);
736 return status;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100737}
738
739
740static PyStatus
Victor Stinner331a6a52019-05-27 16:39:22 +0200741pyinit_config(_PyRuntimeState *runtime,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200742 PyThreadState **tstate_p,
Victor Stinner331a6a52019-05-27 16:39:22 +0200743 const PyConfig *config)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100744{
Victor Stinner331a6a52019-05-27 16:39:22 +0200745 _PyConfig_Write(config, runtime);
Victor Stinner20004952019-03-26 02:31:11 +0100746
Victor Stinner331a6a52019-05-27 16:39:22 +0200747 PyStatus status = pycore_init_runtime(runtime, config);
748 if (_PyStatus_EXCEPTION(status)) {
749 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100750 }
751
Victor Stinnerb45d2592019-06-20 00:05:23 +0200752 PyThreadState *tstate;
753 status = pycore_create_interpreter(runtime, config, &tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200754 if (_PyStatus_EXCEPTION(status)) {
755 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100756 }
Victor Stinnerb45d2592019-06-20 00:05:23 +0200757 *tstate_p = tstate;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100758
Victor Stinnerd863ade2019-12-06 03:37:07 +0100759 status = pycore_interp_init(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200760 if (_PyStatus_EXCEPTION(status)) {
761 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100762 }
Eric Snow1abcf672017-05-23 21:46:51 -0700763
764 /* Only when we get here is the runtime core fully initialized */
Victor Stinner43125222019-04-24 18:23:53 +0200765 runtime->core_initialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200766 return _PyStatus_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700767}
768
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100769
Victor Stinner331a6a52019-05-27 16:39:22 +0200770PyStatus
771_Py_PreInitializeFromPyArgv(const PyPreConfig *src_config, const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100772{
Victor Stinner331a6a52019-05-27 16:39:22 +0200773 PyStatus status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100774
Victor Stinner6d1c4672019-05-20 11:02:00 +0200775 if (src_config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200776 return _PyStatus_ERR("preinitialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +0200777 }
778
Victor Stinner331a6a52019-05-27 16:39:22 +0200779 status = _PyRuntime_Initialize();
780 if (_PyStatus_EXCEPTION(status)) {
781 return status;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100782 }
Victor Stinner43125222019-04-24 18:23:53 +0200783 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100784
Victor Stinnerd3b90412019-09-17 23:59:51 +0200785 if (runtime->preinitialized) {
Victor Stinnerf72346c2019-03-25 17:54:58 +0100786 /* If it's already configured: ignored the new configuration */
Victor Stinner331a6a52019-05-27 16:39:22 +0200787 return _PyStatus_OK();
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100788 }
789
Victor Stinnerd3b90412019-09-17 23:59:51 +0200790 /* Note: preinitialized remains 1 on error, it is only set to 0
791 at exit on success. */
792 runtime->preinitializing = 1;
793
Victor Stinner331a6a52019-05-27 16:39:22 +0200794 PyPreConfig config;
Victor Stinner441b10c2019-09-28 04:28:35 +0200795
796 status = _PyPreConfig_InitFromPreConfig(&config, src_config);
797 if (_PyStatus_EXCEPTION(status)) {
798 return status;
799 }
Victor Stinnerf72346c2019-03-25 17:54:58 +0100800
Victor Stinner331a6a52019-05-27 16:39:22 +0200801 status = _PyPreConfig_Read(&config, args);
802 if (_PyStatus_EXCEPTION(status)) {
803 return status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100804 }
805
Victor Stinner331a6a52019-05-27 16:39:22 +0200806 status = _PyPreConfig_Write(&config);
807 if (_PyStatus_EXCEPTION(status)) {
808 return status;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100809 }
810
Victor Stinnerd3b90412019-09-17 23:59:51 +0200811 runtime->preinitializing = 0;
812 runtime->preinitialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200813 return _PyStatus_OK();
Victor Stinnerf72346c2019-03-25 17:54:58 +0100814}
815
Victor Stinner70005ac2019-05-02 15:25:34 -0400816
Victor Stinner331a6a52019-05-27 16:39:22 +0200817PyStatus
818Py_PreInitializeFromBytesArgs(const PyPreConfig *src_config, Py_ssize_t argc, char **argv)
Victor Stinnerf72346c2019-03-25 17:54:58 +0100819{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100820 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400821 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100822}
823
824
Victor Stinner331a6a52019-05-27 16:39:22 +0200825PyStatus
826Py_PreInitializeFromArgs(const PyPreConfig *src_config, Py_ssize_t argc, wchar_t **argv)
Victor Stinner20004952019-03-26 02:31:11 +0100827{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100828 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400829 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinner20004952019-03-26 02:31:11 +0100830}
831
832
Victor Stinner331a6a52019-05-27 16:39:22 +0200833PyStatus
834Py_PreInitialize(const PyPreConfig *src_config)
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100835{
Victor Stinner70005ac2019-05-02 15:25:34 -0400836 return _Py_PreInitializeFromPyArgv(src_config, NULL);
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100837}
838
839
Victor Stinner331a6a52019-05-27 16:39:22 +0200840PyStatus
841_Py_PreInitializeFromConfig(const PyConfig *config,
842 const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100843{
Victor Stinner331a6a52019-05-27 16:39:22 +0200844 assert(config != NULL);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200845
Victor Stinner331a6a52019-05-27 16:39:22 +0200846 PyStatus status = _PyRuntime_Initialize();
847 if (_PyStatus_EXCEPTION(status)) {
848 return status;
Victor Stinner6d1c4672019-05-20 11:02:00 +0200849 }
850 _PyRuntimeState *runtime = &_PyRuntime;
851
Victor Stinnerd3b90412019-09-17 23:59:51 +0200852 if (runtime->preinitialized) {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200853 /* Already initialized: do nothing */
Victor Stinner331a6a52019-05-27 16:39:22 +0200854 return _PyStatus_OK();
Victor Stinner70005ac2019-05-02 15:25:34 -0400855 }
Victor Stinnercab5d072019-05-17 19:01:14 +0200856
Victor Stinner331a6a52019-05-27 16:39:22 +0200857 PyPreConfig preconfig;
Victor Stinner441b10c2019-09-28 04:28:35 +0200858
Victor Stinner3c30a762019-10-01 10:56:37 +0200859 _PyPreConfig_InitFromConfig(&preconfig, config);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200860
Victor Stinner331a6a52019-05-27 16:39:22 +0200861 if (!config->parse_argv) {
862 return Py_PreInitialize(&preconfig);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200863 }
864 else if (args == NULL) {
Victor Stinnercab5d072019-05-17 19:01:14 +0200865 _PyArgv config_args = {
866 .use_bytes_argv = 0,
Victor Stinner331a6a52019-05-27 16:39:22 +0200867 .argc = config->argv.length,
868 .wchar_argv = config->argv.items};
Victor Stinner6d1c4672019-05-20 11:02:00 +0200869 return _Py_PreInitializeFromPyArgv(&preconfig, &config_args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200870 }
871 else {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200872 return _Py_PreInitializeFromPyArgv(&preconfig, args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200873 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100874}
875
876
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100877/* Begin interpreter initialization
878 *
879 * On return, the first thread and interpreter state have been created,
880 * but the compiler, signal handling, multithreading and
881 * multiple interpreter support, and codec infrastructure are not yet
882 * available.
883 *
884 * The import system will support builtin and frozen modules only.
885 * The only supported io is writing to sys.stderr
886 *
887 * If any operation invoked by this function fails, a fatal error is
888 * issued and the function does not return.
889 *
890 * Any code invoked from this function should *not* assume it has access
891 * to the Python C API (unless the API is explicitly listed as being
892 * safe to call without calling Py_Initialize first)
893 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200894static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200895pyinit_core(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200896 const PyConfig *src_config,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200897 PyThreadState **tstate_p)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200898{
Victor Stinner331a6a52019-05-27 16:39:22 +0200899 PyStatus status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200900
Victor Stinner331a6a52019-05-27 16:39:22 +0200901 status = _Py_PreInitializeFromConfig(src_config, NULL);
902 if (_PyStatus_EXCEPTION(status)) {
903 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200904 }
905
Victor Stinner331a6a52019-05-27 16:39:22 +0200906 PyConfig config;
Victor Stinner8462a492019-10-01 12:06:16 +0200907 _PyConfig_InitCompatConfig(&config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200908
Victor Stinner331a6a52019-05-27 16:39:22 +0200909 status = _PyConfig_Copy(&config, src_config);
910 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200911 goto done;
912 }
913
Victor Stinner331a6a52019-05-27 16:39:22 +0200914 status = PyConfig_Read(&config);
915 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200916 goto done;
917 }
918
919 if (!runtime->core_initialized) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200920 status = pyinit_config(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200921 }
922 else {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200923 status = pyinit_core_reconfigure(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200924 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200925 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200926 goto done;
927 }
928
929done:
Victor Stinner331a6a52019-05-27 16:39:22 +0200930 PyConfig_Clear(&config);
931 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200932}
933
Victor Stinner5ac27a52019-03-27 13:40:14 +0100934
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200935/* Py_Initialize() has already been called: update the main interpreter
936 configuration. Example of bpo-34008: Py_Main() called after
937 Py_Initialize(). */
Victor Stinner331a6a52019-05-27 16:39:22 +0200938static PyStatus
Victor Stinnerb0051362019-11-22 17:52:42 +0100939_Py_ReconfigureMainInterpreter(PyThreadState *tstate)
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200940{
Victor Stinnerb0051362019-11-22 17:52:42 +0100941 PyConfig *config = &tstate->interp->config;
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100942
Victor Stinner331a6a52019-05-27 16:39:22 +0200943 PyObject *argv = _PyWideStringList_AsList(&config->argv);
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100944 if (argv == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200945 return _PyStatus_NO_MEMORY(); \
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100946 }
947
Victor Stinnerb0051362019-11-22 17:52:42 +0100948 int res = PyDict_SetItemString(tstate->interp->sysdict, "argv", argv);
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100949 Py_DECREF(argv);
950 if (res < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200951 return _PyStatus_ERR("fail to set sys.argv");
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200952 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200953 return _PyStatus_OK();
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200954}
955
Victor Stinnerb0051362019-11-22 17:52:42 +0100956
957static PyStatus
958init_interp_main(PyThreadState *tstate)
959{
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100960 assert(!_PyErr_Occurred(tstate));
961
Victor Stinnerb0051362019-11-22 17:52:42 +0100962 PyStatus status;
963 int is_main_interp = _Py_IsMainInterpreter(tstate);
964 PyInterpreterState *interp = tstate->interp;
965 PyConfig *config = &interp->config;
966
967 if (!config->_install_importlib) {
968 /* Special mode for freeze_importlib: run with no import system
969 *
970 * This means anything which needs support from extension modules
971 * or pure Python code in the standard library won't work.
972 */
973 if (is_main_interp) {
974 interp->runtime->initialized = 1;
975 }
976 return _PyStatus_OK();
977 }
978
979 if (is_main_interp) {
980 if (_PyTime_Init() < 0) {
981 return _PyStatus_ERR("can't initialize time");
982 }
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100983 }
Victor Stinnerb0051362019-11-22 17:52:42 +0100984
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100985 if (_PySys_InitMain(tstate) < 0) {
986 return _PyStatus_ERR("can't finish initializing sys");
Victor Stinnerb0051362019-11-22 17:52:42 +0100987 }
988
989 status = init_importlib_external(tstate);
990 if (_PyStatus_EXCEPTION(status)) {
991 return status;
992 }
993
994 if (is_main_interp) {
995 /* initialize the faulthandler module */
996 status = _PyFaulthandler_Init(config->faulthandler);
997 if (_PyStatus_EXCEPTION(status)) {
998 return status;
999 }
1000 }
1001
1002 status = _PyUnicode_InitEncodings(tstate);
1003 if (_PyStatus_EXCEPTION(status)) {
1004 return status;
1005 }
1006
1007 if (is_main_interp) {
1008 if (config->install_signal_handlers) {
1009 status = init_signals(tstate);
1010 if (_PyStatus_EXCEPTION(status)) {
1011 return status;
1012 }
1013 }
1014
1015 if (_PyTraceMalloc_Init(config->tracemalloc) < 0) {
1016 return _PyStatus_ERR("can't initialize tracemalloc");
1017 }
1018 }
1019
1020 status = init_sys_streams(tstate);
1021 if (_PyStatus_EXCEPTION(status)) {
1022 return status;
1023 }
1024
1025 status = init_set_builtins_open(tstate);
1026 if (_PyStatus_EXCEPTION(status)) {
1027 return status;
1028 }
1029
1030 status = add_main_module(interp);
1031 if (_PyStatus_EXCEPTION(status)) {
1032 return status;
1033 }
1034
1035 if (is_main_interp) {
1036 /* Initialize warnings. */
1037 PyObject *warnoptions = PySys_GetObject("warnoptions");
1038 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
1039 {
1040 PyObject *warnings_module = PyImport_ImportModule("warnings");
1041 if (warnings_module == NULL) {
1042 fprintf(stderr, "'import warnings' failed; traceback:\n");
1043 _PyErr_Print(tstate);
1044 }
1045 Py_XDECREF(warnings_module);
1046 }
1047
1048 interp->runtime->initialized = 1;
1049 }
1050
1051 if (config->site_import) {
1052 status = init_import_site();
1053 if (_PyStatus_EXCEPTION(status)) {
1054 return status;
1055 }
1056 }
1057
1058 if (is_main_interp) {
1059#ifndef MS_WINDOWS
1060 emit_stderr_warning_for_legacy_locale(interp->runtime);
1061#endif
1062 }
1063
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001064 assert(!_PyErr_Occurred(tstate));
1065
Victor Stinnerb0051362019-11-22 17:52:42 +01001066 return _PyStatus_OK();
1067}
1068
1069
Eric Snowc7ec9982017-05-23 23:00:52 -07001070/* Update interpreter state based on supplied configuration settings
1071 *
1072 * After calling this function, most of the restrictions on the interpreter
1073 * are lifted. The only remaining incomplete settings are those related
1074 * to the main module (sys.argv[0], __main__ metadata)
1075 *
1076 * Calling this when the interpreter is not initializing, is already
1077 * initialized or without a valid current thread state is a fatal error.
1078 * Other errors should be reported as normal Python exceptions with a
1079 * non-zero return code.
1080 */
Victor Stinner331a6a52019-05-27 16:39:22 +02001081static PyStatus
Victor Stinner01b1cc12019-11-20 02:27:56 +01001082pyinit_main(PyThreadState *tstate)
Eric Snow1abcf672017-05-23 21:46:51 -07001083{
Victor Stinnerb0051362019-11-22 17:52:42 +01001084 PyInterpreterState *interp = tstate->interp;
1085 if (!interp->runtime->core_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001086 return _PyStatus_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -07001087 }
Eric Snowc7ec9982017-05-23 23:00:52 -07001088
Victor Stinnerb0051362019-11-22 17:52:42 +01001089 if (interp->runtime->initialized) {
1090 return _Py_ReconfigureMainInterpreter(tstate);
Victor Stinnerfb47bca2018-07-20 17:34:23 +02001091 }
1092
Victor Stinnerb0051362019-11-22 17:52:42 +01001093 PyStatus status = init_interp_main(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001094 if (_PyStatus_EXCEPTION(status)) {
1095 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001096 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001097 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001098}
1099
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001100
Victor Stinner331a6a52019-05-27 16:39:22 +02001101PyStatus
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001102_Py_InitializeMain(void)
1103{
Victor Stinner331a6a52019-05-27 16:39:22 +02001104 PyStatus status = _PyRuntime_Initialize();
1105 if (_PyStatus_EXCEPTION(status)) {
1106 return status;
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001107 }
1108 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinnerb45d2592019-06-20 00:05:23 +02001109 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
Victor Stinner01b1cc12019-11-20 02:27:56 +01001110 return pyinit_main(tstate);
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001111}
1112
1113
Victor Stinner331a6a52019-05-27 16:39:22 +02001114PyStatus
1115Py_InitializeFromConfig(const PyConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -07001116{
Victor Stinner6d1c4672019-05-20 11:02:00 +02001117 if (config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001118 return _PyStatus_ERR("initialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +02001119 }
1120
Victor Stinner331a6a52019-05-27 16:39:22 +02001121 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001122
Victor Stinner331a6a52019-05-27 16:39:22 +02001123 status = _PyRuntime_Initialize();
1124 if (_PyStatus_EXCEPTION(status)) {
1125 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001126 }
1127 _PyRuntimeState *runtime = &_PyRuntime;
1128
Victor Stinnerb45d2592019-06-20 00:05:23 +02001129 PyThreadState *tstate = NULL;
1130 status = pyinit_core(runtime, config, &tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001131 if (_PyStatus_EXCEPTION(status)) {
1132 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001133 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001134 config = &tstate->interp->config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +01001135
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001136 if (config->_init_main) {
Victor Stinner01b1cc12019-11-20 02:27:56 +01001137 status = pyinit_main(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001138 if (_PyStatus_EXCEPTION(status)) {
1139 return status;
Victor Stinner484f20d2019-03-27 02:04:16 +01001140 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001141 }
Victor Stinner484f20d2019-03-27 02:04:16 +01001142
Victor Stinner331a6a52019-05-27 16:39:22 +02001143 return _PyStatus_OK();
Victor Stinner5ac27a52019-03-27 13:40:14 +01001144}
1145
1146
Eric Snow1abcf672017-05-23 21:46:51 -07001147void
Nick Coghland6009512014-11-20 21:39:37 +10001148Py_InitializeEx(int install_sigs)
1149{
Victor Stinner331a6a52019-05-27 16:39:22 +02001150 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001151
Victor Stinner331a6a52019-05-27 16:39:22 +02001152 status = _PyRuntime_Initialize();
1153 if (_PyStatus_EXCEPTION(status)) {
1154 Py_ExitStatusException(status);
Victor Stinner43125222019-04-24 18:23:53 +02001155 }
1156 _PyRuntimeState *runtime = &_PyRuntime;
1157
1158 if (runtime->initialized) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001159 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
1160 return;
1161 }
1162
Victor Stinner331a6a52019-05-27 16:39:22 +02001163 PyConfig config;
Victor Stinner8462a492019-10-01 12:06:16 +02001164 _PyConfig_InitCompatConfig(&config);
Victor Stinner441b10c2019-09-28 04:28:35 +02001165
Victor Stinner1dc6e392018-07-25 02:49:17 +02001166 config.install_signal_handlers = install_sigs;
1167
Victor Stinner331a6a52019-05-27 16:39:22 +02001168 status = Py_InitializeFromConfig(&config);
1169 if (_PyStatus_EXCEPTION(status)) {
1170 Py_ExitStatusException(status);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001171 }
Nick Coghland6009512014-11-20 21:39:37 +10001172}
1173
1174void
1175Py_Initialize(void)
1176{
1177 Py_InitializeEx(1);
1178}
1179
1180
Nick Coghland6009512014-11-20 21:39:37 +10001181/* Flush stdout and stderr */
1182
1183static int
1184file_is_closed(PyObject *fobj)
1185{
1186 int r;
1187 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1188 if (tmp == NULL) {
1189 PyErr_Clear();
1190 return 0;
1191 }
1192 r = PyObject_IsTrue(tmp);
1193 Py_DECREF(tmp);
1194 if (r < 0)
1195 PyErr_Clear();
1196 return r > 0;
1197}
1198
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001199static int
Nick Coghland6009512014-11-20 21:39:37 +10001200flush_std_files(void)
1201{
1202 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1203 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1204 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001205 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001206
1207 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001208 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001209 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001210 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001211 status = -1;
1212 }
Nick Coghland6009512014-11-20 21:39:37 +10001213 else
1214 Py_DECREF(tmp);
1215 }
1216
1217 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001218 tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001219 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001220 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001221 status = -1;
1222 }
Nick Coghland6009512014-11-20 21:39:37 +10001223 else
1224 Py_DECREF(tmp);
1225 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001226
1227 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001228}
1229
1230/* Undo the effect of Py_Initialize().
1231
1232 Beware: if multiple interpreter and/or thread states exist, these
1233 are not wiped out; only the current thread and interpreter state
1234 are deleted. But since everything else is deleted, those other
1235 interpreter and thread states should no longer be used.
1236
1237 (XXX We should do better, e.g. wipe out all interpreters and
1238 threads.)
1239
1240 Locking: as above.
1241
1242*/
1243
Victor Stinner7eee5be2019-11-20 10:38:34 +01001244
1245static void
1246finalize_interp_types(PyThreadState *tstate, int is_main_interp)
1247{
1248 if (is_main_interp) {
1249 /* Sundry finalizers */
Victor Stinner7eee5be2019-11-20 10:38:34 +01001250 _PyFrame_Fini();
Victor Stinner7eee5be2019-11-20 10:38:34 +01001251 _PyTuple_Fini();
1252 _PyList_Fini();
1253 _PySet_Fini();
1254 _PyBytes_Fini();
Victor Stinner630c8df2019-12-17 13:02:18 +01001255 }
1256
1257 _PyLong_Fini(tstate);
1258
1259 if (is_main_interp) {
Victor Stinner7eee5be2019-11-20 10:38:34 +01001260 _PyFloat_Fini();
1261 _PyDict_Fini();
1262 _PySlice_Fini();
1263 }
1264
1265 _PyWarnings_Fini(tstate->interp);
1266
1267 if (is_main_interp) {
1268 _Py_HashRandomization_Fini();
1269 _PyArg_Fini();
1270 _PyAsyncGen_Fini();
1271 _PyContext_Fini();
Victor Stinner3d483342019-11-22 12:27:50 +01001272 }
Victor Stinner7eee5be2019-11-20 10:38:34 +01001273
Victor Stinner3d483342019-11-22 12:27:50 +01001274 /* Cleanup Unicode implementation */
1275 _PyUnicode_Fini(tstate);
1276
1277 if (is_main_interp) {
Victor Stinner7eee5be2019-11-20 10:38:34 +01001278 _Py_ClearFileSystemEncoding();
1279 }
1280}
1281
1282
1283static void
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001284finalize_interp_clear(PyThreadState *tstate)
Victor Stinner7eee5be2019-11-20 10:38:34 +01001285{
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001286 int is_main_interp = _Py_IsMainInterpreter(tstate);
1287
Victor Stinner7eee5be2019-11-20 10:38:34 +01001288 /* Clear interpreter state and all thread states */
1289 PyInterpreterState_Clear(tstate->interp);
1290
Pablo Galindoac0e1c22019-12-04 11:51:03 +00001291 /* Trigger a GC collection on subinterpreters*/
1292 if (!is_main_interp) {
1293 _PyGC_CollectNoFail();
1294 }
1295
Victor Stinner7eee5be2019-11-20 10:38:34 +01001296 finalize_interp_types(tstate, is_main_interp);
1297
1298 if (is_main_interp) {
1299 /* XXX Still allocated:
1300 - various static ad-hoc pointers to interned strings
1301 - int and float free list blocks
1302 - whatever various modules and libraries allocate
1303 */
1304
1305 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1306
1307 _PyExc_Fini();
Victor Stinner7eee5be2019-11-20 10:38:34 +01001308 }
Victor Stinner72474072019-11-20 12:25:50 +01001309
1310 _PyGC_Fini(tstate);
Victor Stinner7eee5be2019-11-20 10:38:34 +01001311}
1312
1313
1314static void
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001315finalize_interp_delete(PyThreadState *tstate)
Victor Stinner7eee5be2019-11-20 10:38:34 +01001316{
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001317 if (_Py_IsMainInterpreter(tstate)) {
Victor Stinner7eee5be2019-11-20 10:38:34 +01001318 /* Cleanup auto-thread-state */
1319 _PyGILState_Fini(tstate);
1320 }
1321
Victor Stinner7eee5be2019-11-20 10:38:34 +01001322 PyInterpreterState_Delete(tstate->interp);
1323}
1324
1325
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001326int
1327Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001328{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001329 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001330
Victor Stinner8e91c242019-04-24 17:24:01 +02001331 _PyRuntimeState *runtime = &_PyRuntime;
1332 if (!runtime->initialized) {
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001333 return status;
Victor Stinner8e91c242019-04-24 17:24:01 +02001334 }
Nick Coghland6009512014-11-20 21:39:37 +10001335
Victor Stinnere225beb2019-06-03 18:14:24 +02001336 /* Get current thread state and interpreter pointer */
1337 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
1338 PyInterpreterState *interp = tstate->interp;
Victor Stinner8e91c242019-04-24 17:24:01 +02001339
Victor Stinnerb45d2592019-06-20 00:05:23 +02001340 // Wrap up existing "threading"-module-created, non-daemon threads.
1341 wait_for_thread_shutdown(tstate);
1342
1343 // Make any remaining pending calls.
Victor Stinner2b1df452020-01-13 18:46:59 +01001344 _Py_FinishPendingCalls(tstate);
Victor Stinnerb45d2592019-06-20 00:05:23 +02001345
Nick Coghland6009512014-11-20 21:39:37 +10001346 /* The interpreter is still entirely intact at this point, and the
1347 * exit funcs may be relying on that. In particular, if some thread
1348 * or exit func is still waiting to do an import, the import machinery
1349 * expects Py_IsInitialized() to return true. So don't say the
Eric Snow842a2f02019-03-15 15:47:51 -06001350 * runtime is uninitialized until after the exit funcs have run.
Nick Coghland6009512014-11-20 21:39:37 +10001351 * Note that Threading.py uses an exit func to do a join on all the
1352 * threads created thru it, so this also protects pending imports in
1353 * the threads created via Threading.
1354 */
Nick Coghland6009512014-11-20 21:39:37 +10001355
Victor Stinnerb45d2592019-06-20 00:05:23 +02001356 call_py_exitfuncs(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001357
Victor Stinnerda273412017-12-15 01:46:02 +01001358 /* Copy the core config, PyInterpreterState_Delete() free
1359 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001360#ifdef Py_REF_DEBUG
Victor Stinner331a6a52019-05-27 16:39:22 +02001361 int show_ref_count = interp->config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001362#endif
1363#ifdef Py_TRACE_REFS
Victor Stinner331a6a52019-05-27 16:39:22 +02001364 int dump_refs = interp->config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001365#endif
1366#ifdef WITH_PYMALLOC
Victor Stinner331a6a52019-05-27 16:39:22 +02001367 int malloc_stats = interp->config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001368#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001369
Victor Stinnereb4e2ae2020-03-08 11:57:45 +01001370 /* Remaining daemon threads will automatically exit
1371 when they attempt to take the GIL (ex: PyEval_RestoreThread()). */
Victor Stinner7b3c2522020-03-07 00:24:23 +01001372 _PyRuntimeState_SetFinalizing(runtime, tstate);
Victor Stinner8e91c242019-04-24 17:24:01 +02001373 runtime->initialized = 0;
1374 runtime->core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001375
Victor Stinner9ad58ac2020-03-09 23:37:49 +01001376 /* Destroy the state of all threads of the interpreter, except of the
1377 current thread. In practice, only daemon threads should still be alive,
1378 except if wait_for_thread_shutdown() has been cancelled by CTRL+C.
1379 Clear frames of other threads to call objects destructors. Destructors
1380 will be called in the current Python thread. Since
1381 _PyRuntimeState_SetFinalizing() has been called, no other Python thread
1382 can take the GIL at this point: if they try, they will exit
1383 immediately. */
1384 _PyThreadState_DeleteExcept(runtime, tstate);
1385
Victor Stinnere0deff32015-03-24 13:46:18 +01001386 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001387 if (flush_std_files() < 0) {
1388 status = -1;
1389 }
Nick Coghland6009512014-11-20 21:39:37 +10001390
1391 /* Disable signal handling */
1392 PyOS_FiniInterrupts();
1393
1394 /* Collect garbage. This may call finalizers; it's nice to call these
1395 * before all modules are destroyed.
1396 * XXX If a __del__ or weakref callback is triggered here, and tries to
1397 * XXX import a module, bad things can happen, because Python no
1398 * XXX longer believes it's initialized.
1399 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1400 * XXX is easy to provoke that way. I've also seen, e.g.,
1401 * XXX Exception exceptions.ImportError: 'No module named sha'
1402 * XXX in <function callback at 0x008F5718> ignored
1403 * XXX but I'm unclear on exactly how that one happens. In any case,
1404 * XXX I haven't seen a real-life report of either of these.
1405 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001406 _PyGC_CollectIfEnabled();
Eric Snowdae02762017-09-14 00:35:58 -07001407
Steve Dowerb82e17e2019-05-23 08:45:22 -07001408 /* Clear all loghooks */
1409 /* We want minimal exposure of this function, so define the extern
1410 * here. The linker should discover the correct function without
1411 * exporting a symbol. */
1412 extern void _PySys_ClearAuditHooks(void);
1413 _PySys_ClearAuditHooks();
1414
Nick Coghland6009512014-11-20 21:39:37 +10001415 /* Destroy all modules */
Victor Stinner987a0dc2019-06-19 10:36:10 +02001416 _PyImport_Cleanup(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001417
Inada Naoki91234a12019-06-03 21:30:58 +09001418 /* Print debug stats if any */
1419 _PyEval_Fini();
1420
Victor Stinnere0deff32015-03-24 13:46:18 +01001421 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001422 if (flush_std_files() < 0) {
1423 status = -1;
1424 }
Nick Coghland6009512014-11-20 21:39:37 +10001425
1426 /* Collect final garbage. This disposes of cycles created by
1427 * class definitions, for example.
1428 * XXX This is disabled because it caused too many problems. If
1429 * XXX a __del__ or weakref callback triggers here, Python code has
1430 * XXX a hard time running, because even the sys module has been
1431 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1432 * XXX One symptom is a sequence of information-free messages
1433 * XXX coming from threads (if a __del__ or callback is invoked,
1434 * XXX other threads can execute too, and any exception they encounter
1435 * XXX triggers a comedy of errors as subsystem after subsystem
1436 * XXX fails to find what it *expects* to find in sys to help report
1437 * XXX the exception and consequent unexpected failures). I've also
1438 * XXX seen segfaults then, after adding print statements to the
1439 * XXX Python code getting called.
1440 */
1441#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001442 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001443#endif
1444
1445 /* Disable tracemalloc after all Python objects have been destroyed,
1446 so it is possible to use tracemalloc in objects destructor. */
1447 _PyTraceMalloc_Fini();
1448
1449 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1450 _PyImport_Fini();
1451
1452 /* Cleanup typeobject.c's internal caches. */
1453 _PyType_Fini();
1454
1455 /* unload faulthandler module */
1456 _PyFaulthandler_Fini();
1457
Nick Coghland6009512014-11-20 21:39:37 +10001458 /* dump hash stats */
1459 _PyHash_Fini();
1460
Eric Snowdae02762017-09-14 00:35:58 -07001461#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001462 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001463 _PyDebug_PrintTotalRefs();
1464 }
Eric Snowdae02762017-09-14 00:35:58 -07001465#endif
Nick Coghland6009512014-11-20 21:39:37 +10001466
1467#ifdef Py_TRACE_REFS
1468 /* Display all objects still alive -- this can invoke arbitrary
1469 * __repr__ overrides, so requires a mostly-intact interpreter.
1470 * Alas, a lot of stuff may still be alive now that will be cleaned
1471 * up later.
1472 */
Victor Stinnerda273412017-12-15 01:46:02 +01001473 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001474 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001475 }
Nick Coghland6009512014-11-20 21:39:37 +10001476#endif /* Py_TRACE_REFS */
1477
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001478 finalize_interp_clear(tstate);
1479 finalize_interp_delete(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001480
1481#ifdef Py_TRACE_REFS
1482 /* Display addresses (& refcnts) of all objects still alive.
1483 * An address can be used to find the repr of the object, printed
1484 * above by _Py_PrintReferences.
1485 */
Victor Stinnerda273412017-12-15 01:46:02 +01001486 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001487 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001488 }
Nick Coghland6009512014-11-20 21:39:37 +10001489#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001490#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001491 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001492 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be8072016-03-14 12:04:26 +01001493 }
Nick Coghland6009512014-11-20 21:39:37 +10001494#endif
1495
Victor Stinner8e91c242019-04-24 17:24:01 +02001496 call_ll_exitfuncs(runtime);
Victor Stinner9316ee42017-11-25 03:17:57 +01001497
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001498 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001499 return status;
1500}
1501
1502void
1503Py_Finalize(void)
1504{
1505 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001506}
1507
Victor Stinnerb0051362019-11-22 17:52:42 +01001508
Nick Coghland6009512014-11-20 21:39:37 +10001509/* Create and initialize a new interpreter and thread, and return the
1510 new thread. This requires that Py_Initialize() has been called
1511 first.
1512
1513 Unsuccessful initialization yields a NULL pointer. Note that *no*
1514 exception information is available even in this case -- the
1515 exception information is held in the thread, and there is no
1516 thread.
1517
1518 Locking: as above.
1519
1520*/
1521
Victor Stinner331a6a52019-05-27 16:39:22 +02001522static PyStatus
Victor Stinnera7368ac2017-11-15 18:11:45 -08001523new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001524{
Victor Stinner331a6a52019-05-27 16:39:22 +02001525 PyStatus status;
Nick Coghland6009512014-11-20 21:39:37 +10001526
Victor Stinner331a6a52019-05-27 16:39:22 +02001527 status = _PyRuntime_Initialize();
1528 if (_PyStatus_EXCEPTION(status)) {
1529 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001530 }
1531 _PyRuntimeState *runtime = &_PyRuntime;
1532
1533 if (!runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001534 return _PyStatus_ERR("Py_Initialize must be called first");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001535 }
Nick Coghland6009512014-11-20 21:39:37 +10001536
Victor Stinner8a1be612016-03-14 22:07:55 +01001537 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1538 interpreters: disable PyGILState_Check(). */
1539 _PyGILState_check_enabled = 0;
1540
Victor Stinner43125222019-04-24 18:23:53 +02001541 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001542 if (interp == NULL) {
1543 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001544 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001545 }
Nick Coghland6009512014-11-20 21:39:37 +10001546
Victor Stinner43125222019-04-24 18:23:53 +02001547 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001548 if (tstate == NULL) {
1549 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001550 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001551 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001552 }
1553
Victor Stinner43125222019-04-24 18:23:53 +02001554 PyThreadState *save_tstate = PyThreadState_Swap(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001555
Eric Snow1abcf672017-05-23 21:46:51 -07001556 /* Copy the current interpreter config into the new interpreter */
Victor Stinner331a6a52019-05-27 16:39:22 +02001557 PyConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001558 if (save_tstate != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001559 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001560 } else {
1561 /* No current thread state, copy from the main interpreter */
1562 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinner331a6a52019-05-27 16:39:22 +02001563 config = &main_interp->config;
Victor Stinnerda273412017-12-15 01:46:02 +01001564 }
1565
Victor Stinner331a6a52019-05-27 16:39:22 +02001566 status = _PyConfig_Copy(&interp->config, config);
1567 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001568 goto error;
Victor Stinnerda273412017-12-15 01:46:02 +01001569 }
Eric Snow1abcf672017-05-23 21:46:51 -07001570
Victor Stinnerd863ade2019-12-06 03:37:07 +01001571 status = pycore_interp_init(tstate);
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001572 if (_PyStatus_EXCEPTION(status)) {
1573 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001574 }
1575
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001576 status = init_interp_main(tstate);
1577 if (_PyStatus_EXCEPTION(status)) {
1578 goto error;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001579 }
Nick Coghland6009512014-11-20 21:39:37 +10001580
Victor Stinnera7368ac2017-11-15 18:11:45 -08001581 *tstate_p = tstate;
Victor Stinner331a6a52019-05-27 16:39:22 +02001582 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001583
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001584error:
Victor Stinnerb0051362019-11-22 17:52:42 +01001585 *tstate_p = NULL;
1586
1587 /* Oops, it didn't work. Undo it all. */
Nick Coghland6009512014-11-20 21:39:37 +10001588 PyErr_PrintEx(0);
1589 PyThreadState_Clear(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001590 PyThreadState_Delete(tstate);
1591 PyInterpreterState_Delete(interp);
Victor Stinner9da74302019-11-20 11:17:17 +01001592 PyThreadState_Swap(save_tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001593
Victor Stinnerb0051362019-11-22 17:52:42 +01001594 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001595}
1596
1597PyThreadState *
1598Py_NewInterpreter(void)
1599{
Stéphane Wirtel9e06d2b2019-03-18 17:10:29 +01001600 PyThreadState *tstate = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001601 PyStatus status = new_interpreter(&tstate);
1602 if (_PyStatus_EXCEPTION(status)) {
1603 Py_ExitStatusException(status);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001604 }
1605 return tstate;
1606
Nick Coghland6009512014-11-20 21:39:37 +10001607}
1608
1609/* Delete an interpreter and its last thread. This requires that the
1610 given thread state is current, that the thread has no remaining
1611 frames, and that it is its interpreter's only remaining thread.
1612 It is a fatal error to violate these constraints.
1613
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001614 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001615 everything, regardless.)
1616
1617 Locking: as above.
1618
1619*/
1620
1621void
1622Py_EndInterpreter(PyThreadState *tstate)
1623{
1624 PyInterpreterState *interp = tstate->interp;
1625
Victor Stinnerb45d2592019-06-20 00:05:23 +02001626 if (tstate != _PyThreadState_GET()) {
Victor Stinner9e5d30c2020-03-07 00:54:20 +01001627 Py_FatalError("thread is not current");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001628 }
1629 if (tstate->frame != NULL) {
Victor Stinner9e5d30c2020-03-07 00:54:20 +01001630 Py_FatalError("thread still has a frame");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001631 }
Eric Snow5be45a62019-03-08 22:47:07 -07001632 interp->finalizing = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001633
Eric Snow842a2f02019-03-15 15:47:51 -06001634 // Wrap up existing "threading"-module-created, non-daemon threads.
Victor Stinnerb45d2592019-06-20 00:05:23 +02001635 wait_for_thread_shutdown(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001636
Victor Stinnerb45d2592019-06-20 00:05:23 +02001637 call_py_exitfuncs(tstate);
Marcel Plch776407f2017-12-20 11:17:58 +01001638
Victor Stinnerb45d2592019-06-20 00:05:23 +02001639 if (tstate != interp->tstate_head || tstate->next != NULL) {
Victor Stinner9e5d30c2020-03-07 00:54:20 +01001640 Py_FatalError("not the last thread");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001641 }
Nick Coghland6009512014-11-20 21:39:37 +10001642
Victor Stinner987a0dc2019-06-19 10:36:10 +02001643 _PyImport_Cleanup(tstate);
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001644 finalize_interp_clear(tstate);
1645 finalize_interp_delete(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001646}
1647
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001648/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001649
Victor Stinner331a6a52019-05-27 16:39:22 +02001650static PyStatus
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001651add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001652{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001653 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001654 m = PyImport_AddModule("__main__");
1655 if (m == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +02001656 return _PyStatus_ERR("can't create __main__ module");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001657
Nick Coghland6009512014-11-20 21:39:37 +10001658 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001659 ann_dict = PyDict_New();
1660 if ((ann_dict == NULL) ||
1661 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001662 return _PyStatus_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001663 }
1664 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001665
Nick Coghland6009512014-11-20 21:39:37 +10001666 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1667 PyObject *bimod = PyImport_ImportModule("builtins");
1668 if (bimod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001669 return _PyStatus_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001670 }
1671 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001672 return _PyStatus_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001673 }
1674 Py_DECREF(bimod);
1675 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001676
Nick Coghland6009512014-11-20 21:39:37 +10001677 /* Main is a little special - imp.is_builtin("__main__") will return
1678 * False, but BuiltinImporter is still the most appropriate initial
1679 * setting for its __loader__ attribute. A more suitable value will
1680 * be set if __main__ gets further initialized later in the startup
1681 * process.
1682 */
1683 loader = PyDict_GetItemString(d, "__loader__");
1684 if (loader == NULL || loader == Py_None) {
1685 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1686 "BuiltinImporter");
1687 if (loader == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001688 return _PyStatus_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001689 }
1690 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001691 return _PyStatus_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001692 }
1693 Py_DECREF(loader);
1694 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001695 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001696}
1697
Nick Coghland6009512014-11-20 21:39:37 +10001698/* Import the site module (not into __main__ though) */
1699
Victor Stinner331a6a52019-05-27 16:39:22 +02001700static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001701init_import_site(void)
Nick Coghland6009512014-11-20 21:39:37 +10001702{
1703 PyObject *m;
1704 m = PyImport_ImportModule("site");
1705 if (m == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001706 return _PyStatus_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001707 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001708 Py_DECREF(m);
Victor Stinner331a6a52019-05-27 16:39:22 +02001709 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001710}
1711
Victor Stinner874dbe82015-09-04 17:29:57 +02001712/* Check if a file descriptor is valid or not.
1713 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1714static int
1715is_valid_fd(int fd)
1716{
Victor Stinner3092d6b2019-04-17 18:09:12 +02001717/* dup() is faster than fstat(): fstat() can require input/output operations,
1718 whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python
1719 startup. Problem: dup() doesn't check if the file descriptor is valid on
1720 some platforms.
1721
1722 bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other
1723 side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with
1724 EBADF. FreeBSD has similar issue (bpo-32849).
1725
1726 Only use dup() on platforms where dup() is enough to detect invalid FD in
1727 corner cases: on Linux and Windows (bpo-32849). */
1728#if defined(__linux__) || defined(MS_WINDOWS)
1729 if (fd < 0) {
1730 return 0;
1731 }
1732 int fd2;
1733
1734 _Py_BEGIN_SUPPRESS_IPH
1735 fd2 = dup(fd);
1736 if (fd2 >= 0) {
1737 close(fd2);
1738 }
1739 _Py_END_SUPPRESS_IPH
1740
1741 return (fd2 >= 0);
1742#else
Victor Stinner1c4670e2017-05-04 00:45:56 +02001743 struct stat st;
1744 return (fstat(fd, &st) == 0);
Victor Stinner1c4670e2017-05-04 00:45:56 +02001745#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001746}
1747
1748/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001749static PyObject*
Victor Stinner331a6a52019-05-27 16:39:22 +02001750create_stdio(const PyConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001751 int fd, int write_mode, const char* name,
Victor Stinner709d23d2019-05-02 14:56:30 -04001752 const wchar_t* encoding, const wchar_t* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001753{
1754 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1755 const char* mode;
1756 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001757 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001758 int buffering, isatty;
1759 _Py_IDENTIFIER(open);
1760 _Py_IDENTIFIER(isatty);
1761 _Py_IDENTIFIER(TextIOWrapper);
1762 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001763 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001764
Victor Stinner874dbe82015-09-04 17:29:57 +02001765 if (!is_valid_fd(fd))
1766 Py_RETURN_NONE;
1767
Nick Coghland6009512014-11-20 21:39:37 +10001768 /* stdin is always opened in buffered mode, first because it shouldn't
1769 make a difference in common use cases, second because TextIOWrapper
1770 depends on the presence of a read1() method which only exists on
1771 buffered streams.
1772 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001773 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001774 buffering = 0;
1775 else
1776 buffering = -1;
1777 if (write_mode)
1778 mode = "wb";
1779 else
1780 mode = "rb";
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001781 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOO",
Nick Coghland6009512014-11-20 21:39:37 +10001782 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001783 Py_None, Py_None, /* encoding, errors */
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001784 Py_None, Py_False); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001785 if (buf == NULL)
1786 goto error;
1787
1788 if (buffering) {
1789 _Py_IDENTIFIER(raw);
1790 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1791 if (raw == NULL)
1792 goto error;
1793 }
1794 else {
1795 raw = buf;
1796 Py_INCREF(raw);
1797 }
1798
Steve Dower39294992016-08-30 21:22:36 -07001799#ifdef MS_WINDOWS
1800 /* Windows console IO is always UTF-8 encoded */
1801 if (PyWindowsConsoleIO_Check(raw))
Victor Stinner709d23d2019-05-02 14:56:30 -04001802 encoding = L"utf-8";
Steve Dower39294992016-08-30 21:22:36 -07001803#endif
1804
Nick Coghland6009512014-11-20 21:39:37 +10001805 text = PyUnicode_FromString(name);
1806 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1807 goto error;
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001808 res = _PyObject_CallMethodIdNoArgs(raw, &PyId_isatty);
Nick Coghland6009512014-11-20 21:39:37 +10001809 if (res == NULL)
1810 goto error;
1811 isatty = PyObject_IsTrue(res);
1812 Py_DECREF(res);
1813 if (isatty == -1)
1814 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001815 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001816 write_through = Py_True;
1817 else
1818 write_through = Py_False;
Jendrik Seipp5b907712020-01-01 23:21:43 +01001819 if (buffered_stdio && (isatty || fd == fileno(stderr)))
Nick Coghland6009512014-11-20 21:39:37 +10001820 line_buffering = Py_True;
1821 else
1822 line_buffering = Py_False;
1823
1824 Py_CLEAR(raw);
1825 Py_CLEAR(text);
1826
1827#ifdef MS_WINDOWS
1828 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1829 newlines to "\n".
1830 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1831 newline = NULL;
1832#else
1833 /* sys.stdin: split lines at "\n".
1834 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1835 newline = "\n";
1836#endif
1837
Victor Stinner709d23d2019-05-02 14:56:30 -04001838 PyObject *encoding_str = PyUnicode_FromWideChar(encoding, -1);
1839 if (encoding_str == NULL) {
1840 Py_CLEAR(buf);
1841 goto error;
1842 }
1843
1844 PyObject *errors_str = PyUnicode_FromWideChar(errors, -1);
1845 if (errors_str == NULL) {
1846 Py_CLEAR(buf);
1847 Py_CLEAR(encoding_str);
1848 goto error;
1849 }
1850
1851 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OOOsOO",
1852 buf, encoding_str, errors_str,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001853 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001854 Py_CLEAR(buf);
Victor Stinner709d23d2019-05-02 14:56:30 -04001855 Py_CLEAR(encoding_str);
1856 Py_CLEAR(errors_str);
Nick Coghland6009512014-11-20 21:39:37 +10001857 if (stream == NULL)
1858 goto error;
1859
1860 if (write_mode)
1861 mode = "w";
1862 else
1863 mode = "r";
1864 text = PyUnicode_FromString(mode);
1865 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1866 goto error;
1867 Py_CLEAR(text);
1868 return stream;
1869
1870error:
1871 Py_XDECREF(buf);
1872 Py_XDECREF(stream);
1873 Py_XDECREF(text);
1874 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001875
Victor Stinner874dbe82015-09-04 17:29:57 +02001876 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1877 /* Issue #24891: the file descriptor was closed after the first
1878 is_valid_fd() check was called. Ignore the OSError and set the
1879 stream to None. */
1880 PyErr_Clear();
1881 Py_RETURN_NONE;
1882 }
1883 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001884}
1885
Victor Stinnere0c9ab82019-11-22 16:19:14 +01001886/* Set builtins.open to io.OpenWrapper */
1887static PyStatus
1888init_set_builtins_open(PyThreadState *tstate)
1889{
1890 PyObject *iomod = NULL, *wrapper;
1891 PyObject *bimod = NULL;
1892 PyStatus res = _PyStatus_OK();
1893
1894 if (!(iomod = PyImport_ImportModule("io"))) {
1895 goto error;
1896 }
1897
1898 if (!(bimod = PyImport_ImportModule("builtins"))) {
1899 goto error;
1900 }
1901
1902 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1903 goto error;
1904 }
1905
1906 /* Set builtins.open */
1907 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1908 Py_DECREF(wrapper);
1909 goto error;
1910 }
1911 Py_DECREF(wrapper);
1912 goto done;
1913
1914error:
1915 res = _PyStatus_ERR("can't initialize io.open");
1916
1917done:
1918 Py_XDECREF(bimod);
1919 Py_XDECREF(iomod);
1920 return res;
1921}
1922
1923
Nick Coghland6009512014-11-20 21:39:37 +10001924/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinner331a6a52019-05-27 16:39:22 +02001925static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001926init_sys_streams(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10001927{
Victor Stinnere0c9ab82019-11-22 16:19:14 +01001928 PyObject *iomod = NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001929 PyObject *m;
1930 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001931 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001932 PyObject * encoding_attr;
Victor Stinner331a6a52019-05-27 16:39:22 +02001933 PyStatus res = _PyStatus_OK();
Victor Stinnerb45d2592019-06-20 00:05:23 +02001934 const PyConfig *config = &tstate->interp->config;
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001935
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001936 /* Check that stdin is not a directory
1937 Using shell redirection, you can redirect stdin to a directory,
1938 crashing the Python interpreter. Catch this common mistake here
1939 and output a useful error message. Note that under MS Windows,
1940 the shell already prevents that. */
1941#ifndef MS_WINDOWS
1942 struct _Py_stat_struct sb;
1943 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1944 S_ISDIR(sb.st_mode)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001945 return _PyStatus_ERR("<stdin> is a directory, cannot continue");
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001946 }
1947#endif
1948
Nick Coghland6009512014-11-20 21:39:37 +10001949 /* Hack to avoid a nasty recursion issue when Python is invoked
1950 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1951 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1952 goto error;
1953 }
1954 Py_DECREF(m);
1955
1956 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1957 goto error;
1958 }
1959 Py_DECREF(m);
1960
Nick Coghland6009512014-11-20 21:39:37 +10001961 if (!(iomod = PyImport_ImportModule("io"))) {
1962 goto error;
1963 }
Nick Coghland6009512014-11-20 21:39:37 +10001964
Nick Coghland6009512014-11-20 21:39:37 +10001965 /* Set sys.stdin */
1966 fd = fileno(stdin);
1967 /* Under some conditions stdin, stdout and stderr may not be connected
1968 * and fileno() may point to an invalid file descriptor. For example
1969 * GUI apps don't have valid standard streams by default.
1970 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001971 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001972 config->stdio_encoding,
1973 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001974 if (std == NULL)
1975 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001976 PySys_SetObject("__stdin__", std);
1977 _PySys_SetObjectId(&PyId_stdin, std);
1978 Py_DECREF(std);
1979
1980 /* Set sys.stdout */
1981 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001982 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001983 config->stdio_encoding,
1984 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001985 if (std == NULL)
1986 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001987 PySys_SetObject("__stdout__", std);
1988 _PySys_SetObjectId(&PyId_stdout, std);
1989 Py_DECREF(std);
1990
1991#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1992 /* Set sys.stderr, replaces the preliminary stderr */
1993 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001994 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001995 config->stdio_encoding,
Victor Stinner709d23d2019-05-02 14:56:30 -04001996 L"backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001997 if (std == NULL)
1998 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001999
2000 /* Same as hack above, pre-import stderr's codec to avoid recursion
2001 when import.c tries to write to stderr in verbose mode. */
2002 encoding_attr = PyObject_GetAttrString(std, "encoding");
2003 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002004 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10002005 if (std_encoding != NULL) {
2006 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
2007 Py_XDECREF(codec_info);
2008 }
2009 Py_DECREF(encoding_attr);
2010 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02002011 _PyErr_Clear(tstate); /* Not a fatal error if codec isn't available */
Nick Coghland6009512014-11-20 21:39:37 +10002012
2013 if (PySys_SetObject("__stderr__", std) < 0) {
2014 Py_DECREF(std);
2015 goto error;
2016 }
2017 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
2018 Py_DECREF(std);
2019 goto error;
2020 }
2021 Py_DECREF(std);
2022#endif
2023
Victor Stinnera7368ac2017-11-15 18:11:45 -08002024 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10002025
Victor Stinnera7368ac2017-11-15 18:11:45 -08002026error:
Victor Stinner331a6a52019-05-27 16:39:22 +02002027 res = _PyStatus_ERR("can't initialize sys standard streams");
Victor Stinnera7368ac2017-11-15 18:11:45 -08002028
2029done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02002030 _Py_ClearStandardStreamEncoding();
Nick Coghland6009512014-11-20 21:39:37 +10002031 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08002032 return res;
Nick Coghland6009512014-11-20 21:39:37 +10002033}
2034
2035
Victor Stinner10dc4842015-03-24 12:01:30 +01002036static void
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002037_Py_FatalError_DumpTracebacks(int fd, PyInterpreterState *interp,
2038 PyThreadState *tstate)
Victor Stinner10dc4842015-03-24 12:01:30 +01002039{
Victor Stinner10dc4842015-03-24 12:01:30 +01002040 fputc('\n', stderr);
2041 fflush(stderr);
2042
2043 /* display the current Python stack */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002044 _Py_DumpTracebackThreads(fd, interp, tstate);
Victor Stinner10dc4842015-03-24 12:01:30 +01002045}
Victor Stinner791da1c2016-03-14 16:53:12 +01002046
2047/* Print the current exception (if an exception is set) with its traceback,
2048 or display the current Python stack.
2049
2050 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
2051 called on catastrophic cases.
2052
2053 Return 1 if the traceback was displayed, 0 otherwise. */
2054
2055static int
2056_Py_FatalError_PrintExc(int fd)
2057{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002058 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner791da1c2016-03-14 16:53:12 +01002059 PyObject *ferr, *res;
2060 PyObject *exception, *v, *tb;
2061 int has_tb;
2062
Victor Stinnerb45d2592019-06-20 00:05:23 +02002063 _PyErr_Fetch(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002064 if (exception == NULL) {
2065 /* No current exception */
2066 return 0;
2067 }
2068
2069 ferr = _PySys_GetObjectId(&PyId_stderr);
2070 if (ferr == NULL || ferr == Py_None) {
2071 /* sys.stderr is not set yet or set to None,
2072 no need to try to display the exception */
2073 return 0;
2074 }
2075
Victor Stinnerb45d2592019-06-20 00:05:23 +02002076 _PyErr_NormalizeException(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002077 if (tb == NULL) {
2078 tb = Py_None;
2079 Py_INCREF(tb);
2080 }
2081 PyException_SetTraceback(v, tb);
2082 if (exception == NULL) {
2083 /* PyErr_NormalizeException() failed */
2084 return 0;
2085 }
2086
2087 has_tb = (tb != Py_None);
2088 PyErr_Display(exception, v, tb);
2089 Py_XDECREF(exception);
2090 Py_XDECREF(v);
2091 Py_XDECREF(tb);
2092
2093 /* sys.stderr may be buffered: call sys.stderr.flush() */
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002094 res = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002095 if (res == NULL) {
2096 _PyErr_Clear(tstate);
2097 }
2098 else {
Victor Stinner791da1c2016-03-14 16:53:12 +01002099 Py_DECREF(res);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002100 }
Victor Stinner791da1c2016-03-14 16:53:12 +01002101
2102 return has_tb;
2103}
2104
Nick Coghland6009512014-11-20 21:39:37 +10002105/* Print fatal error message and abort */
2106
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002107#ifdef MS_WINDOWS
2108static void
2109fatal_output_debug(const char *msg)
2110{
2111 /* buffer of 256 bytes allocated on the stack */
2112 WCHAR buffer[256 / sizeof(WCHAR)];
2113 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2114 size_t msglen;
2115
2116 OutputDebugStringW(L"Fatal Python error: ");
2117
2118 msglen = strlen(msg);
2119 while (msglen) {
2120 size_t i;
2121
2122 if (buflen > msglen) {
2123 buflen = msglen;
2124 }
2125
2126 /* Convert the message to wchar_t. This uses a simple one-to-one
2127 conversion, assuming that the this error message actually uses
2128 ASCII only. If this ceases to be true, we will have to convert. */
2129 for (i=0; i < buflen; ++i) {
2130 buffer[i] = msg[i];
2131 }
2132 buffer[i] = L'\0';
2133 OutputDebugStringW(buffer);
2134
2135 msg += buflen;
2136 msglen -= buflen;
2137 }
2138 OutputDebugStringW(L"\n");
2139}
2140#endif
2141
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002142
2143static void
2144fatal_error_dump_runtime(FILE *stream, _PyRuntimeState *runtime)
2145{
2146 fprintf(stream, "Python runtime state: ");
Victor Stinner7b3c2522020-03-07 00:24:23 +01002147 PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(runtime);
2148 if (finalizing) {
2149 fprintf(stream, "finalizing (tstate=%p)", finalizing);
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002150 }
2151 else if (runtime->initialized) {
2152 fprintf(stream, "initialized");
2153 }
2154 else if (runtime->core_initialized) {
2155 fprintf(stream, "core initialized");
2156 }
2157 else if (runtime->preinitialized) {
2158 fprintf(stream, "preinitialized");
2159 }
2160 else if (runtime->preinitializing) {
2161 fprintf(stream, "preinitializing");
2162 }
2163 else {
2164 fprintf(stream, "unknown");
2165 }
2166 fprintf(stream, "\n");
2167 fflush(stream);
2168}
2169
2170
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002171static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002172fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002173{
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002174 FILE *stream = stderr;
2175 const int fd = fileno(stream);
Victor Stinner53345a42015-03-25 01:55:14 +01002176 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002177
2178 if (reentrant) {
2179 /* Py_FatalError() caused a second fatal error.
2180 Example: flush_std_files() raises a recursion error. */
2181 goto exit;
2182 }
2183 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002184
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002185 fprintf(stream, "Fatal Python error: ");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002186 if (prefix) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002187 fputs(prefix, stream);
2188 fputs(": ", stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002189 }
2190 if (msg) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002191 fputs(msg, stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002192 }
2193 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002194 fprintf(stream, "<message not set>");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002195 }
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002196 fputs("\n", stream);
2197 fflush(stream); /* it helps in Windows debug build */
2198
2199 _PyRuntimeState *runtime = &_PyRuntime;
2200 fatal_error_dump_runtime(stream, runtime);
2201
2202 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
2203 PyInterpreterState *interp = NULL;
2204 if (tstate != NULL) {
2205 interp = tstate->interp;
2206 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002207
Victor Stinner3a228ab2018-11-01 00:26:41 +01002208 /* Check if the current thread has a Python thread state
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002209 and holds the GIL.
Victor Stinner3a228ab2018-11-01 00:26:41 +01002210
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002211 tss_tstate is NULL if Py_FatalError() is called from a C thread which
2212 has no Python thread state.
2213
2214 tss_tstate != tstate if the current Python thread does not hold the GIL.
2215 */
2216 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2217 int has_tstate_and_gil = (tss_tstate != NULL && tss_tstate == tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002218 if (has_tstate_and_gil) {
2219 /* If an exception is set, print the exception with its traceback */
2220 if (!_Py_FatalError_PrintExc(fd)) {
2221 /* No exception is set, or an exception is set without traceback */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002222 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002223 }
2224 }
2225 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002226 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002227 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002228
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002229 /* The main purpose of faulthandler is to display the traceback.
2230 This function already did its best to display a traceback.
2231 Disable faulthandler to prevent writing a second traceback
2232 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002233 _PyFaulthandler_Fini();
2234
Victor Stinner791da1c2016-03-14 16:53:12 +01002235 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002236 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002237 /* Flush sys.stdout and sys.stderr */
2238 flush_std_files();
2239 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002240
Nick Coghland6009512014-11-20 21:39:37 +10002241#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002242 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002243#endif /* MS_WINDOWS */
2244
2245exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002246 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002247#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002248 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002249#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002250 abort();
2251 }
2252 else {
2253 exit(status);
2254 }
2255}
2256
Victor Stinner9e5d30c2020-03-07 00:54:20 +01002257#undef Py_FatalError
2258
Victor Stinner19760862017-12-20 01:41:59 +01002259void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002260Py_FatalError(const char *msg)
2261{
2262 fatal_error(NULL, msg, -1);
2263}
2264
Victor Stinner19760862017-12-20 01:41:59 +01002265void _Py_NO_RETURN
Victor Stinner9e5d30c2020-03-07 00:54:20 +01002266_Py_FatalErrorFunc(const char *func, const char *msg)
2267{
2268 fatal_error(func, msg, -1);
2269}
2270
2271void _Py_NO_RETURN
Victor Stinner331a6a52019-05-27 16:39:22 +02002272Py_ExitStatusException(PyStatus status)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002273{
Victor Stinner331a6a52019-05-27 16:39:22 +02002274 if (_PyStatus_IS_EXIT(status)) {
2275 exit(status.exitcode);
Victor Stinnerdbacfc22019-05-16 16:39:26 +02002276 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002277 else if (_PyStatus_IS_ERROR(status)) {
2278 fatal_error(status.func, status.err_msg, 1);
Victor Stinnerdfe88472019-03-01 12:14:41 +01002279 }
2280 else {
Victor Stinner331a6a52019-05-27 16:39:22 +02002281 Py_FatalError("Py_ExitStatusException() must not be called on success");
Victor Stinnerdfe88472019-03-01 12:14:41 +01002282 }
Nick Coghland6009512014-11-20 21:39:37 +10002283}
2284
2285/* Clean up and exit */
2286
Victor Stinnerd7292b52016-06-17 12:29:00 +02002287# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002288
Nick Coghland6009512014-11-20 21:39:37 +10002289/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002290void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002291{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002292 PyInterpreterState *is = _PyInterpreterState_GET_UNSAFE();
Marcel Plch776407f2017-12-20 11:17:58 +01002293
Antoine Pitroufc5db952017-12-13 02:29:07 +01002294 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002295 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2296
2297 is->pyexitfunc = func;
2298 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002299}
2300
2301static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002302call_py_exitfuncs(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002303{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002304 PyInterpreterState *interp = tstate->interp;
2305 if (interp->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002306 return;
2307
Victor Stinnerb45d2592019-06-20 00:05:23 +02002308 (*interp->pyexitfunc)(interp->pyexitmodule);
2309 _PyErr_Clear(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10002310}
2311
2312/* Wait until threading._shutdown completes, provided
2313 the threading module was imported in the first place.
2314 The shutdown routine will wait until all non-daemon
2315 "threading" threads have completed. */
2316static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002317wait_for_thread_shutdown(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002318{
Nick Coghland6009512014-11-20 21:39:37 +10002319 _Py_IDENTIFIER(_shutdown);
2320 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002321 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002322 if (threading == NULL) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02002323 if (_PyErr_Occurred(tstate)) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002324 PyErr_WriteUnraisable(NULL);
2325 }
2326 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002327 return;
2328 }
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002329 result = _PyObject_CallMethodIdNoArgs(threading, &PyId__shutdown);
Nick Coghland6009512014-11-20 21:39:37 +10002330 if (result == NULL) {
2331 PyErr_WriteUnraisable(threading);
2332 }
2333 else {
2334 Py_DECREF(result);
2335 }
2336 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002337}
2338
2339#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002340int Py_AtExit(void (*func)(void))
2341{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002342 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002343 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002344 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002345 return 0;
2346}
2347
2348static void
Victor Stinner8e91c242019-04-24 17:24:01 +02002349call_ll_exitfuncs(_PyRuntimeState *runtime)
Nick Coghland6009512014-11-20 21:39:37 +10002350{
Victor Stinner8e91c242019-04-24 17:24:01 +02002351 while (runtime->nexitfuncs > 0) {
Victor Stinner87d23a02019-04-26 05:49:26 +02002352 /* pop last function from the list */
2353 runtime->nexitfuncs--;
2354 void (*exitfunc)(void) = runtime->exitfuncs[runtime->nexitfuncs];
2355 runtime->exitfuncs[runtime->nexitfuncs] = NULL;
2356
2357 exitfunc();
Victor Stinner8e91c242019-04-24 17:24:01 +02002358 }
Nick Coghland6009512014-11-20 21:39:37 +10002359
2360 fflush(stdout);
2361 fflush(stderr);
2362}
2363
Victor Stinnercfc88312018-08-01 16:41:25 +02002364void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002365Py_Exit(int sts)
2366{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002367 if (Py_FinalizeEx() < 0) {
2368 sts = 120;
2369 }
Nick Coghland6009512014-11-20 21:39:37 +10002370
2371 exit(sts);
2372}
2373
Victor Stinner331a6a52019-05-27 16:39:22 +02002374static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02002375init_signals(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002376{
2377#ifdef SIGPIPE
2378 PyOS_setsig(SIGPIPE, SIG_IGN);
2379#endif
2380#ifdef SIGXFZ
2381 PyOS_setsig(SIGXFZ, SIG_IGN);
2382#endif
2383#ifdef SIGXFSZ
2384 PyOS_setsig(SIGXFSZ, SIG_IGN);
2385#endif
2386 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerb45d2592019-06-20 00:05:23 +02002387 if (_PyErr_Occurred(tstate)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02002388 return _PyStatus_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002389 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002390 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002391}
2392
2393
2394/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2395 *
2396 * All of the code in this function must only use async-signal-safe functions,
2397 * listed at `man 7 signal` or
2398 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
Victor Stinnerefc28bb2020-03-05 18:13:56 +01002399 *
2400 * If this function is updated, update also _posix_spawn() of subprocess.py.
Nick Coghland6009512014-11-20 21:39:37 +10002401 */
2402void
2403_Py_RestoreSignals(void)
2404{
2405#ifdef SIGPIPE
2406 PyOS_setsig(SIGPIPE, SIG_DFL);
2407#endif
2408#ifdef SIGXFZ
2409 PyOS_setsig(SIGXFZ, SIG_DFL);
2410#endif
2411#ifdef SIGXFSZ
2412 PyOS_setsig(SIGXFSZ, SIG_DFL);
2413#endif
2414}
2415
2416
2417/*
2418 * The file descriptor fd is considered ``interactive'' if either
2419 * a) isatty(fd) is TRUE, or
2420 * b) the -i flag was given, and the filename associated with
2421 * the descriptor is NULL or "<stdin>" or "???".
2422 */
2423int
2424Py_FdIsInteractive(FILE *fp, const char *filename)
2425{
2426 if (isatty((int)fileno(fp)))
2427 return 1;
2428 if (!Py_InteractiveFlag)
2429 return 0;
2430 return (filename == NULL) ||
2431 (strcmp(filename, "<stdin>") == 0) ||
2432 (strcmp(filename, "???") == 0);
2433}
2434
2435
Nick Coghland6009512014-11-20 21:39:37 +10002436/* Wrappers around sigaction() or signal(). */
2437
2438PyOS_sighandler_t
2439PyOS_getsig(int sig)
2440{
2441#ifdef HAVE_SIGACTION
2442 struct sigaction context;
2443 if (sigaction(sig, NULL, &context) == -1)
2444 return SIG_ERR;
2445 return context.sa_handler;
2446#else
2447 PyOS_sighandler_t handler;
2448/* Special signal handling for the secure CRT in Visual Studio 2005 */
2449#if defined(_MSC_VER) && _MSC_VER >= 1400
2450 switch (sig) {
2451 /* Only these signals are valid */
2452 case SIGINT:
2453 case SIGILL:
2454 case SIGFPE:
2455 case SIGSEGV:
2456 case SIGTERM:
2457 case SIGBREAK:
2458 case SIGABRT:
2459 break;
2460 /* Don't call signal() with other values or it will assert */
2461 default:
2462 return SIG_ERR;
2463 }
2464#endif /* _MSC_VER && _MSC_VER >= 1400 */
2465 handler = signal(sig, SIG_IGN);
2466 if (handler != SIG_ERR)
2467 signal(sig, handler);
2468 return handler;
2469#endif
2470}
2471
2472/*
2473 * All of the code in this function must only use async-signal-safe functions,
2474 * listed at `man 7 signal` or
2475 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2476 */
2477PyOS_sighandler_t
2478PyOS_setsig(int sig, PyOS_sighandler_t handler)
2479{
2480#ifdef HAVE_SIGACTION
2481 /* Some code in Modules/signalmodule.c depends on sigaction() being
2482 * used here if HAVE_SIGACTION is defined. Fix that if this code
2483 * changes to invalidate that assumption.
2484 */
2485 struct sigaction context, ocontext;
2486 context.sa_handler = handler;
2487 sigemptyset(&context.sa_mask);
2488 context.sa_flags = 0;
2489 if (sigaction(sig, &context, &ocontext) == -1)
2490 return SIG_ERR;
2491 return ocontext.sa_handler;
2492#else
2493 PyOS_sighandler_t oldhandler;
2494 oldhandler = signal(sig, handler);
2495#ifdef HAVE_SIGINTERRUPT
2496 siginterrupt(sig, 1);
2497#endif
2498 return oldhandler;
2499#endif
2500}
2501
2502#ifdef __cplusplus
2503}
2504#endif