blob: eaae5fdbb6692b34aafe15c51f63b7593f1494c0 [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 */
557 PyEval_InitThreads();
558
Victor Stinnerb45d2592019-06-20 00:05:23 +0200559 *tstate_p = tstate;
Victor Stinner331a6a52019-05-27 16:39:22 +0200560 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100561}
Nick Coghland6009512014-11-20 21:39:37 +1000562
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100563
Victor Stinner331a6a52019-05-27 16:39:22 +0200564static PyStatus
Victor Stinnerb93f31f2019-11-20 18:39:12 +0100565pycore_init_types(PyThreadState *tstate)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100566{
Victor Stinner444b39b2019-11-20 01:18:11 +0100567 PyStatus status;
Victor Stinnerb93f31f2019-11-20 18:39:12 +0100568 int is_main_interp = _Py_IsMainInterpreter(tstate);
Victor Stinner444b39b2019-11-20 01:18:11 +0100569
Victor Stinner01b1cc12019-11-20 02:27:56 +0100570 status = _PyGC_Init(tstate);
Victor Stinner444b39b2019-11-20 01:18:11 +0100571 if (_PyStatus_EXCEPTION(status)) {
572 return status;
573 }
574
Victor Stinnere7e699e2019-11-20 12:08:13 +0100575 if (is_main_interp) {
576 status = _PyTypes_Init();
577 if (_PyStatus_EXCEPTION(status)) {
578 return status;
579 }
Victor Stinner630c8df2019-12-17 13:02:18 +0100580 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100581
Victor Stinner630c8df2019-12-17 13:02:18 +0100582
583 if (!_PyLong_Init(tstate)) {
584 return _PyStatus_ERR("can't init longs");
Victor Stinnerb93f31f2019-11-20 18:39:12 +0100585 }
Victor Stinneref5aa9a2019-11-20 00:38:03 +0100586
Victor Stinnerb93f31f2019-11-20 18:39:12 +0100587 if (is_main_interp) {
Victor Stinnere7e699e2019-11-20 12:08:13 +0100588 status = _PyUnicode_Init();
589 if (_PyStatus_EXCEPTION(status)) {
590 return status;
591 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100592 }
593
Victor Stinner331a6a52019-05-27 16:39:22 +0200594 status = _PyExc_Init();
595 if (_PyStatus_EXCEPTION(status)) {
596 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100597 }
598
Victor Stinnere7e699e2019-11-20 12:08:13 +0100599 if (is_main_interp) {
600 if (!_PyFloat_Init()) {
601 return _PyStatus_ERR("can't init float");
602 }
Nick Coghland6009512014-11-20 21:39:37 +1000603
Victor Stinnere7e699e2019-11-20 12:08:13 +0100604 if (_PyStructSequence_Init() < 0) {
605 return _PyStatus_ERR("can't initialize structseq");
606 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100607 }
Victor Stinneref9d9b62019-05-22 11:28:22 +0200608
Victor Stinner331a6a52019-05-27 16:39:22 +0200609 status = _PyErr_Init();
610 if (_PyStatus_EXCEPTION(status)) {
611 return status;
Victor Stinneref9d9b62019-05-22 11:28:22 +0200612 }
613
Victor Stinnere7e699e2019-11-20 12:08:13 +0100614 if (is_main_interp) {
615 if (!_PyContext_Init()) {
616 return _PyStatus_ERR("can't init context");
617 }
Victor Stinneref5aa9a2019-11-20 00:38:03 +0100618 }
619
Victor Stinner331a6a52019-05-27 16:39:22 +0200620 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100621}
622
623
Victor Stinner331a6a52019-05-27 16:39:22 +0200624static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200625pycore_init_builtins(PyThreadState *tstate)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100626{
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100627 assert(!_PyErr_Occurred(tstate));
628
Victor Stinnerb45d2592019-06-20 00:05:23 +0200629 PyObject *bimod = _PyBuiltin_Init(tstate);
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100630 if (bimod == NULL) {
Victor Stinner2582d462019-11-22 19:24:49 +0100631 goto error;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100632 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100633
Victor Stinner2582d462019-11-22 19:24:49 +0100634 PyInterpreterState *interp = tstate->interp;
635 if (_PyImport_FixupBuiltin(bimod, "builtins", interp->modules) < 0) {
636 goto error;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100637 }
Victor Stinner2582d462019-11-22 19:24:49 +0100638
639 PyObject *builtins_dict = PyModule_GetDict(bimod);
640 if (builtins_dict == NULL) {
641 goto error;
642 }
643 Py_INCREF(builtins_dict);
644 interp->builtins = builtins_dict;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100645
Victor Stinner331a6a52019-05-27 16:39:22 +0200646 PyStatus status = _PyBuiltins_AddExceptions(bimod);
647 if (_PyStatus_EXCEPTION(status)) {
648 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100649 }
Victor Stinner2582d462019-11-22 19:24:49 +0100650
651 interp->builtins_copy = PyDict_Copy(interp->builtins);
652 if (interp->builtins_copy == NULL) {
653 goto error;
654 }
Pablo Galindob96c6b02019-12-04 11:19:59 +0000655 Py_DECREF(bimod);
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100656
657 assert(!_PyErr_Occurred(tstate));
658
Victor Stinner331a6a52019-05-27 16:39:22 +0200659 return _PyStatus_OK();
Victor Stinner2582d462019-11-22 19:24:49 +0100660
661error:
Pablo Galindob96c6b02019-12-04 11:19:59 +0000662 Py_XDECREF(bimod);
Victor Stinner2582d462019-11-22 19:24:49 +0100663 return _PyStatus_ERR("can't initialize builtins module");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100664}
665
666
Victor Stinner331a6a52019-05-27 16:39:22 +0200667static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200668pycore_init_import_warnings(PyThreadState *tstate, PyObject *sysmod)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100669{
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100670 assert(!_PyErr_Occurred(tstate));
Victor Stinnerb45d2592019-06-20 00:05:23 +0200671
Victor Stinner2582d462019-11-22 19:24:49 +0100672 PyStatus status = _PyImportHooks_Init(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200673 if (_PyStatus_EXCEPTION(status)) {
674 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800675 }
Nick Coghland6009512014-11-20 21:39:37 +1000676
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100677 const PyConfig *config = &tstate->interp->config;
Victor Stinner2ec1a1b2019-11-22 21:54:33 +0100678 if (_Py_IsMainInterpreter(tstate)) {
679 /* Initialize _warnings. */
Victor Stinner66b79732020-03-02 15:02:18 +0100680 status = _PyWarnings_InitState(tstate);
681 if (_PyStatus_EXCEPTION(status)) {
682 return status;
Victor Stinner2ec1a1b2019-11-22 21:54:33 +0100683 }
Nick Coghland6009512014-11-20 21:39:37 +1000684
Victor Stinner2ec1a1b2019-11-22 21:54:33 +0100685 if (config->_install_importlib) {
686 status = _PyConfig_WritePathConfig(config);
687 if (_PyStatus_EXCEPTION(status)) {
688 return status;
689 }
Victor Stinnerb1147e42018-07-21 02:06:16 +0200690 }
691 }
692
Eric Snow1abcf672017-05-23 21:46:51 -0700693 /* This call sets up builtin and frozen import support */
Victor Stinnerb45d2592019-06-20 00:05:23 +0200694 if (config->_install_importlib) {
695 status = init_importlib(tstate, sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200696 if (_PyStatus_EXCEPTION(status)) {
697 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800698 }
Eric Snow1abcf672017-05-23 21:46:51 -0700699 }
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100700
701 assert(!_PyErr_Occurred(tstate));
702
Victor Stinner331a6a52019-05-27 16:39:22 +0200703 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100704}
705
706
Victor Stinner331a6a52019-05-27 16:39:22 +0200707static PyStatus
Victor Stinnerd863ade2019-12-06 03:37:07 +0100708pycore_interp_init(PyThreadState *tstate)
709{
710 PyStatus status;
Victor Stinner080ee5a2019-12-08 21:55:58 +0100711 PyObject *sysmod = NULL;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100712
713 status = pycore_init_types(tstate);
714 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner080ee5a2019-12-08 21:55:58 +0100715 goto done;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100716 }
717
Victor Stinnerd863ade2019-12-06 03:37:07 +0100718 status = _PySys_Create(tstate, &sysmod);
719 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner080ee5a2019-12-08 21:55:58 +0100720 goto done;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100721 }
722
723 status = pycore_init_builtins(tstate);
724 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner080ee5a2019-12-08 21:55:58 +0100725 goto done;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100726 }
727
Victor Stinner080ee5a2019-12-08 21:55:58 +0100728 status = pycore_init_import_warnings(tstate, sysmod);
729
730done:
731 /* sys.modules['sys'] contains a strong reference to the module */
732 Py_XDECREF(sysmod);
733 return status;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100734}
735
736
737static PyStatus
Victor Stinner331a6a52019-05-27 16:39:22 +0200738pyinit_config(_PyRuntimeState *runtime,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200739 PyThreadState **tstate_p,
Victor Stinner331a6a52019-05-27 16:39:22 +0200740 const PyConfig *config)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100741{
Victor Stinner331a6a52019-05-27 16:39:22 +0200742 _PyConfig_Write(config, runtime);
Victor Stinner20004952019-03-26 02:31:11 +0100743
Victor Stinner331a6a52019-05-27 16:39:22 +0200744 PyStatus status = pycore_init_runtime(runtime, config);
745 if (_PyStatus_EXCEPTION(status)) {
746 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100747 }
748
Victor Stinnerb45d2592019-06-20 00:05:23 +0200749 PyThreadState *tstate;
750 status = pycore_create_interpreter(runtime, config, &tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200751 if (_PyStatus_EXCEPTION(status)) {
752 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100753 }
Victor Stinnerb45d2592019-06-20 00:05:23 +0200754 *tstate_p = tstate;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100755
Victor Stinnerd863ade2019-12-06 03:37:07 +0100756 status = pycore_interp_init(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200757 if (_PyStatus_EXCEPTION(status)) {
758 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100759 }
Eric Snow1abcf672017-05-23 21:46:51 -0700760
761 /* Only when we get here is the runtime core fully initialized */
Victor Stinner43125222019-04-24 18:23:53 +0200762 runtime->core_initialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200763 return _PyStatus_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700764}
765
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100766
Victor Stinner331a6a52019-05-27 16:39:22 +0200767PyStatus
768_Py_PreInitializeFromPyArgv(const PyPreConfig *src_config, const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100769{
Victor Stinner331a6a52019-05-27 16:39:22 +0200770 PyStatus status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100771
Victor Stinner6d1c4672019-05-20 11:02:00 +0200772 if (src_config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200773 return _PyStatus_ERR("preinitialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +0200774 }
775
Victor Stinner331a6a52019-05-27 16:39:22 +0200776 status = _PyRuntime_Initialize();
777 if (_PyStatus_EXCEPTION(status)) {
778 return status;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100779 }
Victor Stinner43125222019-04-24 18:23:53 +0200780 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100781
Victor Stinnerd3b90412019-09-17 23:59:51 +0200782 if (runtime->preinitialized) {
Victor Stinnerf72346c2019-03-25 17:54:58 +0100783 /* If it's already configured: ignored the new configuration */
Victor Stinner331a6a52019-05-27 16:39:22 +0200784 return _PyStatus_OK();
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100785 }
786
Victor Stinnerd3b90412019-09-17 23:59:51 +0200787 /* Note: preinitialized remains 1 on error, it is only set to 0
788 at exit on success. */
789 runtime->preinitializing = 1;
790
Victor Stinner331a6a52019-05-27 16:39:22 +0200791 PyPreConfig config;
Victor Stinner441b10c2019-09-28 04:28:35 +0200792
793 status = _PyPreConfig_InitFromPreConfig(&config, src_config);
794 if (_PyStatus_EXCEPTION(status)) {
795 return status;
796 }
Victor Stinnerf72346c2019-03-25 17:54:58 +0100797
Victor Stinner331a6a52019-05-27 16:39:22 +0200798 status = _PyPreConfig_Read(&config, args);
799 if (_PyStatus_EXCEPTION(status)) {
800 return status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100801 }
802
Victor Stinner331a6a52019-05-27 16:39:22 +0200803 status = _PyPreConfig_Write(&config);
804 if (_PyStatus_EXCEPTION(status)) {
805 return status;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100806 }
807
Victor Stinnerd3b90412019-09-17 23:59:51 +0200808 runtime->preinitializing = 0;
809 runtime->preinitialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200810 return _PyStatus_OK();
Victor Stinnerf72346c2019-03-25 17:54:58 +0100811}
812
Victor Stinner70005ac2019-05-02 15:25:34 -0400813
Victor Stinner331a6a52019-05-27 16:39:22 +0200814PyStatus
815Py_PreInitializeFromBytesArgs(const PyPreConfig *src_config, Py_ssize_t argc, char **argv)
Victor Stinnerf72346c2019-03-25 17:54:58 +0100816{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100817 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400818 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100819}
820
821
Victor Stinner331a6a52019-05-27 16:39:22 +0200822PyStatus
823Py_PreInitializeFromArgs(const PyPreConfig *src_config, Py_ssize_t argc, wchar_t **argv)
Victor Stinner20004952019-03-26 02:31:11 +0100824{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100825 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400826 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinner20004952019-03-26 02:31:11 +0100827}
828
829
Victor Stinner331a6a52019-05-27 16:39:22 +0200830PyStatus
831Py_PreInitialize(const PyPreConfig *src_config)
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100832{
Victor Stinner70005ac2019-05-02 15:25:34 -0400833 return _Py_PreInitializeFromPyArgv(src_config, NULL);
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100834}
835
836
Victor Stinner331a6a52019-05-27 16:39:22 +0200837PyStatus
838_Py_PreInitializeFromConfig(const PyConfig *config,
839 const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100840{
Victor Stinner331a6a52019-05-27 16:39:22 +0200841 assert(config != NULL);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200842
Victor Stinner331a6a52019-05-27 16:39:22 +0200843 PyStatus status = _PyRuntime_Initialize();
844 if (_PyStatus_EXCEPTION(status)) {
845 return status;
Victor Stinner6d1c4672019-05-20 11:02:00 +0200846 }
847 _PyRuntimeState *runtime = &_PyRuntime;
848
Victor Stinnerd3b90412019-09-17 23:59:51 +0200849 if (runtime->preinitialized) {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200850 /* Already initialized: do nothing */
Victor Stinner331a6a52019-05-27 16:39:22 +0200851 return _PyStatus_OK();
Victor Stinner70005ac2019-05-02 15:25:34 -0400852 }
Victor Stinnercab5d072019-05-17 19:01:14 +0200853
Victor Stinner331a6a52019-05-27 16:39:22 +0200854 PyPreConfig preconfig;
Victor Stinner441b10c2019-09-28 04:28:35 +0200855
Victor Stinner3c30a762019-10-01 10:56:37 +0200856 _PyPreConfig_InitFromConfig(&preconfig, config);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200857
Victor Stinner331a6a52019-05-27 16:39:22 +0200858 if (!config->parse_argv) {
859 return Py_PreInitialize(&preconfig);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200860 }
861 else if (args == NULL) {
Victor Stinnercab5d072019-05-17 19:01:14 +0200862 _PyArgv config_args = {
863 .use_bytes_argv = 0,
Victor Stinner331a6a52019-05-27 16:39:22 +0200864 .argc = config->argv.length,
865 .wchar_argv = config->argv.items};
Victor Stinner6d1c4672019-05-20 11:02:00 +0200866 return _Py_PreInitializeFromPyArgv(&preconfig, &config_args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200867 }
868 else {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200869 return _Py_PreInitializeFromPyArgv(&preconfig, args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200870 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100871}
872
873
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100874/* Begin interpreter initialization
875 *
876 * On return, the first thread and interpreter state have been created,
877 * but the compiler, signal handling, multithreading and
878 * multiple interpreter support, and codec infrastructure are not yet
879 * available.
880 *
881 * The import system will support builtin and frozen modules only.
882 * The only supported io is writing to sys.stderr
883 *
884 * If any operation invoked by this function fails, a fatal error is
885 * issued and the function does not return.
886 *
887 * Any code invoked from this function should *not* assume it has access
888 * to the Python C API (unless the API is explicitly listed as being
889 * safe to call without calling Py_Initialize first)
890 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200891static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200892pyinit_core(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200893 const PyConfig *src_config,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200894 PyThreadState **tstate_p)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200895{
Victor Stinner331a6a52019-05-27 16:39:22 +0200896 PyStatus status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200897
Victor Stinner331a6a52019-05-27 16:39:22 +0200898 status = _Py_PreInitializeFromConfig(src_config, NULL);
899 if (_PyStatus_EXCEPTION(status)) {
900 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200901 }
902
Victor Stinner331a6a52019-05-27 16:39:22 +0200903 PyConfig config;
Victor Stinner8462a492019-10-01 12:06:16 +0200904 _PyConfig_InitCompatConfig(&config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200905
Victor Stinner331a6a52019-05-27 16:39:22 +0200906 status = _PyConfig_Copy(&config, src_config);
907 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200908 goto done;
909 }
910
Victor Stinner331a6a52019-05-27 16:39:22 +0200911 status = PyConfig_Read(&config);
912 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200913 goto done;
914 }
915
916 if (!runtime->core_initialized) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200917 status = pyinit_config(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200918 }
919 else {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200920 status = pyinit_core_reconfigure(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200921 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200922 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200923 goto done;
924 }
925
926done:
Victor Stinner331a6a52019-05-27 16:39:22 +0200927 PyConfig_Clear(&config);
928 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200929}
930
Victor Stinner5ac27a52019-03-27 13:40:14 +0100931
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200932/* Py_Initialize() has already been called: update the main interpreter
933 configuration. Example of bpo-34008: Py_Main() called after
934 Py_Initialize(). */
Victor Stinner331a6a52019-05-27 16:39:22 +0200935static PyStatus
Victor Stinnerb0051362019-11-22 17:52:42 +0100936_Py_ReconfigureMainInterpreter(PyThreadState *tstate)
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200937{
Victor Stinnerb0051362019-11-22 17:52:42 +0100938 PyConfig *config = &tstate->interp->config;
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100939
Victor Stinner331a6a52019-05-27 16:39:22 +0200940 PyObject *argv = _PyWideStringList_AsList(&config->argv);
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100941 if (argv == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200942 return _PyStatus_NO_MEMORY(); \
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100943 }
944
Victor Stinnerb0051362019-11-22 17:52:42 +0100945 int res = PyDict_SetItemString(tstate->interp->sysdict, "argv", argv);
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100946 Py_DECREF(argv);
947 if (res < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200948 return _PyStatus_ERR("fail to set sys.argv");
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200949 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200950 return _PyStatus_OK();
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200951}
952
Victor Stinnerb0051362019-11-22 17:52:42 +0100953
954static PyStatus
955init_interp_main(PyThreadState *tstate)
956{
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100957 assert(!_PyErr_Occurred(tstate));
958
Victor Stinnerb0051362019-11-22 17:52:42 +0100959 PyStatus status;
960 int is_main_interp = _Py_IsMainInterpreter(tstate);
961 PyInterpreterState *interp = tstate->interp;
962 PyConfig *config = &interp->config;
963
964 if (!config->_install_importlib) {
965 /* Special mode for freeze_importlib: run with no import system
966 *
967 * This means anything which needs support from extension modules
968 * or pure Python code in the standard library won't work.
969 */
970 if (is_main_interp) {
971 interp->runtime->initialized = 1;
972 }
973 return _PyStatus_OK();
974 }
975
976 if (is_main_interp) {
977 if (_PyTime_Init() < 0) {
978 return _PyStatus_ERR("can't initialize time");
979 }
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100980 }
Victor Stinnerb0051362019-11-22 17:52:42 +0100981
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100982 if (_PySys_InitMain(tstate) < 0) {
983 return _PyStatus_ERR("can't finish initializing sys");
Victor Stinnerb0051362019-11-22 17:52:42 +0100984 }
985
986 status = init_importlib_external(tstate);
987 if (_PyStatus_EXCEPTION(status)) {
988 return status;
989 }
990
991 if (is_main_interp) {
992 /* initialize the faulthandler module */
993 status = _PyFaulthandler_Init(config->faulthandler);
994 if (_PyStatus_EXCEPTION(status)) {
995 return status;
996 }
997 }
998
999 status = _PyUnicode_InitEncodings(tstate);
1000 if (_PyStatus_EXCEPTION(status)) {
1001 return status;
1002 }
1003
1004 if (is_main_interp) {
1005 if (config->install_signal_handlers) {
1006 status = init_signals(tstate);
1007 if (_PyStatus_EXCEPTION(status)) {
1008 return status;
1009 }
1010 }
1011
1012 if (_PyTraceMalloc_Init(config->tracemalloc) < 0) {
1013 return _PyStatus_ERR("can't initialize tracemalloc");
1014 }
1015 }
1016
1017 status = init_sys_streams(tstate);
1018 if (_PyStatus_EXCEPTION(status)) {
1019 return status;
1020 }
1021
1022 status = init_set_builtins_open(tstate);
1023 if (_PyStatus_EXCEPTION(status)) {
1024 return status;
1025 }
1026
1027 status = add_main_module(interp);
1028 if (_PyStatus_EXCEPTION(status)) {
1029 return status;
1030 }
1031
1032 if (is_main_interp) {
1033 /* Initialize warnings. */
1034 PyObject *warnoptions = PySys_GetObject("warnoptions");
1035 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
1036 {
1037 PyObject *warnings_module = PyImport_ImportModule("warnings");
1038 if (warnings_module == NULL) {
1039 fprintf(stderr, "'import warnings' failed; traceback:\n");
1040 _PyErr_Print(tstate);
1041 }
1042 Py_XDECREF(warnings_module);
1043 }
1044
1045 interp->runtime->initialized = 1;
1046 }
1047
1048 if (config->site_import) {
1049 status = init_import_site();
1050 if (_PyStatus_EXCEPTION(status)) {
1051 return status;
1052 }
1053 }
1054
1055 if (is_main_interp) {
1056#ifndef MS_WINDOWS
1057 emit_stderr_warning_for_legacy_locale(interp->runtime);
1058#endif
1059 }
1060
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001061 assert(!_PyErr_Occurred(tstate));
1062
Victor Stinnerb0051362019-11-22 17:52:42 +01001063 return _PyStatus_OK();
1064}
1065
1066
Eric Snowc7ec9982017-05-23 23:00:52 -07001067/* Update interpreter state based on supplied configuration settings
1068 *
1069 * After calling this function, most of the restrictions on the interpreter
1070 * are lifted. The only remaining incomplete settings are those related
1071 * to the main module (sys.argv[0], __main__ metadata)
1072 *
1073 * Calling this when the interpreter is not initializing, is already
1074 * initialized or without a valid current thread state is a fatal error.
1075 * Other errors should be reported as normal Python exceptions with a
1076 * non-zero return code.
1077 */
Victor Stinner331a6a52019-05-27 16:39:22 +02001078static PyStatus
Victor Stinner01b1cc12019-11-20 02:27:56 +01001079pyinit_main(PyThreadState *tstate)
Eric Snow1abcf672017-05-23 21:46:51 -07001080{
Victor Stinnerb0051362019-11-22 17:52:42 +01001081 PyInterpreterState *interp = tstate->interp;
1082 if (!interp->runtime->core_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001083 return _PyStatus_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -07001084 }
Eric Snowc7ec9982017-05-23 23:00:52 -07001085
Victor Stinnerb0051362019-11-22 17:52:42 +01001086 if (interp->runtime->initialized) {
1087 return _Py_ReconfigureMainInterpreter(tstate);
Victor Stinnerfb47bca2018-07-20 17:34:23 +02001088 }
1089
Victor Stinnerb0051362019-11-22 17:52:42 +01001090 PyStatus status = init_interp_main(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001091 if (_PyStatus_EXCEPTION(status)) {
1092 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001093 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001094 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001095}
1096
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001097
Victor Stinner331a6a52019-05-27 16:39:22 +02001098PyStatus
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001099_Py_InitializeMain(void)
1100{
Victor Stinner331a6a52019-05-27 16:39:22 +02001101 PyStatus status = _PyRuntime_Initialize();
1102 if (_PyStatus_EXCEPTION(status)) {
1103 return status;
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001104 }
1105 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinnerb45d2592019-06-20 00:05:23 +02001106 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
Victor Stinner01b1cc12019-11-20 02:27:56 +01001107 return pyinit_main(tstate);
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001108}
1109
1110
Victor Stinner331a6a52019-05-27 16:39:22 +02001111PyStatus
1112Py_InitializeFromConfig(const PyConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -07001113{
Victor Stinner6d1c4672019-05-20 11:02:00 +02001114 if (config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001115 return _PyStatus_ERR("initialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +02001116 }
1117
Victor Stinner331a6a52019-05-27 16:39:22 +02001118 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001119
Victor Stinner331a6a52019-05-27 16:39:22 +02001120 status = _PyRuntime_Initialize();
1121 if (_PyStatus_EXCEPTION(status)) {
1122 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001123 }
1124 _PyRuntimeState *runtime = &_PyRuntime;
1125
Victor Stinnerb45d2592019-06-20 00:05:23 +02001126 PyThreadState *tstate = NULL;
1127 status = pyinit_core(runtime, config, &tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001128 if (_PyStatus_EXCEPTION(status)) {
1129 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001130 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001131 config = &tstate->interp->config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +01001132
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001133 if (config->_init_main) {
Victor Stinner01b1cc12019-11-20 02:27:56 +01001134 status = pyinit_main(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001135 if (_PyStatus_EXCEPTION(status)) {
1136 return status;
Victor Stinner484f20d2019-03-27 02:04:16 +01001137 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001138 }
Victor Stinner484f20d2019-03-27 02:04:16 +01001139
Victor Stinner331a6a52019-05-27 16:39:22 +02001140 return _PyStatus_OK();
Victor Stinner5ac27a52019-03-27 13:40:14 +01001141}
1142
1143
Eric Snow1abcf672017-05-23 21:46:51 -07001144void
Nick Coghland6009512014-11-20 21:39:37 +10001145Py_InitializeEx(int install_sigs)
1146{
Victor Stinner331a6a52019-05-27 16:39:22 +02001147 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001148
Victor Stinner331a6a52019-05-27 16:39:22 +02001149 status = _PyRuntime_Initialize();
1150 if (_PyStatus_EXCEPTION(status)) {
1151 Py_ExitStatusException(status);
Victor Stinner43125222019-04-24 18:23:53 +02001152 }
1153 _PyRuntimeState *runtime = &_PyRuntime;
1154
1155 if (runtime->initialized) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001156 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
1157 return;
1158 }
1159
Victor Stinner331a6a52019-05-27 16:39:22 +02001160 PyConfig config;
Victor Stinner8462a492019-10-01 12:06:16 +02001161 _PyConfig_InitCompatConfig(&config);
Victor Stinner441b10c2019-09-28 04:28:35 +02001162
Victor Stinner1dc6e392018-07-25 02:49:17 +02001163 config.install_signal_handlers = install_sigs;
1164
Victor Stinner331a6a52019-05-27 16:39:22 +02001165 status = Py_InitializeFromConfig(&config);
1166 if (_PyStatus_EXCEPTION(status)) {
1167 Py_ExitStatusException(status);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001168 }
Nick Coghland6009512014-11-20 21:39:37 +10001169}
1170
1171void
1172Py_Initialize(void)
1173{
1174 Py_InitializeEx(1);
1175}
1176
1177
Nick Coghland6009512014-11-20 21:39:37 +10001178/* Flush stdout and stderr */
1179
1180static int
1181file_is_closed(PyObject *fobj)
1182{
1183 int r;
1184 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1185 if (tmp == NULL) {
1186 PyErr_Clear();
1187 return 0;
1188 }
1189 r = PyObject_IsTrue(tmp);
1190 Py_DECREF(tmp);
1191 if (r < 0)
1192 PyErr_Clear();
1193 return r > 0;
1194}
1195
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001196static int
Nick Coghland6009512014-11-20 21:39:37 +10001197flush_std_files(void)
1198{
1199 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1200 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1201 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001202 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001203
1204 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001205 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001206 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001207 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001208 status = -1;
1209 }
Nick Coghland6009512014-11-20 21:39:37 +10001210 else
1211 Py_DECREF(tmp);
1212 }
1213
1214 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001215 tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001216 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001217 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001218 status = -1;
1219 }
Nick Coghland6009512014-11-20 21:39:37 +10001220 else
1221 Py_DECREF(tmp);
1222 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001223
1224 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001225}
1226
1227/* Undo the effect of Py_Initialize().
1228
1229 Beware: if multiple interpreter and/or thread states exist, these
1230 are not wiped out; only the current thread and interpreter state
1231 are deleted. But since everything else is deleted, those other
1232 interpreter and thread states should no longer be used.
1233
1234 (XXX We should do better, e.g. wipe out all interpreters and
1235 threads.)
1236
1237 Locking: as above.
1238
1239*/
1240
Victor Stinner7eee5be2019-11-20 10:38:34 +01001241
1242static void
1243finalize_interp_types(PyThreadState *tstate, int is_main_interp)
1244{
1245 if (is_main_interp) {
1246 /* Sundry finalizers */
Victor Stinner7eee5be2019-11-20 10:38:34 +01001247 _PyFrame_Fini();
Victor Stinner7eee5be2019-11-20 10:38:34 +01001248 _PyTuple_Fini();
1249 _PyList_Fini();
1250 _PySet_Fini();
1251 _PyBytes_Fini();
Victor Stinner630c8df2019-12-17 13:02:18 +01001252 }
1253
1254 _PyLong_Fini(tstate);
1255
1256 if (is_main_interp) {
Victor Stinner7eee5be2019-11-20 10:38:34 +01001257 _PyFloat_Fini();
1258 _PyDict_Fini();
1259 _PySlice_Fini();
1260 }
1261
1262 _PyWarnings_Fini(tstate->interp);
1263
1264 if (is_main_interp) {
1265 _Py_HashRandomization_Fini();
1266 _PyArg_Fini();
1267 _PyAsyncGen_Fini();
1268 _PyContext_Fini();
Victor Stinner3d483342019-11-22 12:27:50 +01001269 }
Victor Stinner7eee5be2019-11-20 10:38:34 +01001270
Victor Stinner3d483342019-11-22 12:27:50 +01001271 /* Cleanup Unicode implementation */
1272 _PyUnicode_Fini(tstate);
1273
1274 if (is_main_interp) {
Victor Stinner7eee5be2019-11-20 10:38:34 +01001275 _Py_ClearFileSystemEncoding();
1276 }
1277}
1278
1279
1280static void
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001281finalize_interp_clear(PyThreadState *tstate)
Victor Stinner7eee5be2019-11-20 10:38:34 +01001282{
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001283 int is_main_interp = _Py_IsMainInterpreter(tstate);
1284
Victor Stinner7eee5be2019-11-20 10:38:34 +01001285 /* Clear interpreter state and all thread states */
1286 PyInterpreterState_Clear(tstate->interp);
1287
Pablo Galindoac0e1c22019-12-04 11:51:03 +00001288 /* Trigger a GC collection on subinterpreters*/
1289 if (!is_main_interp) {
1290 _PyGC_CollectNoFail();
1291 }
1292
Victor Stinner7eee5be2019-11-20 10:38:34 +01001293 finalize_interp_types(tstate, is_main_interp);
1294
1295 if (is_main_interp) {
1296 /* XXX Still allocated:
1297 - various static ad-hoc pointers to interned strings
1298 - int and float free list blocks
1299 - whatever various modules and libraries allocate
1300 */
1301
1302 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1303
1304 _PyExc_Fini();
Victor Stinner7eee5be2019-11-20 10:38:34 +01001305 }
Victor Stinner72474072019-11-20 12:25:50 +01001306
1307 _PyGC_Fini(tstate);
Victor Stinner7eee5be2019-11-20 10:38:34 +01001308}
1309
1310
1311static void
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001312finalize_interp_delete(PyThreadState *tstate)
Victor Stinner7eee5be2019-11-20 10:38:34 +01001313{
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001314 if (_Py_IsMainInterpreter(tstate)) {
Victor Stinner7eee5be2019-11-20 10:38:34 +01001315 /* Cleanup auto-thread-state */
1316 _PyGILState_Fini(tstate);
1317 }
1318
Victor Stinner7eee5be2019-11-20 10:38:34 +01001319 PyInterpreterState_Delete(tstate->interp);
1320}
1321
1322
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001323int
1324Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001325{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001326 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001327
Victor Stinner8e91c242019-04-24 17:24:01 +02001328 _PyRuntimeState *runtime = &_PyRuntime;
1329 if (!runtime->initialized) {
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001330 return status;
Victor Stinner8e91c242019-04-24 17:24:01 +02001331 }
Nick Coghland6009512014-11-20 21:39:37 +10001332
Victor Stinnere225beb2019-06-03 18:14:24 +02001333 /* Get current thread state and interpreter pointer */
1334 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
1335 PyInterpreterState *interp = tstate->interp;
Victor Stinner8e91c242019-04-24 17:24:01 +02001336
Victor Stinnerb45d2592019-06-20 00:05:23 +02001337 // Wrap up existing "threading"-module-created, non-daemon threads.
1338 wait_for_thread_shutdown(tstate);
1339
1340 // Make any remaining pending calls.
Victor Stinner2b1df452020-01-13 18:46:59 +01001341 _Py_FinishPendingCalls(tstate);
Victor Stinnerb45d2592019-06-20 00:05:23 +02001342
Nick Coghland6009512014-11-20 21:39:37 +10001343 /* The interpreter is still entirely intact at this point, and the
1344 * exit funcs may be relying on that. In particular, if some thread
1345 * or exit func is still waiting to do an import, the import machinery
1346 * expects Py_IsInitialized() to return true. So don't say the
Eric Snow842a2f02019-03-15 15:47:51 -06001347 * runtime is uninitialized until after the exit funcs have run.
Nick Coghland6009512014-11-20 21:39:37 +10001348 * Note that Threading.py uses an exit func to do a join on all the
1349 * threads created thru it, so this also protects pending imports in
1350 * the threads created via Threading.
1351 */
Nick Coghland6009512014-11-20 21:39:37 +10001352
Victor Stinnerb45d2592019-06-20 00:05:23 +02001353 call_py_exitfuncs(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001354
Victor Stinnerda273412017-12-15 01:46:02 +01001355 /* Copy the core config, PyInterpreterState_Delete() free
1356 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001357#ifdef Py_REF_DEBUG
Victor Stinner331a6a52019-05-27 16:39:22 +02001358 int show_ref_count = interp->config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001359#endif
1360#ifdef Py_TRACE_REFS
Victor Stinner331a6a52019-05-27 16:39:22 +02001361 int dump_refs = interp->config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001362#endif
1363#ifdef WITH_PYMALLOC
Victor Stinner331a6a52019-05-27 16:39:22 +02001364 int malloc_stats = interp->config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001365#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001366
Victor Stinnereb4e2ae2020-03-08 11:57:45 +01001367 /* Remaining daemon threads will automatically exit
1368 when they attempt to take the GIL (ex: PyEval_RestoreThread()). */
Victor Stinner7b3c2522020-03-07 00:24:23 +01001369 _PyRuntimeState_SetFinalizing(runtime, tstate);
Victor Stinner8e91c242019-04-24 17:24:01 +02001370 runtime->initialized = 0;
1371 runtime->core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001372
Victor Stinnere0deff32015-03-24 13:46:18 +01001373 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001374 if (flush_std_files() < 0) {
1375 status = -1;
1376 }
Nick Coghland6009512014-11-20 21:39:37 +10001377
1378 /* Disable signal handling */
1379 PyOS_FiniInterrupts();
1380
1381 /* Collect garbage. This may call finalizers; it's nice to call these
1382 * before all modules are destroyed.
1383 * XXX If a __del__ or weakref callback is triggered here, and tries to
1384 * XXX import a module, bad things can happen, because Python no
1385 * XXX longer believes it's initialized.
1386 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1387 * XXX is easy to provoke that way. I've also seen, e.g.,
1388 * XXX Exception exceptions.ImportError: 'No module named sha'
1389 * XXX in <function callback at 0x008F5718> ignored
1390 * XXX but I'm unclear on exactly how that one happens. In any case,
1391 * XXX I haven't seen a real-life report of either of these.
1392 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001393 _PyGC_CollectIfEnabled();
Eric Snowdae02762017-09-14 00:35:58 -07001394
Steve Dowerb82e17e2019-05-23 08:45:22 -07001395 /* Clear all loghooks */
1396 /* We want minimal exposure of this function, so define the extern
1397 * here. The linker should discover the correct function without
1398 * exporting a symbol. */
1399 extern void _PySys_ClearAuditHooks(void);
1400 _PySys_ClearAuditHooks();
1401
Nick Coghland6009512014-11-20 21:39:37 +10001402 /* Destroy all modules */
Victor Stinner987a0dc2019-06-19 10:36:10 +02001403 _PyImport_Cleanup(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001404
Inada Naoki91234a12019-06-03 21:30:58 +09001405 /* Print debug stats if any */
1406 _PyEval_Fini();
1407
Victor Stinnere0deff32015-03-24 13:46:18 +01001408 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001409 if (flush_std_files() < 0) {
1410 status = -1;
1411 }
Nick Coghland6009512014-11-20 21:39:37 +10001412
1413 /* Collect final garbage. This disposes of cycles created by
1414 * class definitions, for example.
1415 * XXX This is disabled because it caused too many problems. If
1416 * XXX a __del__ or weakref callback triggers here, Python code has
1417 * XXX a hard time running, because even the sys module has been
1418 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1419 * XXX One symptom is a sequence of information-free messages
1420 * XXX coming from threads (if a __del__ or callback is invoked,
1421 * XXX other threads can execute too, and any exception they encounter
1422 * XXX triggers a comedy of errors as subsystem after subsystem
1423 * XXX fails to find what it *expects* to find in sys to help report
1424 * XXX the exception and consequent unexpected failures). I've also
1425 * XXX seen segfaults then, after adding print statements to the
1426 * XXX Python code getting called.
1427 */
1428#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001429 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001430#endif
1431
1432 /* Disable tracemalloc after all Python objects have been destroyed,
1433 so it is possible to use tracemalloc in objects destructor. */
1434 _PyTraceMalloc_Fini();
1435
1436 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1437 _PyImport_Fini();
1438
1439 /* Cleanup typeobject.c's internal caches. */
1440 _PyType_Fini();
1441
1442 /* unload faulthandler module */
1443 _PyFaulthandler_Fini();
1444
Nick Coghland6009512014-11-20 21:39:37 +10001445 /* dump hash stats */
1446 _PyHash_Fini();
1447
Eric Snowdae02762017-09-14 00:35:58 -07001448#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001449 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001450 _PyDebug_PrintTotalRefs();
1451 }
Eric Snowdae02762017-09-14 00:35:58 -07001452#endif
Nick Coghland6009512014-11-20 21:39:37 +10001453
1454#ifdef Py_TRACE_REFS
1455 /* Display all objects still alive -- this can invoke arbitrary
1456 * __repr__ overrides, so requires a mostly-intact interpreter.
1457 * Alas, a lot of stuff may still be alive now that will be cleaned
1458 * up later.
1459 */
Victor Stinnerda273412017-12-15 01:46:02 +01001460 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001461 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001462 }
Nick Coghland6009512014-11-20 21:39:37 +10001463#endif /* Py_TRACE_REFS */
1464
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001465 finalize_interp_clear(tstate);
1466 finalize_interp_delete(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001467
1468#ifdef Py_TRACE_REFS
1469 /* Display addresses (& refcnts) of all objects still alive.
1470 * An address can be used to find the repr of the object, printed
1471 * above by _Py_PrintReferences.
1472 */
Victor Stinnerda273412017-12-15 01:46:02 +01001473 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001474 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001475 }
Nick Coghland6009512014-11-20 21:39:37 +10001476#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001477#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001478 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001479 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be8072016-03-14 12:04:26 +01001480 }
Nick Coghland6009512014-11-20 21:39:37 +10001481#endif
1482
Victor Stinner8e91c242019-04-24 17:24:01 +02001483 call_ll_exitfuncs(runtime);
Victor Stinner9316ee42017-11-25 03:17:57 +01001484
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001485 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001486 return status;
1487}
1488
1489void
1490Py_Finalize(void)
1491{
1492 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001493}
1494
Victor Stinnerb0051362019-11-22 17:52:42 +01001495
Nick Coghland6009512014-11-20 21:39:37 +10001496/* Create and initialize a new interpreter and thread, and return the
1497 new thread. This requires that Py_Initialize() has been called
1498 first.
1499
1500 Unsuccessful initialization yields a NULL pointer. Note that *no*
1501 exception information is available even in this case -- the
1502 exception information is held in the thread, and there is no
1503 thread.
1504
1505 Locking: as above.
1506
1507*/
1508
Victor Stinner331a6a52019-05-27 16:39:22 +02001509static PyStatus
Victor Stinnera7368ac2017-11-15 18:11:45 -08001510new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001511{
Victor Stinner331a6a52019-05-27 16:39:22 +02001512 PyStatus status;
Nick Coghland6009512014-11-20 21:39:37 +10001513
Victor Stinner331a6a52019-05-27 16:39:22 +02001514 status = _PyRuntime_Initialize();
1515 if (_PyStatus_EXCEPTION(status)) {
1516 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001517 }
1518 _PyRuntimeState *runtime = &_PyRuntime;
1519
1520 if (!runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001521 return _PyStatus_ERR("Py_Initialize must be called first");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001522 }
Nick Coghland6009512014-11-20 21:39:37 +10001523
Victor Stinner8a1be612016-03-14 22:07:55 +01001524 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1525 interpreters: disable PyGILState_Check(). */
1526 _PyGILState_check_enabled = 0;
1527
Victor Stinner43125222019-04-24 18:23:53 +02001528 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001529 if (interp == NULL) {
1530 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001531 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001532 }
Nick Coghland6009512014-11-20 21:39:37 +10001533
Victor Stinner43125222019-04-24 18:23:53 +02001534 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001535 if (tstate == NULL) {
1536 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001537 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001538 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001539 }
1540
Victor Stinner43125222019-04-24 18:23:53 +02001541 PyThreadState *save_tstate = PyThreadState_Swap(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001542
Eric Snow1abcf672017-05-23 21:46:51 -07001543 /* Copy the current interpreter config into the new interpreter */
Victor Stinner331a6a52019-05-27 16:39:22 +02001544 PyConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001545 if (save_tstate != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001546 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001547 } else {
1548 /* No current thread state, copy from the main interpreter */
1549 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinner331a6a52019-05-27 16:39:22 +02001550 config = &main_interp->config;
Victor Stinnerda273412017-12-15 01:46:02 +01001551 }
1552
Victor Stinner331a6a52019-05-27 16:39:22 +02001553 status = _PyConfig_Copy(&interp->config, config);
1554 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001555 goto error;
Victor Stinnerda273412017-12-15 01:46:02 +01001556 }
Eric Snow1abcf672017-05-23 21:46:51 -07001557
Victor Stinnerd863ade2019-12-06 03:37:07 +01001558 status = pycore_interp_init(tstate);
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001559 if (_PyStatus_EXCEPTION(status)) {
1560 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001561 }
1562
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001563 status = init_interp_main(tstate);
1564 if (_PyStatus_EXCEPTION(status)) {
1565 goto error;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001566 }
Nick Coghland6009512014-11-20 21:39:37 +10001567
Victor Stinnera7368ac2017-11-15 18:11:45 -08001568 *tstate_p = tstate;
Victor Stinner331a6a52019-05-27 16:39:22 +02001569 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001570
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001571error:
Victor Stinnerb0051362019-11-22 17:52:42 +01001572 *tstate_p = NULL;
1573
1574 /* Oops, it didn't work. Undo it all. */
Nick Coghland6009512014-11-20 21:39:37 +10001575 PyErr_PrintEx(0);
1576 PyThreadState_Clear(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001577 PyThreadState_Delete(tstate);
1578 PyInterpreterState_Delete(interp);
Victor Stinner9da74302019-11-20 11:17:17 +01001579 PyThreadState_Swap(save_tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001580
Victor Stinnerb0051362019-11-22 17:52:42 +01001581 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001582}
1583
1584PyThreadState *
1585Py_NewInterpreter(void)
1586{
Stéphane Wirtel9e06d2b2019-03-18 17:10:29 +01001587 PyThreadState *tstate = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001588 PyStatus status = new_interpreter(&tstate);
1589 if (_PyStatus_EXCEPTION(status)) {
1590 Py_ExitStatusException(status);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001591 }
1592 return tstate;
1593
Nick Coghland6009512014-11-20 21:39:37 +10001594}
1595
1596/* Delete an interpreter and its last thread. This requires that the
1597 given thread state is current, that the thread has no remaining
1598 frames, and that it is its interpreter's only remaining thread.
1599 It is a fatal error to violate these constraints.
1600
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001601 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001602 everything, regardless.)
1603
1604 Locking: as above.
1605
1606*/
1607
1608void
1609Py_EndInterpreter(PyThreadState *tstate)
1610{
1611 PyInterpreterState *interp = tstate->interp;
1612
Victor Stinnerb45d2592019-06-20 00:05:23 +02001613 if (tstate != _PyThreadState_GET()) {
Victor Stinner9e5d30c2020-03-07 00:54:20 +01001614 Py_FatalError("thread is not current");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001615 }
1616 if (tstate->frame != NULL) {
Victor Stinner9e5d30c2020-03-07 00:54:20 +01001617 Py_FatalError("thread still has a frame");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001618 }
Eric Snow5be45a62019-03-08 22:47:07 -07001619 interp->finalizing = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001620
Eric Snow842a2f02019-03-15 15:47:51 -06001621 // Wrap up existing "threading"-module-created, non-daemon threads.
Victor Stinnerb45d2592019-06-20 00:05:23 +02001622 wait_for_thread_shutdown(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001623
Victor Stinnerb45d2592019-06-20 00:05:23 +02001624 call_py_exitfuncs(tstate);
Marcel Plch776407f2017-12-20 11:17:58 +01001625
Victor Stinnerb45d2592019-06-20 00:05:23 +02001626 if (tstate != interp->tstate_head || tstate->next != NULL) {
Victor Stinner9e5d30c2020-03-07 00:54:20 +01001627 Py_FatalError("not the last thread");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001628 }
Nick Coghland6009512014-11-20 21:39:37 +10001629
Victor Stinner987a0dc2019-06-19 10:36:10 +02001630 _PyImport_Cleanup(tstate);
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001631 finalize_interp_clear(tstate);
1632 finalize_interp_delete(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001633}
1634
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001635/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001636
Victor Stinner331a6a52019-05-27 16:39:22 +02001637static PyStatus
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001638add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001639{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001640 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001641 m = PyImport_AddModule("__main__");
1642 if (m == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +02001643 return _PyStatus_ERR("can't create __main__ module");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001644
Nick Coghland6009512014-11-20 21:39:37 +10001645 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001646 ann_dict = PyDict_New();
1647 if ((ann_dict == NULL) ||
1648 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001649 return _PyStatus_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001650 }
1651 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001652
Nick Coghland6009512014-11-20 21:39:37 +10001653 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1654 PyObject *bimod = PyImport_ImportModule("builtins");
1655 if (bimod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001656 return _PyStatus_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001657 }
1658 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001659 return _PyStatus_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001660 }
1661 Py_DECREF(bimod);
1662 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001663
Nick Coghland6009512014-11-20 21:39:37 +10001664 /* Main is a little special - imp.is_builtin("__main__") will return
1665 * False, but BuiltinImporter is still the most appropriate initial
1666 * setting for its __loader__ attribute. A more suitable value will
1667 * be set if __main__ gets further initialized later in the startup
1668 * process.
1669 */
1670 loader = PyDict_GetItemString(d, "__loader__");
1671 if (loader == NULL || loader == Py_None) {
1672 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1673 "BuiltinImporter");
1674 if (loader == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001675 return _PyStatus_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001676 }
1677 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001678 return _PyStatus_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001679 }
1680 Py_DECREF(loader);
1681 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001682 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001683}
1684
Nick Coghland6009512014-11-20 21:39:37 +10001685/* Import the site module (not into __main__ though) */
1686
Victor Stinner331a6a52019-05-27 16:39:22 +02001687static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001688init_import_site(void)
Nick Coghland6009512014-11-20 21:39:37 +10001689{
1690 PyObject *m;
1691 m = PyImport_ImportModule("site");
1692 if (m == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001693 return _PyStatus_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001694 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001695 Py_DECREF(m);
Victor Stinner331a6a52019-05-27 16:39:22 +02001696 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001697}
1698
Victor Stinner874dbe82015-09-04 17:29:57 +02001699/* Check if a file descriptor is valid or not.
1700 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1701static int
1702is_valid_fd(int fd)
1703{
Victor Stinner3092d6b2019-04-17 18:09:12 +02001704/* dup() is faster than fstat(): fstat() can require input/output operations,
1705 whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python
1706 startup. Problem: dup() doesn't check if the file descriptor is valid on
1707 some platforms.
1708
1709 bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other
1710 side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with
1711 EBADF. FreeBSD has similar issue (bpo-32849).
1712
1713 Only use dup() on platforms where dup() is enough to detect invalid FD in
1714 corner cases: on Linux and Windows (bpo-32849). */
1715#if defined(__linux__) || defined(MS_WINDOWS)
1716 if (fd < 0) {
1717 return 0;
1718 }
1719 int fd2;
1720
1721 _Py_BEGIN_SUPPRESS_IPH
1722 fd2 = dup(fd);
1723 if (fd2 >= 0) {
1724 close(fd2);
1725 }
1726 _Py_END_SUPPRESS_IPH
1727
1728 return (fd2 >= 0);
1729#else
Victor Stinner1c4670e2017-05-04 00:45:56 +02001730 struct stat st;
1731 return (fstat(fd, &st) == 0);
Victor Stinner1c4670e2017-05-04 00:45:56 +02001732#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001733}
1734
1735/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001736static PyObject*
Victor Stinner331a6a52019-05-27 16:39:22 +02001737create_stdio(const PyConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001738 int fd, int write_mode, const char* name,
Victor Stinner709d23d2019-05-02 14:56:30 -04001739 const wchar_t* encoding, const wchar_t* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001740{
1741 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1742 const char* mode;
1743 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001744 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001745 int buffering, isatty;
1746 _Py_IDENTIFIER(open);
1747 _Py_IDENTIFIER(isatty);
1748 _Py_IDENTIFIER(TextIOWrapper);
1749 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001750 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001751
Victor Stinner874dbe82015-09-04 17:29:57 +02001752 if (!is_valid_fd(fd))
1753 Py_RETURN_NONE;
1754
Nick Coghland6009512014-11-20 21:39:37 +10001755 /* stdin is always opened in buffered mode, first because it shouldn't
1756 make a difference in common use cases, second because TextIOWrapper
1757 depends on the presence of a read1() method which only exists on
1758 buffered streams.
1759 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001760 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001761 buffering = 0;
1762 else
1763 buffering = -1;
1764 if (write_mode)
1765 mode = "wb";
1766 else
1767 mode = "rb";
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001768 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOO",
Nick Coghland6009512014-11-20 21:39:37 +10001769 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001770 Py_None, Py_None, /* encoding, errors */
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001771 Py_None, Py_False); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001772 if (buf == NULL)
1773 goto error;
1774
1775 if (buffering) {
1776 _Py_IDENTIFIER(raw);
1777 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1778 if (raw == NULL)
1779 goto error;
1780 }
1781 else {
1782 raw = buf;
1783 Py_INCREF(raw);
1784 }
1785
Steve Dower39294992016-08-30 21:22:36 -07001786#ifdef MS_WINDOWS
1787 /* Windows console IO is always UTF-8 encoded */
1788 if (PyWindowsConsoleIO_Check(raw))
Victor Stinner709d23d2019-05-02 14:56:30 -04001789 encoding = L"utf-8";
Steve Dower39294992016-08-30 21:22:36 -07001790#endif
1791
Nick Coghland6009512014-11-20 21:39:37 +10001792 text = PyUnicode_FromString(name);
1793 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1794 goto error;
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001795 res = _PyObject_CallMethodIdNoArgs(raw, &PyId_isatty);
Nick Coghland6009512014-11-20 21:39:37 +10001796 if (res == NULL)
1797 goto error;
1798 isatty = PyObject_IsTrue(res);
1799 Py_DECREF(res);
1800 if (isatty == -1)
1801 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001802 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001803 write_through = Py_True;
1804 else
1805 write_through = Py_False;
Jendrik Seipp5b907712020-01-01 23:21:43 +01001806 if (buffered_stdio && (isatty || fd == fileno(stderr)))
Nick Coghland6009512014-11-20 21:39:37 +10001807 line_buffering = Py_True;
1808 else
1809 line_buffering = Py_False;
1810
1811 Py_CLEAR(raw);
1812 Py_CLEAR(text);
1813
1814#ifdef MS_WINDOWS
1815 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1816 newlines to "\n".
1817 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1818 newline = NULL;
1819#else
1820 /* sys.stdin: split lines at "\n".
1821 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1822 newline = "\n";
1823#endif
1824
Victor Stinner709d23d2019-05-02 14:56:30 -04001825 PyObject *encoding_str = PyUnicode_FromWideChar(encoding, -1);
1826 if (encoding_str == NULL) {
1827 Py_CLEAR(buf);
1828 goto error;
1829 }
1830
1831 PyObject *errors_str = PyUnicode_FromWideChar(errors, -1);
1832 if (errors_str == NULL) {
1833 Py_CLEAR(buf);
1834 Py_CLEAR(encoding_str);
1835 goto error;
1836 }
1837
1838 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OOOsOO",
1839 buf, encoding_str, errors_str,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001840 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001841 Py_CLEAR(buf);
Victor Stinner709d23d2019-05-02 14:56:30 -04001842 Py_CLEAR(encoding_str);
1843 Py_CLEAR(errors_str);
Nick Coghland6009512014-11-20 21:39:37 +10001844 if (stream == NULL)
1845 goto error;
1846
1847 if (write_mode)
1848 mode = "w";
1849 else
1850 mode = "r";
1851 text = PyUnicode_FromString(mode);
1852 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1853 goto error;
1854 Py_CLEAR(text);
1855 return stream;
1856
1857error:
1858 Py_XDECREF(buf);
1859 Py_XDECREF(stream);
1860 Py_XDECREF(text);
1861 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001862
Victor Stinner874dbe82015-09-04 17:29:57 +02001863 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1864 /* Issue #24891: the file descriptor was closed after the first
1865 is_valid_fd() check was called. Ignore the OSError and set the
1866 stream to None. */
1867 PyErr_Clear();
1868 Py_RETURN_NONE;
1869 }
1870 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001871}
1872
Victor Stinnere0c9ab82019-11-22 16:19:14 +01001873/* Set builtins.open to io.OpenWrapper */
1874static PyStatus
1875init_set_builtins_open(PyThreadState *tstate)
1876{
1877 PyObject *iomod = NULL, *wrapper;
1878 PyObject *bimod = NULL;
1879 PyStatus res = _PyStatus_OK();
1880
1881 if (!(iomod = PyImport_ImportModule("io"))) {
1882 goto error;
1883 }
1884
1885 if (!(bimod = PyImport_ImportModule("builtins"))) {
1886 goto error;
1887 }
1888
1889 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1890 goto error;
1891 }
1892
1893 /* Set builtins.open */
1894 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1895 Py_DECREF(wrapper);
1896 goto error;
1897 }
1898 Py_DECREF(wrapper);
1899 goto done;
1900
1901error:
1902 res = _PyStatus_ERR("can't initialize io.open");
1903
1904done:
1905 Py_XDECREF(bimod);
1906 Py_XDECREF(iomod);
1907 return res;
1908}
1909
1910
Nick Coghland6009512014-11-20 21:39:37 +10001911/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinner331a6a52019-05-27 16:39:22 +02001912static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001913init_sys_streams(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10001914{
Victor Stinnere0c9ab82019-11-22 16:19:14 +01001915 PyObject *iomod = NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001916 PyObject *m;
1917 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001918 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001919 PyObject * encoding_attr;
Victor Stinner331a6a52019-05-27 16:39:22 +02001920 PyStatus res = _PyStatus_OK();
Victor Stinnerb45d2592019-06-20 00:05:23 +02001921 const PyConfig *config = &tstate->interp->config;
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001922
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001923 /* Check that stdin is not a directory
1924 Using shell redirection, you can redirect stdin to a directory,
1925 crashing the Python interpreter. Catch this common mistake here
1926 and output a useful error message. Note that under MS Windows,
1927 the shell already prevents that. */
1928#ifndef MS_WINDOWS
1929 struct _Py_stat_struct sb;
1930 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1931 S_ISDIR(sb.st_mode)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001932 return _PyStatus_ERR("<stdin> is a directory, cannot continue");
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001933 }
1934#endif
1935
Nick Coghland6009512014-11-20 21:39:37 +10001936 /* Hack to avoid a nasty recursion issue when Python is invoked
1937 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1938 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1939 goto error;
1940 }
1941 Py_DECREF(m);
1942
1943 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1944 goto error;
1945 }
1946 Py_DECREF(m);
1947
Nick Coghland6009512014-11-20 21:39:37 +10001948 if (!(iomod = PyImport_ImportModule("io"))) {
1949 goto error;
1950 }
Nick Coghland6009512014-11-20 21:39:37 +10001951
Nick Coghland6009512014-11-20 21:39:37 +10001952 /* Set sys.stdin */
1953 fd = fileno(stdin);
1954 /* Under some conditions stdin, stdout and stderr may not be connected
1955 * and fileno() may point to an invalid file descriptor. For example
1956 * GUI apps don't have valid standard streams by default.
1957 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001958 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001959 config->stdio_encoding,
1960 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001961 if (std == NULL)
1962 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001963 PySys_SetObject("__stdin__", std);
1964 _PySys_SetObjectId(&PyId_stdin, std);
1965 Py_DECREF(std);
1966
1967 /* Set sys.stdout */
1968 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001969 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001970 config->stdio_encoding,
1971 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001972 if (std == NULL)
1973 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001974 PySys_SetObject("__stdout__", std);
1975 _PySys_SetObjectId(&PyId_stdout, std);
1976 Py_DECREF(std);
1977
1978#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1979 /* Set sys.stderr, replaces the preliminary stderr */
1980 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001981 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001982 config->stdio_encoding,
Victor Stinner709d23d2019-05-02 14:56:30 -04001983 L"backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001984 if (std == NULL)
1985 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001986
1987 /* Same as hack above, pre-import stderr's codec to avoid recursion
1988 when import.c tries to write to stderr in verbose mode. */
1989 encoding_attr = PyObject_GetAttrString(std, "encoding");
1990 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001991 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001992 if (std_encoding != NULL) {
1993 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1994 Py_XDECREF(codec_info);
1995 }
1996 Py_DECREF(encoding_attr);
1997 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001998 _PyErr_Clear(tstate); /* Not a fatal error if codec isn't available */
Nick Coghland6009512014-11-20 21:39:37 +10001999
2000 if (PySys_SetObject("__stderr__", std) < 0) {
2001 Py_DECREF(std);
2002 goto error;
2003 }
2004 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
2005 Py_DECREF(std);
2006 goto error;
2007 }
2008 Py_DECREF(std);
2009#endif
2010
Victor Stinnera7368ac2017-11-15 18:11:45 -08002011 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10002012
Victor Stinnera7368ac2017-11-15 18:11:45 -08002013error:
Victor Stinner331a6a52019-05-27 16:39:22 +02002014 res = _PyStatus_ERR("can't initialize sys standard streams");
Victor Stinnera7368ac2017-11-15 18:11:45 -08002015
2016done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02002017 _Py_ClearStandardStreamEncoding();
Nick Coghland6009512014-11-20 21:39:37 +10002018 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08002019 return res;
Nick Coghland6009512014-11-20 21:39:37 +10002020}
2021
2022
Victor Stinner10dc4842015-03-24 12:01:30 +01002023static void
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002024_Py_FatalError_DumpTracebacks(int fd, PyInterpreterState *interp,
2025 PyThreadState *tstate)
Victor Stinner10dc4842015-03-24 12:01:30 +01002026{
Victor Stinner10dc4842015-03-24 12:01:30 +01002027 fputc('\n', stderr);
2028 fflush(stderr);
2029
2030 /* display the current Python stack */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002031 _Py_DumpTracebackThreads(fd, interp, tstate);
Victor Stinner10dc4842015-03-24 12:01:30 +01002032}
Victor Stinner791da1c2016-03-14 16:53:12 +01002033
2034/* Print the current exception (if an exception is set) with its traceback,
2035 or display the current Python stack.
2036
2037 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
2038 called on catastrophic cases.
2039
2040 Return 1 if the traceback was displayed, 0 otherwise. */
2041
2042static int
2043_Py_FatalError_PrintExc(int fd)
2044{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002045 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner791da1c2016-03-14 16:53:12 +01002046 PyObject *ferr, *res;
2047 PyObject *exception, *v, *tb;
2048 int has_tb;
2049
Victor Stinnerb45d2592019-06-20 00:05:23 +02002050 _PyErr_Fetch(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002051 if (exception == NULL) {
2052 /* No current exception */
2053 return 0;
2054 }
2055
2056 ferr = _PySys_GetObjectId(&PyId_stderr);
2057 if (ferr == NULL || ferr == Py_None) {
2058 /* sys.stderr is not set yet or set to None,
2059 no need to try to display the exception */
2060 return 0;
2061 }
2062
Victor Stinnerb45d2592019-06-20 00:05:23 +02002063 _PyErr_NormalizeException(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002064 if (tb == NULL) {
2065 tb = Py_None;
2066 Py_INCREF(tb);
2067 }
2068 PyException_SetTraceback(v, tb);
2069 if (exception == NULL) {
2070 /* PyErr_NormalizeException() failed */
2071 return 0;
2072 }
2073
2074 has_tb = (tb != Py_None);
2075 PyErr_Display(exception, v, tb);
2076 Py_XDECREF(exception);
2077 Py_XDECREF(v);
2078 Py_XDECREF(tb);
2079
2080 /* sys.stderr may be buffered: call sys.stderr.flush() */
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002081 res = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002082 if (res == NULL) {
2083 _PyErr_Clear(tstate);
2084 }
2085 else {
Victor Stinner791da1c2016-03-14 16:53:12 +01002086 Py_DECREF(res);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002087 }
Victor Stinner791da1c2016-03-14 16:53:12 +01002088
2089 return has_tb;
2090}
2091
Nick Coghland6009512014-11-20 21:39:37 +10002092/* Print fatal error message and abort */
2093
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002094#ifdef MS_WINDOWS
2095static void
2096fatal_output_debug(const char *msg)
2097{
2098 /* buffer of 256 bytes allocated on the stack */
2099 WCHAR buffer[256 / sizeof(WCHAR)];
2100 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2101 size_t msglen;
2102
2103 OutputDebugStringW(L"Fatal Python error: ");
2104
2105 msglen = strlen(msg);
2106 while (msglen) {
2107 size_t i;
2108
2109 if (buflen > msglen) {
2110 buflen = msglen;
2111 }
2112
2113 /* Convert the message to wchar_t. This uses a simple one-to-one
2114 conversion, assuming that the this error message actually uses
2115 ASCII only. If this ceases to be true, we will have to convert. */
2116 for (i=0; i < buflen; ++i) {
2117 buffer[i] = msg[i];
2118 }
2119 buffer[i] = L'\0';
2120 OutputDebugStringW(buffer);
2121
2122 msg += buflen;
2123 msglen -= buflen;
2124 }
2125 OutputDebugStringW(L"\n");
2126}
2127#endif
2128
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002129
2130static void
2131fatal_error_dump_runtime(FILE *stream, _PyRuntimeState *runtime)
2132{
2133 fprintf(stream, "Python runtime state: ");
Victor Stinner7b3c2522020-03-07 00:24:23 +01002134 PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(runtime);
2135 if (finalizing) {
2136 fprintf(stream, "finalizing (tstate=%p)", finalizing);
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002137 }
2138 else if (runtime->initialized) {
2139 fprintf(stream, "initialized");
2140 }
2141 else if (runtime->core_initialized) {
2142 fprintf(stream, "core initialized");
2143 }
2144 else if (runtime->preinitialized) {
2145 fprintf(stream, "preinitialized");
2146 }
2147 else if (runtime->preinitializing) {
2148 fprintf(stream, "preinitializing");
2149 }
2150 else {
2151 fprintf(stream, "unknown");
2152 }
2153 fprintf(stream, "\n");
2154 fflush(stream);
2155}
2156
2157
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002158static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002159fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002160{
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002161 FILE *stream = stderr;
2162 const int fd = fileno(stream);
Victor Stinner53345a42015-03-25 01:55:14 +01002163 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002164
2165 if (reentrant) {
2166 /* Py_FatalError() caused a second fatal error.
2167 Example: flush_std_files() raises a recursion error. */
2168 goto exit;
2169 }
2170 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002171
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002172 fprintf(stream, "Fatal Python error: ");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002173 if (prefix) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002174 fputs(prefix, stream);
2175 fputs(": ", stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002176 }
2177 if (msg) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002178 fputs(msg, stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002179 }
2180 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002181 fprintf(stream, "<message not set>");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002182 }
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002183 fputs("\n", stream);
2184 fflush(stream); /* it helps in Windows debug build */
2185
2186 _PyRuntimeState *runtime = &_PyRuntime;
2187 fatal_error_dump_runtime(stream, runtime);
2188
2189 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
2190 PyInterpreterState *interp = NULL;
2191 if (tstate != NULL) {
2192 interp = tstate->interp;
2193 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002194
Victor Stinner3a228ab2018-11-01 00:26:41 +01002195 /* Check if the current thread has a Python thread state
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002196 and holds the GIL.
Victor Stinner3a228ab2018-11-01 00:26:41 +01002197
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002198 tss_tstate is NULL if Py_FatalError() is called from a C thread which
2199 has no Python thread state.
2200
2201 tss_tstate != tstate if the current Python thread does not hold the GIL.
2202 */
2203 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2204 int has_tstate_and_gil = (tss_tstate != NULL && tss_tstate == tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002205 if (has_tstate_and_gil) {
2206 /* If an exception is set, print the exception with its traceback */
2207 if (!_Py_FatalError_PrintExc(fd)) {
2208 /* No exception is set, or an exception is set without traceback */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002209 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002210 }
2211 }
2212 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002213 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002214 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002215
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002216 /* The main purpose of faulthandler is to display the traceback.
2217 This function already did its best to display a traceback.
2218 Disable faulthandler to prevent writing a second traceback
2219 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002220 _PyFaulthandler_Fini();
2221
Victor Stinner791da1c2016-03-14 16:53:12 +01002222 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002223 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002224 /* Flush sys.stdout and sys.stderr */
2225 flush_std_files();
2226 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002227
Nick Coghland6009512014-11-20 21:39:37 +10002228#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002229 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002230#endif /* MS_WINDOWS */
2231
2232exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002233 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002234#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002235 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002236#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002237 abort();
2238 }
2239 else {
2240 exit(status);
2241 }
2242}
2243
Victor Stinner9e5d30c2020-03-07 00:54:20 +01002244#undef Py_FatalError
2245
Victor Stinner19760862017-12-20 01:41:59 +01002246void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002247Py_FatalError(const char *msg)
2248{
2249 fatal_error(NULL, msg, -1);
2250}
2251
Victor Stinner19760862017-12-20 01:41:59 +01002252void _Py_NO_RETURN
Victor Stinner9e5d30c2020-03-07 00:54:20 +01002253_Py_FatalErrorFunc(const char *func, const char *msg)
2254{
2255 fatal_error(func, msg, -1);
2256}
2257
2258void _Py_NO_RETURN
Victor Stinner331a6a52019-05-27 16:39:22 +02002259Py_ExitStatusException(PyStatus status)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002260{
Victor Stinner331a6a52019-05-27 16:39:22 +02002261 if (_PyStatus_IS_EXIT(status)) {
2262 exit(status.exitcode);
Victor Stinnerdbacfc22019-05-16 16:39:26 +02002263 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002264 else if (_PyStatus_IS_ERROR(status)) {
2265 fatal_error(status.func, status.err_msg, 1);
Victor Stinnerdfe88472019-03-01 12:14:41 +01002266 }
2267 else {
Victor Stinner331a6a52019-05-27 16:39:22 +02002268 Py_FatalError("Py_ExitStatusException() must not be called on success");
Victor Stinnerdfe88472019-03-01 12:14:41 +01002269 }
Nick Coghland6009512014-11-20 21:39:37 +10002270}
2271
2272/* Clean up and exit */
2273
Victor Stinnerd7292b52016-06-17 12:29:00 +02002274# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002275
Nick Coghland6009512014-11-20 21:39:37 +10002276/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002277void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002278{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002279 PyInterpreterState *is = _PyInterpreterState_GET_UNSAFE();
Marcel Plch776407f2017-12-20 11:17:58 +01002280
Antoine Pitroufc5db952017-12-13 02:29:07 +01002281 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002282 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2283
2284 is->pyexitfunc = func;
2285 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002286}
2287
2288static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002289call_py_exitfuncs(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002290{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002291 PyInterpreterState *interp = tstate->interp;
2292 if (interp->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002293 return;
2294
Victor Stinnerb45d2592019-06-20 00:05:23 +02002295 (*interp->pyexitfunc)(interp->pyexitmodule);
2296 _PyErr_Clear(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10002297}
2298
2299/* Wait until threading._shutdown completes, provided
2300 the threading module was imported in the first place.
2301 The shutdown routine will wait until all non-daemon
2302 "threading" threads have completed. */
2303static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002304wait_for_thread_shutdown(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002305{
Nick Coghland6009512014-11-20 21:39:37 +10002306 _Py_IDENTIFIER(_shutdown);
2307 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002308 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002309 if (threading == NULL) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02002310 if (_PyErr_Occurred(tstate)) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002311 PyErr_WriteUnraisable(NULL);
2312 }
2313 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002314 return;
2315 }
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002316 result = _PyObject_CallMethodIdNoArgs(threading, &PyId__shutdown);
Nick Coghland6009512014-11-20 21:39:37 +10002317 if (result == NULL) {
2318 PyErr_WriteUnraisable(threading);
2319 }
2320 else {
2321 Py_DECREF(result);
2322 }
2323 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002324}
2325
2326#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002327int Py_AtExit(void (*func)(void))
2328{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002329 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002330 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002331 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002332 return 0;
2333}
2334
2335static void
Victor Stinner8e91c242019-04-24 17:24:01 +02002336call_ll_exitfuncs(_PyRuntimeState *runtime)
Nick Coghland6009512014-11-20 21:39:37 +10002337{
Victor Stinner8e91c242019-04-24 17:24:01 +02002338 while (runtime->nexitfuncs > 0) {
Victor Stinner87d23a02019-04-26 05:49:26 +02002339 /* pop last function from the list */
2340 runtime->nexitfuncs--;
2341 void (*exitfunc)(void) = runtime->exitfuncs[runtime->nexitfuncs];
2342 runtime->exitfuncs[runtime->nexitfuncs] = NULL;
2343
2344 exitfunc();
Victor Stinner8e91c242019-04-24 17:24:01 +02002345 }
Nick Coghland6009512014-11-20 21:39:37 +10002346
2347 fflush(stdout);
2348 fflush(stderr);
2349}
2350
Victor Stinnercfc88312018-08-01 16:41:25 +02002351void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002352Py_Exit(int sts)
2353{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002354 if (Py_FinalizeEx() < 0) {
2355 sts = 120;
2356 }
Nick Coghland6009512014-11-20 21:39:37 +10002357
2358 exit(sts);
2359}
2360
Victor Stinner331a6a52019-05-27 16:39:22 +02002361static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02002362init_signals(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002363{
2364#ifdef SIGPIPE
2365 PyOS_setsig(SIGPIPE, SIG_IGN);
2366#endif
2367#ifdef SIGXFZ
2368 PyOS_setsig(SIGXFZ, SIG_IGN);
2369#endif
2370#ifdef SIGXFSZ
2371 PyOS_setsig(SIGXFSZ, SIG_IGN);
2372#endif
2373 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerb45d2592019-06-20 00:05:23 +02002374 if (_PyErr_Occurred(tstate)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02002375 return _PyStatus_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002376 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002377 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002378}
2379
2380
2381/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2382 *
2383 * All of the code in this function must only use async-signal-safe functions,
2384 * listed at `man 7 signal` or
2385 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
Victor Stinnerefc28bb2020-03-05 18:13:56 +01002386 *
2387 * If this function is updated, update also _posix_spawn() of subprocess.py.
Nick Coghland6009512014-11-20 21:39:37 +10002388 */
2389void
2390_Py_RestoreSignals(void)
2391{
2392#ifdef SIGPIPE
2393 PyOS_setsig(SIGPIPE, SIG_DFL);
2394#endif
2395#ifdef SIGXFZ
2396 PyOS_setsig(SIGXFZ, SIG_DFL);
2397#endif
2398#ifdef SIGXFSZ
2399 PyOS_setsig(SIGXFSZ, SIG_DFL);
2400#endif
2401}
2402
2403
2404/*
2405 * The file descriptor fd is considered ``interactive'' if either
2406 * a) isatty(fd) is TRUE, or
2407 * b) the -i flag was given, and the filename associated with
2408 * the descriptor is NULL or "<stdin>" or "???".
2409 */
2410int
2411Py_FdIsInteractive(FILE *fp, const char *filename)
2412{
2413 if (isatty((int)fileno(fp)))
2414 return 1;
2415 if (!Py_InteractiveFlag)
2416 return 0;
2417 return (filename == NULL) ||
2418 (strcmp(filename, "<stdin>") == 0) ||
2419 (strcmp(filename, "???") == 0);
2420}
2421
2422
Nick Coghland6009512014-11-20 21:39:37 +10002423/* Wrappers around sigaction() or signal(). */
2424
2425PyOS_sighandler_t
2426PyOS_getsig(int sig)
2427{
2428#ifdef HAVE_SIGACTION
2429 struct sigaction context;
2430 if (sigaction(sig, NULL, &context) == -1)
2431 return SIG_ERR;
2432 return context.sa_handler;
2433#else
2434 PyOS_sighandler_t handler;
2435/* Special signal handling for the secure CRT in Visual Studio 2005 */
2436#if defined(_MSC_VER) && _MSC_VER >= 1400
2437 switch (sig) {
2438 /* Only these signals are valid */
2439 case SIGINT:
2440 case SIGILL:
2441 case SIGFPE:
2442 case SIGSEGV:
2443 case SIGTERM:
2444 case SIGBREAK:
2445 case SIGABRT:
2446 break;
2447 /* Don't call signal() with other values or it will assert */
2448 default:
2449 return SIG_ERR;
2450 }
2451#endif /* _MSC_VER && _MSC_VER >= 1400 */
2452 handler = signal(sig, SIG_IGN);
2453 if (handler != SIG_ERR)
2454 signal(sig, handler);
2455 return handler;
2456#endif
2457}
2458
2459/*
2460 * All of the code in this function must only use async-signal-safe functions,
2461 * listed at `man 7 signal` or
2462 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2463 */
2464PyOS_sighandler_t
2465PyOS_setsig(int sig, PyOS_sighandler_t handler)
2466{
2467#ifdef HAVE_SIGACTION
2468 /* Some code in Modules/signalmodule.c depends on sigaction() being
2469 * used here if HAVE_SIGACTION is defined. Fix that if this code
2470 * changes to invalidate that assumption.
2471 */
2472 struct sigaction context, ocontext;
2473 context.sa_handler = handler;
2474 sigemptyset(&context.sa_mask);
2475 context.sa_flags = 0;
2476 if (sigaction(sig, &context, &ocontext) == -1)
2477 return SIG_ERR;
2478 return ocontext.sa_handler;
2479#else
2480 PyOS_sighandler_t oldhandler;
2481 oldhandler = signal(sig, handler);
2482#ifdef HAVE_SIGINTERRUPT
2483 siginterrupt(sig, 1);
2484#endif
2485 return oldhandler;
2486#endif
2487}
2488
2489#ifdef __cplusplus
2490}
2491#endif