blob: fbeebbdf99da51a3e36695a70fe4373be38c2dd6 [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{
106 return _PyRuntime.finalizing != NULL;
107}
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 Stinner43125222019-04-24 18:23:53 +0200510 runtime->finalizing = 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. */
680 if (_PyWarnings_Init() == NULL) {
681 return _PyStatus_ERR("can't initialize warnings");
682 }
Nick Coghland6009512014-11-20 21:39:37 +1000683
Victor Stinner2ec1a1b2019-11-22 21:54:33 +0100684 if (config->_install_importlib) {
685 status = _PyConfig_WritePathConfig(config);
686 if (_PyStatus_EXCEPTION(status)) {
687 return status;
688 }
Victor Stinnerb1147e42018-07-21 02:06:16 +0200689 }
690 }
691
Eric Snow1abcf672017-05-23 21:46:51 -0700692 /* This call sets up builtin and frozen import support */
Victor Stinnerb45d2592019-06-20 00:05:23 +0200693 if (config->_install_importlib) {
694 status = init_importlib(tstate, sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200695 if (_PyStatus_EXCEPTION(status)) {
696 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800697 }
Eric Snow1abcf672017-05-23 21:46:51 -0700698 }
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100699
700 assert(!_PyErr_Occurred(tstate));
701
Victor Stinner331a6a52019-05-27 16:39:22 +0200702 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100703}
704
705
Victor Stinner331a6a52019-05-27 16:39:22 +0200706static PyStatus
Victor Stinnerd863ade2019-12-06 03:37:07 +0100707pycore_interp_init(PyThreadState *tstate)
708{
709 PyStatus status;
Victor Stinner080ee5a2019-12-08 21:55:58 +0100710 PyObject *sysmod = NULL;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100711
712 status = pycore_init_types(tstate);
713 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner080ee5a2019-12-08 21:55:58 +0100714 goto done;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100715 }
716
Victor Stinnerd863ade2019-12-06 03:37:07 +0100717 status = _PySys_Create(tstate, &sysmod);
718 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner080ee5a2019-12-08 21:55:58 +0100719 goto done;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100720 }
721
722 status = pycore_init_builtins(tstate);
723 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner080ee5a2019-12-08 21:55:58 +0100724 goto done;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100725 }
726
Victor Stinner080ee5a2019-12-08 21:55:58 +0100727 status = pycore_init_import_warnings(tstate, sysmod);
728
729done:
730 /* sys.modules['sys'] contains a strong reference to the module */
731 Py_XDECREF(sysmod);
732 return status;
Victor Stinnerd863ade2019-12-06 03:37:07 +0100733}
734
735
736static PyStatus
Victor Stinner331a6a52019-05-27 16:39:22 +0200737pyinit_config(_PyRuntimeState *runtime,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200738 PyThreadState **tstate_p,
Victor Stinner331a6a52019-05-27 16:39:22 +0200739 const PyConfig *config)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100740{
Victor Stinner331a6a52019-05-27 16:39:22 +0200741 _PyConfig_Write(config, runtime);
Victor Stinner20004952019-03-26 02:31:11 +0100742
Victor Stinner331a6a52019-05-27 16:39:22 +0200743 PyStatus status = pycore_init_runtime(runtime, config);
744 if (_PyStatus_EXCEPTION(status)) {
745 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100746 }
747
Victor Stinnerb45d2592019-06-20 00:05:23 +0200748 PyThreadState *tstate;
749 status = pycore_create_interpreter(runtime, config, &tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200750 if (_PyStatus_EXCEPTION(status)) {
751 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100752 }
Victor Stinnerb45d2592019-06-20 00:05:23 +0200753 *tstate_p = tstate;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100754
Victor Stinnerd863ade2019-12-06 03:37:07 +0100755 status = pycore_interp_init(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200756 if (_PyStatus_EXCEPTION(status)) {
757 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100758 }
Eric Snow1abcf672017-05-23 21:46:51 -0700759
760 /* Only when we get here is the runtime core fully initialized */
Victor Stinner43125222019-04-24 18:23:53 +0200761 runtime->core_initialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200762 return _PyStatus_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700763}
764
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100765
Victor Stinner331a6a52019-05-27 16:39:22 +0200766PyStatus
767_Py_PreInitializeFromPyArgv(const PyPreConfig *src_config, const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100768{
Victor Stinner331a6a52019-05-27 16:39:22 +0200769 PyStatus status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100770
Victor Stinner6d1c4672019-05-20 11:02:00 +0200771 if (src_config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200772 return _PyStatus_ERR("preinitialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +0200773 }
774
Victor Stinner331a6a52019-05-27 16:39:22 +0200775 status = _PyRuntime_Initialize();
776 if (_PyStatus_EXCEPTION(status)) {
777 return status;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100778 }
Victor Stinner43125222019-04-24 18:23:53 +0200779 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100780
Victor Stinnerd3b90412019-09-17 23:59:51 +0200781 if (runtime->preinitialized) {
Victor Stinnerf72346c2019-03-25 17:54:58 +0100782 /* If it's already configured: ignored the new configuration */
Victor Stinner331a6a52019-05-27 16:39:22 +0200783 return _PyStatus_OK();
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100784 }
785
Victor Stinnerd3b90412019-09-17 23:59:51 +0200786 /* Note: preinitialized remains 1 on error, it is only set to 0
787 at exit on success. */
788 runtime->preinitializing = 1;
789
Victor Stinner331a6a52019-05-27 16:39:22 +0200790 PyPreConfig config;
Victor Stinner441b10c2019-09-28 04:28:35 +0200791
792 status = _PyPreConfig_InitFromPreConfig(&config, src_config);
793 if (_PyStatus_EXCEPTION(status)) {
794 return status;
795 }
Victor Stinnerf72346c2019-03-25 17:54:58 +0100796
Victor Stinner331a6a52019-05-27 16:39:22 +0200797 status = _PyPreConfig_Read(&config, args);
798 if (_PyStatus_EXCEPTION(status)) {
799 return status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100800 }
801
Victor Stinner331a6a52019-05-27 16:39:22 +0200802 status = _PyPreConfig_Write(&config);
803 if (_PyStatus_EXCEPTION(status)) {
804 return status;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100805 }
806
Victor Stinnerd3b90412019-09-17 23:59:51 +0200807 runtime->preinitializing = 0;
808 runtime->preinitialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200809 return _PyStatus_OK();
Victor Stinnerf72346c2019-03-25 17:54:58 +0100810}
811
Victor Stinner70005ac2019-05-02 15:25:34 -0400812
Victor Stinner331a6a52019-05-27 16:39:22 +0200813PyStatus
814Py_PreInitializeFromBytesArgs(const PyPreConfig *src_config, Py_ssize_t argc, char **argv)
Victor Stinnerf72346c2019-03-25 17:54:58 +0100815{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100816 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400817 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100818}
819
820
Victor Stinner331a6a52019-05-27 16:39:22 +0200821PyStatus
822Py_PreInitializeFromArgs(const PyPreConfig *src_config, Py_ssize_t argc, wchar_t **argv)
Victor Stinner20004952019-03-26 02:31:11 +0100823{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100824 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400825 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinner20004952019-03-26 02:31:11 +0100826}
827
828
Victor Stinner331a6a52019-05-27 16:39:22 +0200829PyStatus
830Py_PreInitialize(const PyPreConfig *src_config)
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100831{
Victor Stinner70005ac2019-05-02 15:25:34 -0400832 return _Py_PreInitializeFromPyArgv(src_config, NULL);
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100833}
834
835
Victor Stinner331a6a52019-05-27 16:39:22 +0200836PyStatus
837_Py_PreInitializeFromConfig(const PyConfig *config,
838 const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100839{
Victor Stinner331a6a52019-05-27 16:39:22 +0200840 assert(config != NULL);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200841
Victor Stinner331a6a52019-05-27 16:39:22 +0200842 PyStatus status = _PyRuntime_Initialize();
843 if (_PyStatus_EXCEPTION(status)) {
844 return status;
Victor Stinner6d1c4672019-05-20 11:02:00 +0200845 }
846 _PyRuntimeState *runtime = &_PyRuntime;
847
Victor Stinnerd3b90412019-09-17 23:59:51 +0200848 if (runtime->preinitialized) {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200849 /* Already initialized: do nothing */
Victor Stinner331a6a52019-05-27 16:39:22 +0200850 return _PyStatus_OK();
Victor Stinner70005ac2019-05-02 15:25:34 -0400851 }
Victor Stinnercab5d072019-05-17 19:01:14 +0200852
Victor Stinner331a6a52019-05-27 16:39:22 +0200853 PyPreConfig preconfig;
Victor Stinner441b10c2019-09-28 04:28:35 +0200854
Victor Stinner3c30a762019-10-01 10:56:37 +0200855 _PyPreConfig_InitFromConfig(&preconfig, config);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200856
Victor Stinner331a6a52019-05-27 16:39:22 +0200857 if (!config->parse_argv) {
858 return Py_PreInitialize(&preconfig);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200859 }
860 else if (args == NULL) {
Victor Stinnercab5d072019-05-17 19:01:14 +0200861 _PyArgv config_args = {
862 .use_bytes_argv = 0,
Victor Stinner331a6a52019-05-27 16:39:22 +0200863 .argc = config->argv.length,
864 .wchar_argv = config->argv.items};
Victor Stinner6d1c4672019-05-20 11:02:00 +0200865 return _Py_PreInitializeFromPyArgv(&preconfig, &config_args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200866 }
867 else {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200868 return _Py_PreInitializeFromPyArgv(&preconfig, args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200869 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100870}
871
872
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100873/* Begin interpreter initialization
874 *
875 * On return, the first thread and interpreter state have been created,
876 * but the compiler, signal handling, multithreading and
877 * multiple interpreter support, and codec infrastructure are not yet
878 * available.
879 *
880 * The import system will support builtin and frozen modules only.
881 * The only supported io is writing to sys.stderr
882 *
883 * If any operation invoked by this function fails, a fatal error is
884 * issued and the function does not return.
885 *
886 * Any code invoked from this function should *not* assume it has access
887 * to the Python C API (unless the API is explicitly listed as being
888 * safe to call without calling Py_Initialize first)
889 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200890static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200891pyinit_core(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200892 const PyConfig *src_config,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200893 PyThreadState **tstate_p)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200894{
Victor Stinner331a6a52019-05-27 16:39:22 +0200895 PyStatus status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200896
Victor Stinner331a6a52019-05-27 16:39:22 +0200897 status = _Py_PreInitializeFromConfig(src_config, NULL);
898 if (_PyStatus_EXCEPTION(status)) {
899 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200900 }
901
Victor Stinner331a6a52019-05-27 16:39:22 +0200902 PyConfig config;
Victor Stinner8462a492019-10-01 12:06:16 +0200903 _PyConfig_InitCompatConfig(&config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200904
Victor Stinner331a6a52019-05-27 16:39:22 +0200905 status = _PyConfig_Copy(&config, src_config);
906 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200907 goto done;
908 }
909
Victor Stinner331a6a52019-05-27 16:39:22 +0200910 status = PyConfig_Read(&config);
911 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200912 goto done;
913 }
914
915 if (!runtime->core_initialized) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200916 status = pyinit_config(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200917 }
918 else {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200919 status = pyinit_core_reconfigure(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200920 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200921 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200922 goto done;
923 }
924
925done:
Victor Stinner331a6a52019-05-27 16:39:22 +0200926 PyConfig_Clear(&config);
927 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200928}
929
Victor Stinner5ac27a52019-03-27 13:40:14 +0100930
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200931/* Py_Initialize() has already been called: update the main interpreter
932 configuration. Example of bpo-34008: Py_Main() called after
933 Py_Initialize(). */
Victor Stinner331a6a52019-05-27 16:39:22 +0200934static PyStatus
Victor Stinnerb0051362019-11-22 17:52:42 +0100935_Py_ReconfigureMainInterpreter(PyThreadState *tstate)
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200936{
Victor Stinnerb0051362019-11-22 17:52:42 +0100937 PyConfig *config = &tstate->interp->config;
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100938
Victor Stinner331a6a52019-05-27 16:39:22 +0200939 PyObject *argv = _PyWideStringList_AsList(&config->argv);
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100940 if (argv == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200941 return _PyStatus_NO_MEMORY(); \
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100942 }
943
Victor Stinnerb0051362019-11-22 17:52:42 +0100944 int res = PyDict_SetItemString(tstate->interp->sysdict, "argv", argv);
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100945 Py_DECREF(argv);
946 if (res < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200947 return _PyStatus_ERR("fail to set sys.argv");
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200948 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200949 return _PyStatus_OK();
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200950}
951
Victor Stinnerb0051362019-11-22 17:52:42 +0100952
953static PyStatus
954init_interp_main(PyThreadState *tstate)
955{
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100956 assert(!_PyErr_Occurred(tstate));
957
Victor Stinnerb0051362019-11-22 17:52:42 +0100958 PyStatus status;
959 int is_main_interp = _Py_IsMainInterpreter(tstate);
960 PyInterpreterState *interp = tstate->interp;
961 PyConfig *config = &interp->config;
962
963 if (!config->_install_importlib) {
964 /* Special mode for freeze_importlib: run with no import system
965 *
966 * This means anything which needs support from extension modules
967 * or pure Python code in the standard library won't work.
968 */
969 if (is_main_interp) {
970 interp->runtime->initialized = 1;
971 }
972 return _PyStatus_OK();
973 }
974
975 if (is_main_interp) {
976 if (_PyTime_Init() < 0) {
977 return _PyStatus_ERR("can't initialize time");
978 }
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100979 }
Victor Stinnerb0051362019-11-22 17:52:42 +0100980
Victor Stinner81fe5bd2019-12-06 02:43:30 +0100981 if (_PySys_InitMain(tstate) < 0) {
982 return _PyStatus_ERR("can't finish initializing sys");
Victor Stinnerb0051362019-11-22 17:52:42 +0100983 }
984
985 status = init_importlib_external(tstate);
986 if (_PyStatus_EXCEPTION(status)) {
987 return status;
988 }
989
990 if (is_main_interp) {
991 /* initialize the faulthandler module */
992 status = _PyFaulthandler_Init(config->faulthandler);
993 if (_PyStatus_EXCEPTION(status)) {
994 return status;
995 }
996 }
997
998 status = _PyUnicode_InitEncodings(tstate);
999 if (_PyStatus_EXCEPTION(status)) {
1000 return status;
1001 }
1002
1003 if (is_main_interp) {
1004 if (config->install_signal_handlers) {
1005 status = init_signals(tstate);
1006 if (_PyStatus_EXCEPTION(status)) {
1007 return status;
1008 }
1009 }
1010
1011 if (_PyTraceMalloc_Init(config->tracemalloc) < 0) {
1012 return _PyStatus_ERR("can't initialize tracemalloc");
1013 }
1014 }
1015
1016 status = init_sys_streams(tstate);
1017 if (_PyStatus_EXCEPTION(status)) {
1018 return status;
1019 }
1020
1021 status = init_set_builtins_open(tstate);
1022 if (_PyStatus_EXCEPTION(status)) {
1023 return status;
1024 }
1025
1026 status = add_main_module(interp);
1027 if (_PyStatus_EXCEPTION(status)) {
1028 return status;
1029 }
1030
1031 if (is_main_interp) {
1032 /* Initialize warnings. */
1033 PyObject *warnoptions = PySys_GetObject("warnoptions");
1034 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
1035 {
1036 PyObject *warnings_module = PyImport_ImportModule("warnings");
1037 if (warnings_module == NULL) {
1038 fprintf(stderr, "'import warnings' failed; traceback:\n");
1039 _PyErr_Print(tstate);
1040 }
1041 Py_XDECREF(warnings_module);
1042 }
1043
1044 interp->runtime->initialized = 1;
1045 }
1046
1047 if (config->site_import) {
1048 status = init_import_site();
1049 if (_PyStatus_EXCEPTION(status)) {
1050 return status;
1051 }
1052 }
1053
1054 if (is_main_interp) {
1055#ifndef MS_WINDOWS
1056 emit_stderr_warning_for_legacy_locale(interp->runtime);
1057#endif
1058 }
1059
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001060 assert(!_PyErr_Occurred(tstate));
1061
Victor Stinnerb0051362019-11-22 17:52:42 +01001062 return _PyStatus_OK();
1063}
1064
1065
Eric Snowc7ec9982017-05-23 23:00:52 -07001066/* Update interpreter state based on supplied configuration settings
1067 *
1068 * After calling this function, most of the restrictions on the interpreter
1069 * are lifted. The only remaining incomplete settings are those related
1070 * to the main module (sys.argv[0], __main__ metadata)
1071 *
1072 * Calling this when the interpreter is not initializing, is already
1073 * initialized or without a valid current thread state is a fatal error.
1074 * Other errors should be reported as normal Python exceptions with a
1075 * non-zero return code.
1076 */
Victor Stinner331a6a52019-05-27 16:39:22 +02001077static PyStatus
Victor Stinner01b1cc12019-11-20 02:27:56 +01001078pyinit_main(PyThreadState *tstate)
Eric Snow1abcf672017-05-23 21:46:51 -07001079{
Victor Stinnerb0051362019-11-22 17:52:42 +01001080 PyInterpreterState *interp = tstate->interp;
1081 if (!interp->runtime->core_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001082 return _PyStatus_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -07001083 }
Eric Snowc7ec9982017-05-23 23:00:52 -07001084
Victor Stinnerb0051362019-11-22 17:52:42 +01001085 if (interp->runtime->initialized) {
1086 return _Py_ReconfigureMainInterpreter(tstate);
Victor Stinnerfb47bca2018-07-20 17:34:23 +02001087 }
1088
Victor Stinnerb0051362019-11-22 17:52:42 +01001089 PyStatus status = init_interp_main(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001090 if (_PyStatus_EXCEPTION(status)) {
1091 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001092 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001093 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001094}
1095
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001096
Victor Stinner331a6a52019-05-27 16:39:22 +02001097PyStatus
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001098_Py_InitializeMain(void)
1099{
Victor Stinner331a6a52019-05-27 16:39:22 +02001100 PyStatus status = _PyRuntime_Initialize();
1101 if (_PyStatus_EXCEPTION(status)) {
1102 return status;
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001103 }
1104 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinnerb45d2592019-06-20 00:05:23 +02001105 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
Victor Stinner01b1cc12019-11-20 02:27:56 +01001106 return pyinit_main(tstate);
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001107}
1108
1109
Victor Stinner331a6a52019-05-27 16:39:22 +02001110PyStatus
1111Py_InitializeFromConfig(const PyConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -07001112{
Victor Stinner6d1c4672019-05-20 11:02:00 +02001113 if (config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001114 return _PyStatus_ERR("initialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +02001115 }
1116
Victor Stinner331a6a52019-05-27 16:39:22 +02001117 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001118
Victor Stinner331a6a52019-05-27 16:39:22 +02001119 status = _PyRuntime_Initialize();
1120 if (_PyStatus_EXCEPTION(status)) {
1121 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001122 }
1123 _PyRuntimeState *runtime = &_PyRuntime;
1124
Victor Stinnerb45d2592019-06-20 00:05:23 +02001125 PyThreadState *tstate = NULL;
1126 status = pyinit_core(runtime, config, &tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001127 if (_PyStatus_EXCEPTION(status)) {
1128 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001129 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001130 config = &tstate->interp->config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +01001131
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001132 if (config->_init_main) {
Victor Stinner01b1cc12019-11-20 02:27:56 +01001133 status = pyinit_main(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001134 if (_PyStatus_EXCEPTION(status)) {
1135 return status;
Victor Stinner484f20d2019-03-27 02:04:16 +01001136 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001137 }
Victor Stinner484f20d2019-03-27 02:04:16 +01001138
Victor Stinner331a6a52019-05-27 16:39:22 +02001139 return _PyStatus_OK();
Victor Stinner5ac27a52019-03-27 13:40:14 +01001140}
1141
1142
Eric Snow1abcf672017-05-23 21:46:51 -07001143void
Nick Coghland6009512014-11-20 21:39:37 +10001144Py_InitializeEx(int install_sigs)
1145{
Victor Stinner331a6a52019-05-27 16:39:22 +02001146 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001147
Victor Stinner331a6a52019-05-27 16:39:22 +02001148 status = _PyRuntime_Initialize();
1149 if (_PyStatus_EXCEPTION(status)) {
1150 Py_ExitStatusException(status);
Victor Stinner43125222019-04-24 18:23:53 +02001151 }
1152 _PyRuntimeState *runtime = &_PyRuntime;
1153
1154 if (runtime->initialized) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001155 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
1156 return;
1157 }
1158
Victor Stinner331a6a52019-05-27 16:39:22 +02001159 PyConfig config;
Victor Stinner8462a492019-10-01 12:06:16 +02001160 _PyConfig_InitCompatConfig(&config);
Victor Stinner441b10c2019-09-28 04:28:35 +02001161
Victor Stinner1dc6e392018-07-25 02:49:17 +02001162 config.install_signal_handlers = install_sigs;
1163
Victor Stinner331a6a52019-05-27 16:39:22 +02001164 status = Py_InitializeFromConfig(&config);
1165 if (_PyStatus_EXCEPTION(status)) {
1166 Py_ExitStatusException(status);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001167 }
Nick Coghland6009512014-11-20 21:39:37 +10001168}
1169
1170void
1171Py_Initialize(void)
1172{
1173 Py_InitializeEx(1);
1174}
1175
1176
Nick Coghland6009512014-11-20 21:39:37 +10001177/* Flush stdout and stderr */
1178
1179static int
1180file_is_closed(PyObject *fobj)
1181{
1182 int r;
1183 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1184 if (tmp == NULL) {
1185 PyErr_Clear();
1186 return 0;
1187 }
1188 r = PyObject_IsTrue(tmp);
1189 Py_DECREF(tmp);
1190 if (r < 0)
1191 PyErr_Clear();
1192 return r > 0;
1193}
1194
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001195static int
Nick Coghland6009512014-11-20 21:39:37 +10001196flush_std_files(void)
1197{
1198 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1199 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1200 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001201 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001202
1203 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001204 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001205 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001206 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001207 status = -1;
1208 }
Nick Coghland6009512014-11-20 21:39:37 +10001209 else
1210 Py_DECREF(tmp);
1211 }
1212
1213 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001214 tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001215 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001216 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001217 status = -1;
1218 }
Nick Coghland6009512014-11-20 21:39:37 +10001219 else
1220 Py_DECREF(tmp);
1221 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001222
1223 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001224}
1225
1226/* Undo the effect of Py_Initialize().
1227
1228 Beware: if multiple interpreter and/or thread states exist, these
1229 are not wiped out; only the current thread and interpreter state
1230 are deleted. But since everything else is deleted, those other
1231 interpreter and thread states should no longer be used.
1232
1233 (XXX We should do better, e.g. wipe out all interpreters and
1234 threads.)
1235
1236 Locking: as above.
1237
1238*/
1239
Victor Stinner7eee5be2019-11-20 10:38:34 +01001240
1241static void
1242finalize_interp_types(PyThreadState *tstate, int is_main_interp)
1243{
1244 if (is_main_interp) {
1245 /* Sundry finalizers */
Victor Stinner7eee5be2019-11-20 10:38:34 +01001246 _PyFrame_Fini();
Victor Stinner7eee5be2019-11-20 10:38:34 +01001247 _PyTuple_Fini();
1248 _PyList_Fini();
1249 _PySet_Fini();
1250 _PyBytes_Fini();
Victor Stinner630c8df2019-12-17 13:02:18 +01001251 }
1252
1253 _PyLong_Fini(tstate);
1254
1255 if (is_main_interp) {
Victor Stinner7eee5be2019-11-20 10:38:34 +01001256 _PyFloat_Fini();
1257 _PyDict_Fini();
1258 _PySlice_Fini();
1259 }
1260
1261 _PyWarnings_Fini(tstate->interp);
1262
1263 if (is_main_interp) {
1264 _Py_HashRandomization_Fini();
1265 _PyArg_Fini();
1266 _PyAsyncGen_Fini();
1267 _PyContext_Fini();
Victor Stinner3d483342019-11-22 12:27:50 +01001268 }
Victor Stinner7eee5be2019-11-20 10:38:34 +01001269
Victor Stinner3d483342019-11-22 12:27:50 +01001270 /* Cleanup Unicode implementation */
1271 _PyUnicode_Fini(tstate);
1272
1273 if (is_main_interp) {
Victor Stinner7eee5be2019-11-20 10:38:34 +01001274 _Py_ClearFileSystemEncoding();
1275 }
1276}
1277
1278
1279static void
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001280finalize_interp_clear(PyThreadState *tstate)
Victor Stinner7eee5be2019-11-20 10:38:34 +01001281{
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001282 int is_main_interp = _Py_IsMainInterpreter(tstate);
1283
Victor Stinner7eee5be2019-11-20 10:38:34 +01001284 /* Clear interpreter state and all thread states */
1285 PyInterpreterState_Clear(tstate->interp);
1286
Pablo Galindoac0e1c22019-12-04 11:51:03 +00001287 /* Trigger a GC collection on subinterpreters*/
1288 if (!is_main_interp) {
1289 _PyGC_CollectNoFail();
1290 }
1291
Victor Stinner7eee5be2019-11-20 10:38:34 +01001292 finalize_interp_types(tstate, is_main_interp);
1293
1294 if (is_main_interp) {
1295 /* XXX Still allocated:
1296 - various static ad-hoc pointers to interned strings
1297 - int and float free list blocks
1298 - whatever various modules and libraries allocate
1299 */
1300
1301 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1302
1303 _PyExc_Fini();
Victor Stinner7eee5be2019-11-20 10:38:34 +01001304 }
Victor Stinner72474072019-11-20 12:25:50 +01001305
1306 _PyGC_Fini(tstate);
Victor Stinner7eee5be2019-11-20 10:38:34 +01001307}
1308
1309
1310static void
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001311finalize_interp_delete(PyThreadState *tstate)
Victor Stinner7eee5be2019-11-20 10:38:34 +01001312{
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001313 if (_Py_IsMainInterpreter(tstate)) {
Victor Stinner7eee5be2019-11-20 10:38:34 +01001314 /* Cleanup auto-thread-state */
1315 _PyGILState_Fini(tstate);
1316 }
1317
Victor Stinner7eee5be2019-11-20 10:38:34 +01001318 PyInterpreterState_Delete(tstate->interp);
1319}
1320
1321
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001322int
1323Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001324{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001325 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001326
Victor Stinner8e91c242019-04-24 17:24:01 +02001327 _PyRuntimeState *runtime = &_PyRuntime;
1328 if (!runtime->initialized) {
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001329 return status;
Victor Stinner8e91c242019-04-24 17:24:01 +02001330 }
Nick Coghland6009512014-11-20 21:39:37 +10001331
Victor Stinnere225beb2019-06-03 18:14:24 +02001332 /* Get current thread state and interpreter pointer */
1333 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
1334 PyInterpreterState *interp = tstate->interp;
Victor Stinner8e91c242019-04-24 17:24:01 +02001335
Victor Stinnerb45d2592019-06-20 00:05:23 +02001336 // Wrap up existing "threading"-module-created, non-daemon threads.
1337 wait_for_thread_shutdown(tstate);
1338
1339 // Make any remaining pending calls.
Victor Stinner2b1df452020-01-13 18:46:59 +01001340 _Py_FinishPendingCalls(tstate);
Victor Stinnerb45d2592019-06-20 00:05:23 +02001341
Nick Coghland6009512014-11-20 21:39:37 +10001342 /* The interpreter is still entirely intact at this point, and the
1343 * exit funcs may be relying on that. In particular, if some thread
1344 * or exit func is still waiting to do an import, the import machinery
1345 * expects Py_IsInitialized() to return true. So don't say the
Eric Snow842a2f02019-03-15 15:47:51 -06001346 * runtime is uninitialized until after the exit funcs have run.
Nick Coghland6009512014-11-20 21:39:37 +10001347 * Note that Threading.py uses an exit func to do a join on all the
1348 * threads created thru it, so this also protects pending imports in
1349 * the threads created via Threading.
1350 */
Nick Coghland6009512014-11-20 21:39:37 +10001351
Victor Stinnerb45d2592019-06-20 00:05:23 +02001352 call_py_exitfuncs(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001353
Victor Stinnerda273412017-12-15 01:46:02 +01001354 /* Copy the core config, PyInterpreterState_Delete() free
1355 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001356#ifdef Py_REF_DEBUG
Victor Stinner331a6a52019-05-27 16:39:22 +02001357 int show_ref_count = interp->config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001358#endif
1359#ifdef Py_TRACE_REFS
Victor Stinner331a6a52019-05-27 16:39:22 +02001360 int dump_refs = interp->config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001361#endif
1362#ifdef WITH_PYMALLOC
Victor Stinner331a6a52019-05-27 16:39:22 +02001363 int malloc_stats = interp->config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001364#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001365
Nick Coghland6009512014-11-20 21:39:37 +10001366 /* Remaining threads (e.g. daemon threads) will automatically exit
1367 after taking the GIL (in PyEval_RestoreThread()). */
Victor Stinner8e91c242019-04-24 17:24:01 +02001368 runtime->finalizing = tstate;
1369 runtime->initialized = 0;
1370 runtime->core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001371
Victor Stinnere0deff32015-03-24 13:46:18 +01001372 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001373 if (flush_std_files() < 0) {
1374 status = -1;
1375 }
Nick Coghland6009512014-11-20 21:39:37 +10001376
1377 /* Disable signal handling */
1378 PyOS_FiniInterrupts();
1379
1380 /* Collect garbage. This may call finalizers; it's nice to call these
1381 * before all modules are destroyed.
1382 * XXX If a __del__ or weakref callback is triggered here, and tries to
1383 * XXX import a module, bad things can happen, because Python no
1384 * XXX longer believes it's initialized.
1385 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1386 * XXX is easy to provoke that way. I've also seen, e.g.,
1387 * XXX Exception exceptions.ImportError: 'No module named sha'
1388 * XXX in <function callback at 0x008F5718> ignored
1389 * XXX but I'm unclear on exactly how that one happens. In any case,
1390 * XXX I haven't seen a real-life report of either of these.
1391 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001392 _PyGC_CollectIfEnabled();
Eric Snowdae02762017-09-14 00:35:58 -07001393
Steve Dowerb82e17e2019-05-23 08:45:22 -07001394 /* Clear all loghooks */
1395 /* We want minimal exposure of this function, so define the extern
1396 * here. The linker should discover the correct function without
1397 * exporting a symbol. */
1398 extern void _PySys_ClearAuditHooks(void);
1399 _PySys_ClearAuditHooks();
1400
Nick Coghland6009512014-11-20 21:39:37 +10001401 /* Destroy all modules */
Victor Stinner987a0dc2019-06-19 10:36:10 +02001402 _PyImport_Cleanup(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001403
Inada Naoki91234a12019-06-03 21:30:58 +09001404 /* Print debug stats if any */
1405 _PyEval_Fini();
1406
Victor Stinnere0deff32015-03-24 13:46:18 +01001407 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001408 if (flush_std_files() < 0) {
1409 status = -1;
1410 }
Nick Coghland6009512014-11-20 21:39:37 +10001411
1412 /* Collect final garbage. This disposes of cycles created by
1413 * class definitions, for example.
1414 * XXX This is disabled because it caused too many problems. If
1415 * XXX a __del__ or weakref callback triggers here, Python code has
1416 * XXX a hard time running, because even the sys module has been
1417 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1418 * XXX One symptom is a sequence of information-free messages
1419 * XXX coming from threads (if a __del__ or callback is invoked,
1420 * XXX other threads can execute too, and any exception they encounter
1421 * XXX triggers a comedy of errors as subsystem after subsystem
1422 * XXX fails to find what it *expects* to find in sys to help report
1423 * XXX the exception and consequent unexpected failures). I've also
1424 * XXX seen segfaults then, after adding print statements to the
1425 * XXX Python code getting called.
1426 */
1427#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001428 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001429#endif
1430
1431 /* Disable tracemalloc after all Python objects have been destroyed,
1432 so it is possible to use tracemalloc in objects destructor. */
1433 _PyTraceMalloc_Fini();
1434
1435 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1436 _PyImport_Fini();
1437
1438 /* Cleanup typeobject.c's internal caches. */
1439 _PyType_Fini();
1440
1441 /* unload faulthandler module */
1442 _PyFaulthandler_Fini();
1443
Nick Coghland6009512014-11-20 21:39:37 +10001444 /* dump hash stats */
1445 _PyHash_Fini();
1446
Eric Snowdae02762017-09-14 00:35:58 -07001447#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001448 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001449 _PyDebug_PrintTotalRefs();
1450 }
Eric Snowdae02762017-09-14 00:35:58 -07001451#endif
Nick Coghland6009512014-11-20 21:39:37 +10001452
1453#ifdef Py_TRACE_REFS
1454 /* Display all objects still alive -- this can invoke arbitrary
1455 * __repr__ overrides, so requires a mostly-intact interpreter.
1456 * Alas, a lot of stuff may still be alive now that will be cleaned
1457 * up later.
1458 */
Victor Stinnerda273412017-12-15 01:46:02 +01001459 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001460 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001461 }
Nick Coghland6009512014-11-20 21:39:37 +10001462#endif /* Py_TRACE_REFS */
1463
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001464 finalize_interp_clear(tstate);
1465 finalize_interp_delete(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001466
1467#ifdef Py_TRACE_REFS
1468 /* Display addresses (& refcnts) of all objects still alive.
1469 * An address can be used to find the repr of the object, printed
1470 * above by _Py_PrintReferences.
1471 */
Victor Stinnerda273412017-12-15 01:46:02 +01001472 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001473 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001474 }
Nick Coghland6009512014-11-20 21:39:37 +10001475#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001476#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001477 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001478 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be8072016-03-14 12:04:26 +01001479 }
Nick Coghland6009512014-11-20 21:39:37 +10001480#endif
1481
Victor Stinner8e91c242019-04-24 17:24:01 +02001482 call_ll_exitfuncs(runtime);
Victor Stinner9316ee42017-11-25 03:17:57 +01001483
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001484 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001485 return status;
1486}
1487
1488void
1489Py_Finalize(void)
1490{
1491 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001492}
1493
Victor Stinnerb0051362019-11-22 17:52:42 +01001494
Nick Coghland6009512014-11-20 21:39:37 +10001495/* Create and initialize a new interpreter and thread, and return the
1496 new thread. This requires that Py_Initialize() has been called
1497 first.
1498
1499 Unsuccessful initialization yields a NULL pointer. Note that *no*
1500 exception information is available even in this case -- the
1501 exception information is held in the thread, and there is no
1502 thread.
1503
1504 Locking: as above.
1505
1506*/
1507
Victor Stinner331a6a52019-05-27 16:39:22 +02001508static PyStatus
Victor Stinnera7368ac2017-11-15 18:11:45 -08001509new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001510{
Victor Stinner331a6a52019-05-27 16:39:22 +02001511 PyStatus status;
Nick Coghland6009512014-11-20 21:39:37 +10001512
Victor Stinner331a6a52019-05-27 16:39:22 +02001513 status = _PyRuntime_Initialize();
1514 if (_PyStatus_EXCEPTION(status)) {
1515 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001516 }
1517 _PyRuntimeState *runtime = &_PyRuntime;
1518
1519 if (!runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001520 return _PyStatus_ERR("Py_Initialize must be called first");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001521 }
Nick Coghland6009512014-11-20 21:39:37 +10001522
Victor Stinner8a1be612016-03-14 22:07:55 +01001523 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1524 interpreters: disable PyGILState_Check(). */
1525 _PyGILState_check_enabled = 0;
1526
Victor Stinner43125222019-04-24 18:23:53 +02001527 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001528 if (interp == NULL) {
1529 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001530 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001531 }
Nick Coghland6009512014-11-20 21:39:37 +10001532
Victor Stinner43125222019-04-24 18:23:53 +02001533 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001534 if (tstate == NULL) {
1535 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001536 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001537 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001538 }
1539
Victor Stinner43125222019-04-24 18:23:53 +02001540 PyThreadState *save_tstate = PyThreadState_Swap(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001541
Eric Snow1abcf672017-05-23 21:46:51 -07001542 /* Copy the current interpreter config into the new interpreter */
Victor Stinner331a6a52019-05-27 16:39:22 +02001543 PyConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001544 if (save_tstate != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001545 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001546 } else {
1547 /* No current thread state, copy from the main interpreter */
1548 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinner331a6a52019-05-27 16:39:22 +02001549 config = &main_interp->config;
Victor Stinnerda273412017-12-15 01:46:02 +01001550 }
1551
Victor Stinner331a6a52019-05-27 16:39:22 +02001552 status = _PyConfig_Copy(&interp->config, config);
1553 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001554 goto error;
Victor Stinnerda273412017-12-15 01:46:02 +01001555 }
Eric Snow1abcf672017-05-23 21:46:51 -07001556
Victor Stinnerd863ade2019-12-06 03:37:07 +01001557 status = pycore_interp_init(tstate);
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001558 if (_PyStatus_EXCEPTION(status)) {
1559 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001560 }
1561
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001562 status = init_interp_main(tstate);
1563 if (_PyStatus_EXCEPTION(status)) {
1564 goto error;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001565 }
Nick Coghland6009512014-11-20 21:39:37 +10001566
Victor Stinnera7368ac2017-11-15 18:11:45 -08001567 *tstate_p = tstate;
Victor Stinner331a6a52019-05-27 16:39:22 +02001568 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001569
Victor Stinner81fe5bd2019-12-06 02:43:30 +01001570error:
Victor Stinnerb0051362019-11-22 17:52:42 +01001571 *tstate_p = NULL;
1572
1573 /* Oops, it didn't work. Undo it all. */
Nick Coghland6009512014-11-20 21:39:37 +10001574 PyErr_PrintEx(0);
1575 PyThreadState_Clear(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001576 PyThreadState_Delete(tstate);
1577 PyInterpreterState_Delete(interp);
Victor Stinner9da74302019-11-20 11:17:17 +01001578 PyThreadState_Swap(save_tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001579
Victor Stinnerb0051362019-11-22 17:52:42 +01001580 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001581}
1582
1583PyThreadState *
1584Py_NewInterpreter(void)
1585{
Stéphane Wirtel9e06d2b2019-03-18 17:10:29 +01001586 PyThreadState *tstate = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001587 PyStatus status = new_interpreter(&tstate);
1588 if (_PyStatus_EXCEPTION(status)) {
1589 Py_ExitStatusException(status);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001590 }
1591 return tstate;
1592
Nick Coghland6009512014-11-20 21:39:37 +10001593}
1594
1595/* Delete an interpreter and its last thread. This requires that the
1596 given thread state is current, that the thread has no remaining
1597 frames, and that it is its interpreter's only remaining thread.
1598 It is a fatal error to violate these constraints.
1599
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001600 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001601 everything, regardless.)
1602
1603 Locking: as above.
1604
1605*/
1606
1607void
1608Py_EndInterpreter(PyThreadState *tstate)
1609{
1610 PyInterpreterState *interp = tstate->interp;
1611
Victor Stinnerb45d2592019-06-20 00:05:23 +02001612 if (tstate != _PyThreadState_GET()) {
Nick Coghland6009512014-11-20 21:39:37 +10001613 Py_FatalError("Py_EndInterpreter: thread is not current");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001614 }
1615 if (tstate->frame != NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001616 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001617 }
Eric Snow5be45a62019-03-08 22:47:07 -07001618 interp->finalizing = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001619
Eric Snow842a2f02019-03-15 15:47:51 -06001620 // Wrap up existing "threading"-module-created, non-daemon threads.
Victor Stinnerb45d2592019-06-20 00:05:23 +02001621 wait_for_thread_shutdown(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001622
Victor Stinnerb45d2592019-06-20 00:05:23 +02001623 call_py_exitfuncs(tstate);
Marcel Plch776407f2017-12-20 11:17:58 +01001624
Victor Stinnerb45d2592019-06-20 00:05:23 +02001625 if (tstate != interp->tstate_head || tstate->next != NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001626 Py_FatalError("Py_EndInterpreter: not the last thread");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001627 }
Nick Coghland6009512014-11-20 21:39:37 +10001628
Victor Stinner987a0dc2019-06-19 10:36:10 +02001629 _PyImport_Cleanup(tstate);
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001630 finalize_interp_clear(tstate);
1631 finalize_interp_delete(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001632}
1633
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001634/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001635
Victor Stinner331a6a52019-05-27 16:39:22 +02001636static PyStatus
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001637add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001638{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001639 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001640 m = PyImport_AddModule("__main__");
1641 if (m == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +02001642 return _PyStatus_ERR("can't create __main__ module");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001643
Nick Coghland6009512014-11-20 21:39:37 +10001644 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001645 ann_dict = PyDict_New();
1646 if ((ann_dict == NULL) ||
1647 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001648 return _PyStatus_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001649 }
1650 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001651
Nick Coghland6009512014-11-20 21:39:37 +10001652 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1653 PyObject *bimod = PyImport_ImportModule("builtins");
1654 if (bimod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001655 return _PyStatus_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001656 }
1657 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001658 return _PyStatus_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001659 }
1660 Py_DECREF(bimod);
1661 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001662
Nick Coghland6009512014-11-20 21:39:37 +10001663 /* Main is a little special - imp.is_builtin("__main__") will return
1664 * False, but BuiltinImporter is still the most appropriate initial
1665 * setting for its __loader__ attribute. A more suitable value will
1666 * be set if __main__ gets further initialized later in the startup
1667 * process.
1668 */
1669 loader = PyDict_GetItemString(d, "__loader__");
1670 if (loader == NULL || loader == Py_None) {
1671 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1672 "BuiltinImporter");
1673 if (loader == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001674 return _PyStatus_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001675 }
1676 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001677 return _PyStatus_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001678 }
1679 Py_DECREF(loader);
1680 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001681 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001682}
1683
Nick Coghland6009512014-11-20 21:39:37 +10001684/* Import the site module (not into __main__ though) */
1685
Victor Stinner331a6a52019-05-27 16:39:22 +02001686static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001687init_import_site(void)
Nick Coghland6009512014-11-20 21:39:37 +10001688{
1689 PyObject *m;
1690 m = PyImport_ImportModule("site");
1691 if (m == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001692 return _PyStatus_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001693 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001694 Py_DECREF(m);
Victor Stinner331a6a52019-05-27 16:39:22 +02001695 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001696}
1697
Victor Stinner874dbe82015-09-04 17:29:57 +02001698/* Check if a file descriptor is valid or not.
1699 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1700static int
1701is_valid_fd(int fd)
1702{
Victor Stinner3092d6b2019-04-17 18:09:12 +02001703/* dup() is faster than fstat(): fstat() can require input/output operations,
1704 whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python
1705 startup. Problem: dup() doesn't check if the file descriptor is valid on
1706 some platforms.
1707
1708 bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other
1709 side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with
1710 EBADF. FreeBSD has similar issue (bpo-32849).
1711
1712 Only use dup() on platforms where dup() is enough to detect invalid FD in
1713 corner cases: on Linux and Windows (bpo-32849). */
1714#if defined(__linux__) || defined(MS_WINDOWS)
1715 if (fd < 0) {
1716 return 0;
1717 }
1718 int fd2;
1719
1720 _Py_BEGIN_SUPPRESS_IPH
1721 fd2 = dup(fd);
1722 if (fd2 >= 0) {
1723 close(fd2);
1724 }
1725 _Py_END_SUPPRESS_IPH
1726
1727 return (fd2 >= 0);
1728#else
Victor Stinner1c4670e2017-05-04 00:45:56 +02001729 struct stat st;
1730 return (fstat(fd, &st) == 0);
Victor Stinner1c4670e2017-05-04 00:45:56 +02001731#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001732}
1733
1734/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001735static PyObject*
Victor Stinner331a6a52019-05-27 16:39:22 +02001736create_stdio(const PyConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001737 int fd, int write_mode, const char* name,
Victor Stinner709d23d2019-05-02 14:56:30 -04001738 const wchar_t* encoding, const wchar_t* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001739{
1740 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1741 const char* mode;
1742 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001743 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001744 int buffering, isatty;
1745 _Py_IDENTIFIER(open);
1746 _Py_IDENTIFIER(isatty);
1747 _Py_IDENTIFIER(TextIOWrapper);
1748 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001749 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001750
Victor Stinner874dbe82015-09-04 17:29:57 +02001751 if (!is_valid_fd(fd))
1752 Py_RETURN_NONE;
1753
Nick Coghland6009512014-11-20 21:39:37 +10001754 /* stdin is always opened in buffered mode, first because it shouldn't
1755 make a difference in common use cases, second because TextIOWrapper
1756 depends on the presence of a read1() method which only exists on
1757 buffered streams.
1758 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001759 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001760 buffering = 0;
1761 else
1762 buffering = -1;
1763 if (write_mode)
1764 mode = "wb";
1765 else
1766 mode = "rb";
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001767 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOO",
Nick Coghland6009512014-11-20 21:39:37 +10001768 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001769 Py_None, Py_None, /* encoding, errors */
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001770 Py_None, Py_False); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001771 if (buf == NULL)
1772 goto error;
1773
1774 if (buffering) {
1775 _Py_IDENTIFIER(raw);
1776 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1777 if (raw == NULL)
1778 goto error;
1779 }
1780 else {
1781 raw = buf;
1782 Py_INCREF(raw);
1783 }
1784
Steve Dower39294992016-08-30 21:22:36 -07001785#ifdef MS_WINDOWS
1786 /* Windows console IO is always UTF-8 encoded */
1787 if (PyWindowsConsoleIO_Check(raw))
Victor Stinner709d23d2019-05-02 14:56:30 -04001788 encoding = L"utf-8";
Steve Dower39294992016-08-30 21:22:36 -07001789#endif
1790
Nick Coghland6009512014-11-20 21:39:37 +10001791 text = PyUnicode_FromString(name);
1792 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1793 goto error;
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001794 res = _PyObject_CallMethodIdNoArgs(raw, &PyId_isatty);
Nick Coghland6009512014-11-20 21:39:37 +10001795 if (res == NULL)
1796 goto error;
1797 isatty = PyObject_IsTrue(res);
1798 Py_DECREF(res);
1799 if (isatty == -1)
1800 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001801 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001802 write_through = Py_True;
1803 else
1804 write_through = Py_False;
Jendrik Seipp5b907712020-01-01 23:21:43 +01001805 if (buffered_stdio && (isatty || fd == fileno(stderr)))
Nick Coghland6009512014-11-20 21:39:37 +10001806 line_buffering = Py_True;
1807 else
1808 line_buffering = Py_False;
1809
1810 Py_CLEAR(raw);
1811 Py_CLEAR(text);
1812
1813#ifdef MS_WINDOWS
1814 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1815 newlines to "\n".
1816 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1817 newline = NULL;
1818#else
1819 /* sys.stdin: split lines at "\n".
1820 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1821 newline = "\n";
1822#endif
1823
Victor Stinner709d23d2019-05-02 14:56:30 -04001824 PyObject *encoding_str = PyUnicode_FromWideChar(encoding, -1);
1825 if (encoding_str == NULL) {
1826 Py_CLEAR(buf);
1827 goto error;
1828 }
1829
1830 PyObject *errors_str = PyUnicode_FromWideChar(errors, -1);
1831 if (errors_str == NULL) {
1832 Py_CLEAR(buf);
1833 Py_CLEAR(encoding_str);
1834 goto error;
1835 }
1836
1837 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OOOsOO",
1838 buf, encoding_str, errors_str,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001839 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001840 Py_CLEAR(buf);
Victor Stinner709d23d2019-05-02 14:56:30 -04001841 Py_CLEAR(encoding_str);
1842 Py_CLEAR(errors_str);
Nick Coghland6009512014-11-20 21:39:37 +10001843 if (stream == NULL)
1844 goto error;
1845
1846 if (write_mode)
1847 mode = "w";
1848 else
1849 mode = "r";
1850 text = PyUnicode_FromString(mode);
1851 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1852 goto error;
1853 Py_CLEAR(text);
1854 return stream;
1855
1856error:
1857 Py_XDECREF(buf);
1858 Py_XDECREF(stream);
1859 Py_XDECREF(text);
1860 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001861
Victor Stinner874dbe82015-09-04 17:29:57 +02001862 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1863 /* Issue #24891: the file descriptor was closed after the first
1864 is_valid_fd() check was called. Ignore the OSError and set the
1865 stream to None. */
1866 PyErr_Clear();
1867 Py_RETURN_NONE;
1868 }
1869 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001870}
1871
Victor Stinnere0c9ab82019-11-22 16:19:14 +01001872/* Set builtins.open to io.OpenWrapper */
1873static PyStatus
1874init_set_builtins_open(PyThreadState *tstate)
1875{
1876 PyObject *iomod = NULL, *wrapper;
1877 PyObject *bimod = NULL;
1878 PyStatus res = _PyStatus_OK();
1879
1880 if (!(iomod = PyImport_ImportModule("io"))) {
1881 goto error;
1882 }
1883
1884 if (!(bimod = PyImport_ImportModule("builtins"))) {
1885 goto error;
1886 }
1887
1888 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1889 goto error;
1890 }
1891
1892 /* Set builtins.open */
1893 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1894 Py_DECREF(wrapper);
1895 goto error;
1896 }
1897 Py_DECREF(wrapper);
1898 goto done;
1899
1900error:
1901 res = _PyStatus_ERR("can't initialize io.open");
1902
1903done:
1904 Py_XDECREF(bimod);
1905 Py_XDECREF(iomod);
1906 return res;
1907}
1908
1909
Nick Coghland6009512014-11-20 21:39:37 +10001910/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinner331a6a52019-05-27 16:39:22 +02001911static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001912init_sys_streams(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10001913{
Victor Stinnere0c9ab82019-11-22 16:19:14 +01001914 PyObject *iomod = NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001915 PyObject *m;
1916 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001917 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001918 PyObject * encoding_attr;
Victor Stinner331a6a52019-05-27 16:39:22 +02001919 PyStatus res = _PyStatus_OK();
Victor Stinnerb45d2592019-06-20 00:05:23 +02001920 const PyConfig *config = &tstate->interp->config;
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001921
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001922 /* Check that stdin is not a directory
1923 Using shell redirection, you can redirect stdin to a directory,
1924 crashing the Python interpreter. Catch this common mistake here
1925 and output a useful error message. Note that under MS Windows,
1926 the shell already prevents that. */
1927#ifndef MS_WINDOWS
1928 struct _Py_stat_struct sb;
1929 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1930 S_ISDIR(sb.st_mode)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001931 return _PyStatus_ERR("<stdin> is a directory, cannot continue");
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001932 }
1933#endif
1934
Nick Coghland6009512014-11-20 21:39:37 +10001935 /* Hack to avoid a nasty recursion issue when Python is invoked
1936 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1937 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1938 goto error;
1939 }
1940 Py_DECREF(m);
1941
1942 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1943 goto error;
1944 }
1945 Py_DECREF(m);
1946
Nick Coghland6009512014-11-20 21:39:37 +10001947 if (!(iomod = PyImport_ImportModule("io"))) {
1948 goto error;
1949 }
Nick Coghland6009512014-11-20 21:39:37 +10001950
Nick Coghland6009512014-11-20 21:39:37 +10001951 /* Set sys.stdin */
1952 fd = fileno(stdin);
1953 /* Under some conditions stdin, stdout and stderr may not be connected
1954 * and fileno() may point to an invalid file descriptor. For example
1955 * GUI apps don't have valid standard streams by default.
1956 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001957 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001958 config->stdio_encoding,
1959 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001960 if (std == NULL)
1961 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001962 PySys_SetObject("__stdin__", std);
1963 _PySys_SetObjectId(&PyId_stdin, std);
1964 Py_DECREF(std);
1965
1966 /* Set sys.stdout */
1967 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001968 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001969 config->stdio_encoding,
1970 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001971 if (std == NULL)
1972 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001973 PySys_SetObject("__stdout__", std);
1974 _PySys_SetObjectId(&PyId_stdout, std);
1975 Py_DECREF(std);
1976
1977#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1978 /* Set sys.stderr, replaces the preliminary stderr */
1979 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001980 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001981 config->stdio_encoding,
Victor Stinner709d23d2019-05-02 14:56:30 -04001982 L"backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001983 if (std == NULL)
1984 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001985
1986 /* Same as hack above, pre-import stderr's codec to avoid recursion
1987 when import.c tries to write to stderr in verbose mode. */
1988 encoding_attr = PyObject_GetAttrString(std, "encoding");
1989 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001990 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001991 if (std_encoding != NULL) {
1992 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1993 Py_XDECREF(codec_info);
1994 }
1995 Py_DECREF(encoding_attr);
1996 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001997 _PyErr_Clear(tstate); /* Not a fatal error if codec isn't available */
Nick Coghland6009512014-11-20 21:39:37 +10001998
1999 if (PySys_SetObject("__stderr__", std) < 0) {
2000 Py_DECREF(std);
2001 goto error;
2002 }
2003 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
2004 Py_DECREF(std);
2005 goto error;
2006 }
2007 Py_DECREF(std);
2008#endif
2009
Victor Stinnera7368ac2017-11-15 18:11:45 -08002010 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10002011
Victor Stinnera7368ac2017-11-15 18:11:45 -08002012error:
Victor Stinner331a6a52019-05-27 16:39:22 +02002013 res = _PyStatus_ERR("can't initialize sys standard streams");
Victor Stinnera7368ac2017-11-15 18:11:45 -08002014
2015done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02002016 _Py_ClearStandardStreamEncoding();
Nick Coghland6009512014-11-20 21:39:37 +10002017 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08002018 return res;
Nick Coghland6009512014-11-20 21:39:37 +10002019}
2020
2021
Victor Stinner10dc4842015-03-24 12:01:30 +01002022static void
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002023_Py_FatalError_DumpTracebacks(int fd, PyInterpreterState *interp,
2024 PyThreadState *tstate)
Victor Stinner10dc4842015-03-24 12:01:30 +01002025{
Victor Stinner10dc4842015-03-24 12:01:30 +01002026 fputc('\n', stderr);
2027 fflush(stderr);
2028
2029 /* display the current Python stack */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002030 _Py_DumpTracebackThreads(fd, interp, tstate);
Victor Stinner10dc4842015-03-24 12:01:30 +01002031}
Victor Stinner791da1c2016-03-14 16:53:12 +01002032
2033/* Print the current exception (if an exception is set) with its traceback,
2034 or display the current Python stack.
2035
2036 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
2037 called on catastrophic cases.
2038
2039 Return 1 if the traceback was displayed, 0 otherwise. */
2040
2041static int
2042_Py_FatalError_PrintExc(int fd)
2043{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002044 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner791da1c2016-03-14 16:53:12 +01002045 PyObject *ferr, *res;
2046 PyObject *exception, *v, *tb;
2047 int has_tb;
2048
Victor Stinnerb45d2592019-06-20 00:05:23 +02002049 _PyErr_Fetch(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002050 if (exception == NULL) {
2051 /* No current exception */
2052 return 0;
2053 }
2054
2055 ferr = _PySys_GetObjectId(&PyId_stderr);
2056 if (ferr == NULL || ferr == Py_None) {
2057 /* sys.stderr is not set yet or set to None,
2058 no need to try to display the exception */
2059 return 0;
2060 }
2061
Victor Stinnerb45d2592019-06-20 00:05:23 +02002062 _PyErr_NormalizeException(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002063 if (tb == NULL) {
2064 tb = Py_None;
2065 Py_INCREF(tb);
2066 }
2067 PyException_SetTraceback(v, tb);
2068 if (exception == NULL) {
2069 /* PyErr_NormalizeException() failed */
2070 return 0;
2071 }
2072
2073 has_tb = (tb != Py_None);
2074 PyErr_Display(exception, v, tb);
2075 Py_XDECREF(exception);
2076 Py_XDECREF(v);
2077 Py_XDECREF(tb);
2078
2079 /* sys.stderr may be buffered: call sys.stderr.flush() */
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002080 res = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002081 if (res == NULL) {
2082 _PyErr_Clear(tstate);
2083 }
2084 else {
Victor Stinner791da1c2016-03-14 16:53:12 +01002085 Py_DECREF(res);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002086 }
Victor Stinner791da1c2016-03-14 16:53:12 +01002087
2088 return has_tb;
2089}
2090
Nick Coghland6009512014-11-20 21:39:37 +10002091/* Print fatal error message and abort */
2092
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002093#ifdef MS_WINDOWS
2094static void
2095fatal_output_debug(const char *msg)
2096{
2097 /* buffer of 256 bytes allocated on the stack */
2098 WCHAR buffer[256 / sizeof(WCHAR)];
2099 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2100 size_t msglen;
2101
2102 OutputDebugStringW(L"Fatal Python error: ");
2103
2104 msglen = strlen(msg);
2105 while (msglen) {
2106 size_t i;
2107
2108 if (buflen > msglen) {
2109 buflen = msglen;
2110 }
2111
2112 /* Convert the message to wchar_t. This uses a simple one-to-one
2113 conversion, assuming that the this error message actually uses
2114 ASCII only. If this ceases to be true, we will have to convert. */
2115 for (i=0; i < buflen; ++i) {
2116 buffer[i] = msg[i];
2117 }
2118 buffer[i] = L'\0';
2119 OutputDebugStringW(buffer);
2120
2121 msg += buflen;
2122 msglen -= buflen;
2123 }
2124 OutputDebugStringW(L"\n");
2125}
2126#endif
2127
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002128
2129static void
2130fatal_error_dump_runtime(FILE *stream, _PyRuntimeState *runtime)
2131{
2132 fprintf(stream, "Python runtime state: ");
2133 if (runtime->finalizing) {
2134 fprintf(stream, "finalizing (tstate=%p)", runtime->finalizing);
2135 }
2136 else if (runtime->initialized) {
2137 fprintf(stream, "initialized");
2138 }
2139 else if (runtime->core_initialized) {
2140 fprintf(stream, "core initialized");
2141 }
2142 else if (runtime->preinitialized) {
2143 fprintf(stream, "preinitialized");
2144 }
2145 else if (runtime->preinitializing) {
2146 fprintf(stream, "preinitializing");
2147 }
2148 else {
2149 fprintf(stream, "unknown");
2150 }
2151 fprintf(stream, "\n");
2152 fflush(stream);
2153}
2154
2155
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002156static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002157fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002158{
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002159 FILE *stream = stderr;
2160 const int fd = fileno(stream);
Victor Stinner53345a42015-03-25 01:55:14 +01002161 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002162
2163 if (reentrant) {
2164 /* Py_FatalError() caused a second fatal error.
2165 Example: flush_std_files() raises a recursion error. */
2166 goto exit;
2167 }
2168 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002169
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002170 fprintf(stream, "Fatal Python error: ");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002171 if (prefix) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002172 fputs(prefix, stream);
2173 fputs(": ", stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002174 }
2175 if (msg) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002176 fputs(msg, stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002177 }
2178 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002179 fprintf(stream, "<message not set>");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002180 }
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002181 fputs("\n", stream);
2182 fflush(stream); /* it helps in Windows debug build */
2183
2184 _PyRuntimeState *runtime = &_PyRuntime;
2185 fatal_error_dump_runtime(stream, runtime);
2186
2187 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
2188 PyInterpreterState *interp = NULL;
2189 if (tstate != NULL) {
2190 interp = tstate->interp;
2191 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002192
Victor Stinner3a228ab2018-11-01 00:26:41 +01002193 /* Check if the current thread has a Python thread state
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002194 and holds the GIL.
Victor Stinner3a228ab2018-11-01 00:26:41 +01002195
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002196 tss_tstate is NULL if Py_FatalError() is called from a C thread which
2197 has no Python thread state.
2198
2199 tss_tstate != tstate if the current Python thread does not hold the GIL.
2200 */
2201 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2202 int has_tstate_and_gil = (tss_tstate != NULL && tss_tstate == tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002203 if (has_tstate_and_gil) {
2204 /* If an exception is set, print the exception with its traceback */
2205 if (!_Py_FatalError_PrintExc(fd)) {
2206 /* No exception is set, or an exception is set without traceback */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002207 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002208 }
2209 }
2210 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002211 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002212 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002213
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002214 /* The main purpose of faulthandler is to display the traceback.
2215 This function already did its best to display a traceback.
2216 Disable faulthandler to prevent writing a second traceback
2217 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002218 _PyFaulthandler_Fini();
2219
Victor Stinner791da1c2016-03-14 16:53:12 +01002220 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002221 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002222 /* Flush sys.stdout and sys.stderr */
2223 flush_std_files();
2224 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002225
Nick Coghland6009512014-11-20 21:39:37 +10002226#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002227 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002228#endif /* MS_WINDOWS */
2229
2230exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002231 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002232#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002233 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002234#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002235 abort();
2236 }
2237 else {
2238 exit(status);
2239 }
2240}
2241
Victor Stinner19760862017-12-20 01:41:59 +01002242void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002243Py_FatalError(const char *msg)
2244{
2245 fatal_error(NULL, msg, -1);
2246}
2247
Victor Stinner19760862017-12-20 01:41:59 +01002248void _Py_NO_RETURN
Victor Stinner331a6a52019-05-27 16:39:22 +02002249Py_ExitStatusException(PyStatus status)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002250{
Victor Stinner331a6a52019-05-27 16:39:22 +02002251 if (_PyStatus_IS_EXIT(status)) {
2252 exit(status.exitcode);
Victor Stinnerdbacfc22019-05-16 16:39:26 +02002253 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002254 else if (_PyStatus_IS_ERROR(status)) {
2255 fatal_error(status.func, status.err_msg, 1);
Victor Stinnerdfe88472019-03-01 12:14:41 +01002256 }
2257 else {
Victor Stinner331a6a52019-05-27 16:39:22 +02002258 Py_FatalError("Py_ExitStatusException() must not be called on success");
Victor Stinnerdfe88472019-03-01 12:14:41 +01002259 }
Nick Coghland6009512014-11-20 21:39:37 +10002260}
2261
2262/* Clean up and exit */
2263
Victor Stinnerd7292b52016-06-17 12:29:00 +02002264# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002265
Nick Coghland6009512014-11-20 21:39:37 +10002266/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002267void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002268{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002269 PyInterpreterState *is = _PyInterpreterState_GET_UNSAFE();
Marcel Plch776407f2017-12-20 11:17:58 +01002270
Antoine Pitroufc5db952017-12-13 02:29:07 +01002271 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002272 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2273
2274 is->pyexitfunc = func;
2275 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002276}
2277
2278static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002279call_py_exitfuncs(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002280{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002281 PyInterpreterState *interp = tstate->interp;
2282 if (interp->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002283 return;
2284
Victor Stinnerb45d2592019-06-20 00:05:23 +02002285 (*interp->pyexitfunc)(interp->pyexitmodule);
2286 _PyErr_Clear(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10002287}
2288
2289/* Wait until threading._shutdown completes, provided
2290 the threading module was imported in the first place.
2291 The shutdown routine will wait until all non-daemon
2292 "threading" threads have completed. */
2293static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002294wait_for_thread_shutdown(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002295{
Nick Coghland6009512014-11-20 21:39:37 +10002296 _Py_IDENTIFIER(_shutdown);
2297 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002298 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002299 if (threading == NULL) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02002300 if (_PyErr_Occurred(tstate)) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002301 PyErr_WriteUnraisable(NULL);
2302 }
2303 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002304 return;
2305 }
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002306 result = _PyObject_CallMethodIdNoArgs(threading, &PyId__shutdown);
Nick Coghland6009512014-11-20 21:39:37 +10002307 if (result == NULL) {
2308 PyErr_WriteUnraisable(threading);
2309 }
2310 else {
2311 Py_DECREF(result);
2312 }
2313 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002314}
2315
2316#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002317int Py_AtExit(void (*func)(void))
2318{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002319 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002320 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002321 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002322 return 0;
2323}
2324
2325static void
Victor Stinner8e91c242019-04-24 17:24:01 +02002326call_ll_exitfuncs(_PyRuntimeState *runtime)
Nick Coghland6009512014-11-20 21:39:37 +10002327{
Victor Stinner8e91c242019-04-24 17:24:01 +02002328 while (runtime->nexitfuncs > 0) {
Victor Stinner87d23a02019-04-26 05:49:26 +02002329 /* pop last function from the list */
2330 runtime->nexitfuncs--;
2331 void (*exitfunc)(void) = runtime->exitfuncs[runtime->nexitfuncs];
2332 runtime->exitfuncs[runtime->nexitfuncs] = NULL;
2333
2334 exitfunc();
Victor Stinner8e91c242019-04-24 17:24:01 +02002335 }
Nick Coghland6009512014-11-20 21:39:37 +10002336
2337 fflush(stdout);
2338 fflush(stderr);
2339}
2340
Victor Stinnercfc88312018-08-01 16:41:25 +02002341void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002342Py_Exit(int sts)
2343{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002344 if (Py_FinalizeEx() < 0) {
2345 sts = 120;
2346 }
Nick Coghland6009512014-11-20 21:39:37 +10002347
2348 exit(sts);
2349}
2350
Victor Stinner331a6a52019-05-27 16:39:22 +02002351static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02002352init_signals(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002353{
2354#ifdef SIGPIPE
2355 PyOS_setsig(SIGPIPE, SIG_IGN);
2356#endif
2357#ifdef SIGXFZ
2358 PyOS_setsig(SIGXFZ, SIG_IGN);
2359#endif
2360#ifdef SIGXFSZ
2361 PyOS_setsig(SIGXFSZ, SIG_IGN);
2362#endif
2363 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerb45d2592019-06-20 00:05:23 +02002364 if (_PyErr_Occurred(tstate)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02002365 return _PyStatus_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002366 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002367 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002368}
2369
2370
2371/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2372 *
2373 * All of the code in this function must only use async-signal-safe functions,
2374 * listed at `man 7 signal` or
2375 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2376 */
2377void
2378_Py_RestoreSignals(void)
2379{
2380#ifdef SIGPIPE
2381 PyOS_setsig(SIGPIPE, SIG_DFL);
2382#endif
2383#ifdef SIGXFZ
2384 PyOS_setsig(SIGXFZ, SIG_DFL);
2385#endif
2386#ifdef SIGXFSZ
2387 PyOS_setsig(SIGXFSZ, SIG_DFL);
2388#endif
2389}
2390
2391
2392/*
2393 * The file descriptor fd is considered ``interactive'' if either
2394 * a) isatty(fd) is TRUE, or
2395 * b) the -i flag was given, and the filename associated with
2396 * the descriptor is NULL or "<stdin>" or "???".
2397 */
2398int
2399Py_FdIsInteractive(FILE *fp, const char *filename)
2400{
2401 if (isatty((int)fileno(fp)))
2402 return 1;
2403 if (!Py_InteractiveFlag)
2404 return 0;
2405 return (filename == NULL) ||
2406 (strcmp(filename, "<stdin>") == 0) ||
2407 (strcmp(filename, "???") == 0);
2408}
2409
2410
Nick Coghland6009512014-11-20 21:39:37 +10002411/* Wrappers around sigaction() or signal(). */
2412
2413PyOS_sighandler_t
2414PyOS_getsig(int sig)
2415{
2416#ifdef HAVE_SIGACTION
2417 struct sigaction context;
2418 if (sigaction(sig, NULL, &context) == -1)
2419 return SIG_ERR;
2420 return context.sa_handler;
2421#else
2422 PyOS_sighandler_t handler;
2423/* Special signal handling for the secure CRT in Visual Studio 2005 */
2424#if defined(_MSC_VER) && _MSC_VER >= 1400
2425 switch (sig) {
2426 /* Only these signals are valid */
2427 case SIGINT:
2428 case SIGILL:
2429 case SIGFPE:
2430 case SIGSEGV:
2431 case SIGTERM:
2432 case SIGBREAK:
2433 case SIGABRT:
2434 break;
2435 /* Don't call signal() with other values or it will assert */
2436 default:
2437 return SIG_ERR;
2438 }
2439#endif /* _MSC_VER && _MSC_VER >= 1400 */
2440 handler = signal(sig, SIG_IGN);
2441 if (handler != SIG_ERR)
2442 signal(sig, handler);
2443 return handler;
2444#endif
2445}
2446
2447/*
2448 * All of the code in this function must only use async-signal-safe functions,
2449 * listed at `man 7 signal` or
2450 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2451 */
2452PyOS_sighandler_t
2453PyOS_setsig(int sig, PyOS_sighandler_t handler)
2454{
2455#ifdef HAVE_SIGACTION
2456 /* Some code in Modules/signalmodule.c depends on sigaction() being
2457 * used here if HAVE_SIGACTION is defined. Fix that if this code
2458 * changes to invalidate that assumption.
2459 */
2460 struct sigaction context, ocontext;
2461 context.sa_handler = handler;
2462 sigemptyset(&context.sa_mask);
2463 context.sa_flags = 0;
2464 if (sigaction(sig, &context, &ocontext) == -1)
2465 return SIG_ERR;
2466 return ocontext.sa_handler;
2467#else
2468 PyOS_sighandler_t oldhandler;
2469 oldhandler = signal(sig, handler);
2470#ifdef HAVE_SIGINTERRUPT
2471 siginterrupt(sig, 1);
2472#endif
2473 return oldhandler;
2474#endif
2475}
2476
2477#ifdef __cplusplus
2478}
2479#endif