blob: e5b6283d8db0ac6d8ffbc4f4bfaef4ae75509c5b [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 Stinnera1c249c2018-11-01 03:15:58 +010013#include "pycore_pathconfig.h"
Victor Stinnerb45d2592019-06-20 00:05:23 +020014#include "pycore_pyerrors.h"
Victor Stinner621cebe2018-11-12 16:53:38 +010015#include "pycore_pylifecycle.h"
16#include "pycore_pymem.h"
17#include "pycore_pystate.h"
Victor Stinnered488662019-05-20 00:14:57 +020018#include "pycore_traceback.h"
Nick Coghland6009512014-11-20 21:39:37 +100019#include "grammar.h"
20#include "node.h"
21#include "token.h"
22#include "parsetok.h"
23#include "errcode.h"
24#include "code.h"
25#include "symtable.h"
26#include "ast.h"
27#include "marshal.h"
28#include "osdefs.h"
29#include <locale.h>
30
31#ifdef HAVE_SIGNAL_H
32#include <signal.h>
33#endif
34
35#ifdef MS_WINDOWS
36#include "malloc.h" /* for alloca */
37#endif
38
39#ifdef HAVE_LANGINFO_H
40#include <langinfo.h>
41#endif
42
43#ifdef MS_WINDOWS
44#undef BYTE
45#include "windows.h"
Steve Dower39294992016-08-30 21:22:36 -070046
47extern PyTypeObject PyWindowsConsoleIO_Type;
48#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
Nick Coghland6009512014-11-20 21:39:37 +100049#endif
50
51_Py_IDENTIFIER(flush);
52_Py_IDENTIFIER(name);
53_Py_IDENTIFIER(stdin);
54_Py_IDENTIFIER(stdout);
55_Py_IDENTIFIER(stderr);
Eric Snow3f9eee62017-09-15 16:35:20 -060056_Py_IDENTIFIER(threading);
Nick Coghland6009512014-11-20 21:39:37 +100057
58#ifdef __cplusplus
59extern "C" {
60#endif
61
Nick Coghland6009512014-11-20 21:39:37 +100062extern grammar _PyParser_Grammar; /* From graminit.c */
63
Victor Stinnerb45d2592019-06-20 00:05:23 +020064/* Forward declarations */
Victor Stinner331a6a52019-05-27 16:39:22 +020065static PyStatus add_main_module(PyInterpreterState *interp);
Victor Stinnerb45d2592019-06-20 00:05:23 +020066static PyStatus init_import_site(void);
67static PyStatus init_sys_streams(PyThreadState *tstate);
68static PyStatus init_signals(PyThreadState *tstate);
69static void call_py_exitfuncs(PyThreadState *tstate);
70static void wait_for_thread_shutdown(PyThreadState *tstate);
Victor Stinner8e91c242019-04-24 17:24:01 +020071static void call_ll_exitfuncs(_PyRuntimeState *runtime);
Nick Coghland6009512014-11-20 21:39:37 +100072
Gregory P. Smith38f11cc2019-02-16 12:57:40 -080073int _Py_UnhandledKeyboardInterrupt = 0;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080074_PyRuntimeState _PyRuntime = _PyRuntimeState_INIT;
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010075static int runtime_initialized = 0;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060076
Victor Stinner331a6a52019-05-27 16:39:22 +020077PyStatus
Eric Snow2ebc5ce2017-09-07 23:51:28 -060078_PyRuntime_Initialize(void)
79{
80 /* XXX We only initialize once in the process, which aligns with
81 the static initialization of the former globals now found in
82 _PyRuntime. However, _PyRuntime *should* be initialized with
83 every Py_Initialize() call, but doing so breaks the runtime.
84 This is because the runtime state is not properly finalized
85 currently. */
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010086 if (runtime_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +020087 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -080088 }
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010089 runtime_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080090
91 return _PyRuntimeState_Init(&_PyRuntime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -060092}
93
94void
95_PyRuntime_Finalize(void)
96{
97 _PyRuntimeState_Fini(&_PyRuntime);
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010098 runtime_initialized = 0;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060099}
100
101int
102_Py_IsFinalizing(void)
103{
104 return _PyRuntime.finalizing != NULL;
105}
106
Nick Coghland6009512014-11-20 21:39:37 +1000107/* Hack to force loading of object files */
108int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
109 PyOS_mystrnicmp; /* Python/pystrcmp.o */
110
111/* PyModule_GetWarningsModule is no longer necessary as of 2.6
112since _warnings is builtin. This API should not be used. */
113PyObject *
114PyModule_GetWarningsModule(void)
115{
116 return PyImport_ImportModule("warnings");
117}
118
Eric Snowc7ec9982017-05-23 23:00:52 -0700119
Eric Snow1abcf672017-05-23 21:46:51 -0700120/* APIs to access the initialization flags
121 *
122 * Can be called prior to Py_Initialize.
123 */
Nick Coghland6009512014-11-20 21:39:37 +1000124
Eric Snow1abcf672017-05-23 21:46:51 -0700125int
126_Py_IsCoreInitialized(void)
127{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600128 return _PyRuntime.core_initialized;
Eric Snow1abcf672017-05-23 21:46:51 -0700129}
Nick Coghland6009512014-11-20 21:39:37 +1000130
131int
132Py_IsInitialized(void)
133{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600134 return _PyRuntime.initialized;
Nick Coghland6009512014-11-20 21:39:37 +1000135}
136
Nick Coghlan6ea41862017-06-11 13:16:15 +1000137
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000138/* Global initializations. Can be undone by Py_FinalizeEx(). Don't
139 call this twice without an intervening Py_FinalizeEx() call. When
Nick Coghland6009512014-11-20 21:39:37 +1000140 initializations fail, a fatal error is issued and the function does
141 not return. On return, the first thread and interpreter state have
142 been created.
143
144 Locking: you must hold the interpreter lock while calling this.
145 (If the lock has not yet been initialized, that's equivalent to
146 having the lock, but you cannot use multiple threads.)
147
148*/
149
Victor Stinner331a6a52019-05-27 16:39:22 +0200150static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200151init_importlib(PyThreadState *tstate, PyObject *sysmod)
Nick Coghland6009512014-11-20 21:39:37 +1000152{
153 PyObject *importlib;
154 PyObject *impmod;
Nick Coghland6009512014-11-20 21:39:37 +1000155 PyObject *value;
Victor Stinnerb45d2592019-06-20 00:05:23 +0200156 PyInterpreterState *interp = tstate->interp;
Victor Stinner331a6a52019-05-27 16:39:22 +0200157 int verbose = interp->config.verbose;
Nick Coghland6009512014-11-20 21:39:37 +1000158
159 /* Import _importlib through its frozen version, _frozen_importlib. */
160 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200161 return _PyStatus_ERR("can't import _frozen_importlib");
Nick Coghland6009512014-11-20 21:39:37 +1000162 }
Victor Stinnerc96be812019-05-14 17:34:56 +0200163 else if (verbose) {
Nick Coghland6009512014-11-20 21:39:37 +1000164 PySys_FormatStderr("import _frozen_importlib # frozen\n");
165 }
166 importlib = PyImport_AddModule("_frozen_importlib");
167 if (importlib == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200168 return _PyStatus_ERR("couldn't get _frozen_importlib from sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000169 }
170 interp->importlib = importlib;
171 Py_INCREF(interp->importlib);
172
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300173 interp->import_func = PyDict_GetItemString(interp->builtins, "__import__");
174 if (interp->import_func == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +0200175 return _PyStatus_ERR("__import__ not found");
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300176 Py_INCREF(interp->import_func);
177
Victor Stinnercd6e6942015-09-18 09:11:57 +0200178 /* Import the _imp module */
Benjamin Petersonc65ef772018-01-29 11:33:57 -0800179 impmod = PyInit__imp();
Nick Coghland6009512014-11-20 21:39:37 +1000180 if (impmod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200181 return _PyStatus_ERR("can't import _imp");
Nick Coghland6009512014-11-20 21:39:37 +1000182 }
Victor Stinnerc96be812019-05-14 17:34:56 +0200183 else if (verbose) {
Victor Stinnercd6e6942015-09-18 09:11:57 +0200184 PySys_FormatStderr("import _imp # builtin\n");
Nick Coghland6009512014-11-20 21:39:37 +1000185 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600186 if (_PyImport_SetModuleString("_imp", impmod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200187 return _PyStatus_ERR("can't save _imp to sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000188 }
189
Victor Stinnercd6e6942015-09-18 09:11:57 +0200190 /* Install importlib as the implementation of import */
Nick Coghland6009512014-11-20 21:39:37 +1000191 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
192 if (value == NULL) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200193 _PyErr_Print(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200194 return _PyStatus_ERR("importlib install failed");
Nick Coghland6009512014-11-20 21:39:37 +1000195 }
196 Py_DECREF(value);
197 Py_DECREF(impmod);
198
Victor Stinner331a6a52019-05-27 16:39:22 +0200199 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000200}
201
Victor Stinner331a6a52019-05-27 16:39:22 +0200202static PyStatus
Victor Stinner0a28f8d2019-06-19 02:54:39 +0200203init_importlib_external(PyThreadState *tstate)
Eric Snow1abcf672017-05-23 21:46:51 -0700204{
205 PyObject *value;
Victor Stinner0a28f8d2019-06-19 02:54:39 +0200206 value = PyObject_CallMethod(tstate->interp->importlib,
Eric Snow1abcf672017-05-23 21:46:51 -0700207 "_install_external_importers", "");
208 if (value == NULL) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200209 _PyErr_Print(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200210 return _PyStatus_ERR("external importer setup failed");
Eric Snow1abcf672017-05-23 21:46:51 -0700211 }
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200212 Py_DECREF(value);
Victor Stinner0a28f8d2019-06-19 02:54:39 +0200213 return _PyImportZip_Init(tstate);
Eric Snow1abcf672017-05-23 21:46:51 -0700214}
Nick Coghland6009512014-11-20 21:39:37 +1000215
Nick Coghlan6ea41862017-06-11 13:16:15 +1000216/* Helper functions to better handle the legacy C locale
217 *
218 * The legacy C locale assumes ASCII as the default text encoding, which
219 * causes problems not only for the CPython runtime, but also other
220 * components like GNU readline.
221 *
222 * Accordingly, when the CLI detects it, it attempts to coerce it to a
223 * more capable UTF-8 based alternative as follows:
224 *
225 * if (_Py_LegacyLocaleDetected()) {
226 * _Py_CoerceLegacyLocale();
227 * }
228 *
229 * See the documentation of the PYTHONCOERCECLOCALE setting for more details.
230 *
231 * Locale coercion also impacts the default error handler for the standard
232 * streams: while the usual default is "strict", the default for the legacy
233 * C locale and for any of the coercion target locales is "surrogateescape".
234 */
235
236int
Victor Stinner0f721472019-05-20 17:16:38 +0200237_Py_LegacyLocaleDetected(int warn)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000238{
239#ifndef MS_WINDOWS
Victor Stinner0f721472019-05-20 17:16:38 +0200240 if (!warn) {
241 const char *locale_override = getenv("LC_ALL");
242 if (locale_override != NULL && *locale_override != '\0') {
243 /* Don't coerce C locale if the LC_ALL environment variable
244 is set */
245 return 0;
246 }
247 }
248
Nick Coghlan6ea41862017-06-11 13:16:15 +1000249 /* On non-Windows systems, the C locale is considered a legacy locale */
Nick Coghlaneb817952017-06-18 12:29:42 +1000250 /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat
251 * the POSIX locale as a simple alias for the C locale, so
252 * we may also want to check for that explicitly.
253 */
Nick Coghlan6ea41862017-06-11 13:16:15 +1000254 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
255 return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
256#else
257 /* Windows uses code pages instead of locales, so no locale is legacy */
258 return 0;
259#endif
260}
261
Nick Coghlaneb817952017-06-18 12:29:42 +1000262static const char *_C_LOCALE_WARNING =
263 "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
264 "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
265 "C.utf8, or UTF-8 (if available) as alternative Unicode-compatible "
266 "locales is recommended.\n";
267
Nick Coghlaneb817952017-06-18 12:29:42 +1000268static void
Victor Stinner43125222019-04-24 18:23:53 +0200269emit_stderr_warning_for_legacy_locale(_PyRuntimeState *runtime)
Nick Coghlaneb817952017-06-18 12:29:42 +1000270{
Victor Stinner331a6a52019-05-27 16:39:22 +0200271 const PyPreConfig *preconfig = &runtime->preconfig;
Victor Stinner0f721472019-05-20 17:16:38 +0200272 if (preconfig->coerce_c_locale_warn && _Py_LegacyLocaleDetected(1)) {
Victor Stinnercf215042018-08-29 22:56:06 +0200273 PySys_FormatStderr("%s", _C_LOCALE_WARNING);
Nick Coghlaneb817952017-06-18 12:29:42 +1000274 }
275}
276
Nick Coghlan6ea41862017-06-11 13:16:15 +1000277typedef struct _CandidateLocale {
278 const char *locale_name; /* The locale to try as a coercion target */
279} _LocaleCoercionTarget;
280
281static _LocaleCoercionTarget _TARGET_LOCALES[] = {
282 {"C.UTF-8"},
283 {"C.utf8"},
Nick Coghlan18974c32017-06-30 00:48:14 +1000284 {"UTF-8"},
Nick Coghlan6ea41862017-06-11 13:16:15 +1000285 {NULL}
286};
287
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200288
289int
290_Py_IsLocaleCoercionTarget(const char *ctype_loc)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000291{
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200292 const _LocaleCoercionTarget *target = NULL;
293 for (target = _TARGET_LOCALES; target->locale_name; target++) {
294 if (strcmp(ctype_loc, target->locale_name) == 0) {
295 return 1;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000296 }
Victor Stinner124b9eb2018-08-29 01:29:06 +0200297 }
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200298 return 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000299}
300
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200301
Nick Coghlan6ea41862017-06-11 13:16:15 +1000302#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100303static const char C_LOCALE_COERCION_WARNING[] =
Nick Coghlan6ea41862017-06-11 13:16:15 +1000304 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale "
305 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n";
306
Victor Stinner0f721472019-05-20 17:16:38 +0200307static int
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200308_coerce_default_locale_settings(int warn, const _LocaleCoercionTarget *target)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000309{
310 const char *newloc = target->locale_name;
311
312 /* Reset locale back to currently configured defaults */
xdegaye1588be62017-11-12 12:45:59 +0100313 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000314
315 /* Set the relevant locale environment variable */
316 if (setenv("LC_CTYPE", newloc, 1)) {
317 fprintf(stderr,
318 "Error setting LC_CTYPE, skipping C locale coercion\n");
Victor Stinner0f721472019-05-20 17:16:38 +0200319 return 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000320 }
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200321 if (warn) {
Victor Stinner94540602017-12-16 04:54:22 +0100322 fprintf(stderr, C_LOCALE_COERCION_WARNING, newloc);
Nick Coghlaneb817952017-06-18 12:29:42 +1000323 }
Nick Coghlan6ea41862017-06-11 13:16:15 +1000324
325 /* Reconfigure with the overridden environment variables */
xdegaye1588be62017-11-12 12:45:59 +0100326 _Py_SetLocaleFromEnv(LC_ALL);
Victor Stinner0f721472019-05-20 17:16:38 +0200327 return 1;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000328}
329#endif
330
Victor Stinner0f721472019-05-20 17:16:38 +0200331int
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200332_Py_CoerceLegacyLocale(int warn)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000333{
Victor Stinner0f721472019-05-20 17:16:38 +0200334 int coerced = 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000335#ifdef PY_COERCE_C_LOCALE
Victor Stinner8ea09112018-09-03 17:05:18 +0200336 char *oldloc = NULL;
337
338 oldloc = _PyMem_RawStrdup(setlocale(LC_CTYPE, NULL));
339 if (oldloc == NULL) {
Victor Stinner0f721472019-05-20 17:16:38 +0200340 return coerced;
Victor Stinner8ea09112018-09-03 17:05:18 +0200341 }
342
Victor Stinner94540602017-12-16 04:54:22 +0100343 const char *locale_override = getenv("LC_ALL");
344 if (locale_override == NULL || *locale_override == '\0') {
345 /* LC_ALL is also not set (or is set to an empty string) */
346 const _LocaleCoercionTarget *target = NULL;
347 for (target = _TARGET_LOCALES; target->locale_name; target++) {
348 const char *new_locale = setlocale(LC_CTYPE,
349 target->locale_name);
350 if (new_locale != NULL) {
Victor Stinnere2510952019-05-02 11:28:57 -0400351#if !defined(_Py_FORCE_UTF8_LOCALE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94540602017-12-16 04:54:22 +0100352 /* Also ensure that nl_langinfo works in this locale */
353 char *codeset = nl_langinfo(CODESET);
354 if (!codeset || *codeset == '\0') {
355 /* CODESET is not set or empty, so skip coercion */
356 new_locale = NULL;
357 _Py_SetLocaleFromEnv(LC_CTYPE);
358 continue;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000359 }
Victor Stinner94540602017-12-16 04:54:22 +0100360#endif
361 /* Successfully configured locale, so make it the default */
Victor Stinner0f721472019-05-20 17:16:38 +0200362 coerced = _coerce_default_locale_settings(warn, target);
Victor Stinner8ea09112018-09-03 17:05:18 +0200363 goto done;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000364 }
365 }
366 }
367 /* No C locale warning here, as Py_Initialize will emit one later */
Victor Stinner8ea09112018-09-03 17:05:18 +0200368
369 setlocale(LC_CTYPE, oldloc);
370
371done:
372 PyMem_RawFree(oldloc);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000373#endif
Victor Stinner0f721472019-05-20 17:16:38 +0200374 return coerced;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000375}
376
xdegaye1588be62017-11-12 12:45:59 +0100377/* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to
378 * isolate the idiosyncrasies of different libc implementations. It reads the
379 * appropriate environment variable and uses its value to select the locale for
380 * 'category'. */
381char *
382_Py_SetLocaleFromEnv(int category)
383{
Victor Stinner353933e2018-11-23 13:08:26 +0100384 char *res;
xdegaye1588be62017-11-12 12:45:59 +0100385#ifdef __ANDROID__
386 const char *locale;
387 const char **pvar;
388#ifdef PY_COERCE_C_LOCALE
389 const char *coerce_c_locale;
390#endif
391 const char *utf8_locale = "C.UTF-8";
392 const char *env_var_set[] = {
393 "LC_ALL",
394 "LC_CTYPE",
395 "LANG",
396 NULL,
397 };
398
399 /* Android setlocale(category, "") doesn't check the environment variables
400 * and incorrectly sets the "C" locale at API 24 and older APIs. We only
401 * check the environment variables listed in env_var_set. */
402 for (pvar=env_var_set; *pvar; pvar++) {
403 locale = getenv(*pvar);
404 if (locale != NULL && *locale != '\0') {
405 if (strcmp(locale, utf8_locale) == 0 ||
406 strcmp(locale, "en_US.UTF-8") == 0) {
407 return setlocale(category, utf8_locale);
408 }
409 return setlocale(category, "C");
410 }
411 }
412
413 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
414 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
415 * Quote from POSIX section "8.2 Internationalization Variables":
416 * "4. If the LANG environment variable is not set or is set to the empty
417 * string, the implementation-defined default locale shall be used." */
418
419#ifdef PY_COERCE_C_LOCALE
420 coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
421 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
422 /* Some other ported code may check the environment variables (e.g. in
423 * extension modules), so we make sure that they match the locale
424 * configuration */
425 if (setenv("LC_CTYPE", utf8_locale, 1)) {
426 fprintf(stderr, "Warning: failed setting the LC_CTYPE "
427 "environment variable to %s\n", utf8_locale);
428 }
429 }
430#endif
Victor Stinner353933e2018-11-23 13:08:26 +0100431 res = setlocale(category, utf8_locale);
432#else /* !defined(__ANDROID__) */
433 res = setlocale(category, "");
434#endif
435 _Py_ResetForceASCII();
436 return res;
xdegaye1588be62017-11-12 12:45:59 +0100437}
438
Nick Coghlan6ea41862017-06-11 13:16:15 +1000439
Eric Snow1abcf672017-05-23 21:46:51 -0700440/* Global initializations. Can be undone by Py_Finalize(). Don't
441 call this twice without an intervening Py_Finalize() call.
442
Victor Stinner331a6a52019-05-27 16:39:22 +0200443 Every call to Py_InitializeFromConfig, Py_Initialize or Py_InitializeEx
Eric Snow1abcf672017-05-23 21:46:51 -0700444 must have a corresponding call to Py_Finalize.
445
446 Locking: you must hold the interpreter lock while calling these APIs.
447 (If the lock has not yet been initialized, that's equivalent to
448 having the lock, but you cannot use multiple threads.)
449
450*/
451
Victor Stinner331a6a52019-05-27 16:39:22 +0200452static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200453pyinit_core_reconfigure(_PyRuntimeState *runtime,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200454 PyThreadState **tstate_p,
Victor Stinner331a6a52019-05-27 16:39:22 +0200455 const PyConfig *config)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200456{
Victor Stinner331a6a52019-05-27 16:39:22 +0200457 PyStatus status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100458 PyThreadState *tstate = _PyThreadState_GET();
459 if (!tstate) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200460 return _PyStatus_ERR("failed to read thread state");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100461 }
Victor Stinnerb45d2592019-06-20 00:05:23 +0200462 *tstate_p = tstate;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100463
464 PyInterpreterState *interp = tstate->interp;
465 if (interp == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200466 return _PyStatus_ERR("can't make main interpreter");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100467 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100468
Victor Stinner331a6a52019-05-27 16:39:22 +0200469 _PyConfig_Write(config, runtime);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200470
Victor Stinner331a6a52019-05-27 16:39:22 +0200471 status = _PyConfig_Copy(&interp->config, config);
472 if (_PyStatus_EXCEPTION(status)) {
473 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200474 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200475 config = &interp->config;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200476
Victor Stinner331a6a52019-05-27 16:39:22 +0200477 if (config->_install_importlib) {
Victor Stinnerc4221672019-09-21 01:02:56 +0200478 status = _PyPathConfig_Init();
Victor Stinner331a6a52019-05-27 16:39:22 +0200479 if (_PyStatus_EXCEPTION(status)) {
480 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200481 }
482 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200483 return _PyStatus_OK();
Victor Stinner1dc6e392018-07-25 02:49:17 +0200484}
485
486
Victor Stinner331a6a52019-05-27 16:39:22 +0200487static PyStatus
Victor Stinner43125222019-04-24 18:23:53 +0200488pycore_init_runtime(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200489 const PyConfig *config)
Nick Coghland6009512014-11-20 21:39:37 +1000490{
Victor Stinner43125222019-04-24 18:23:53 +0200491 if (runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200492 return _PyStatus_ERR("main interpreter already initialized");
Victor Stinner1dc6e392018-07-25 02:49:17 +0200493 }
Victor Stinnerda273412017-12-15 01:46:02 +0100494
Victor Stinner331a6a52019-05-27 16:39:22 +0200495 _PyConfig_Write(config, runtime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600496
Eric Snow1abcf672017-05-23 21:46:51 -0700497 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
498 * threads behave a little more gracefully at interpreter shutdown.
499 * We clobber it here so the new interpreter can start with a clean
500 * slate.
501 *
502 * However, this may still lead to misbehaviour if there are daemon
503 * threads still hanging around from a previous Py_Initialize/Finalize
504 * pair :(
505 */
Victor Stinner43125222019-04-24 18:23:53 +0200506 runtime->finalizing = NULL;
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600507
Victor Stinner331a6a52019-05-27 16:39:22 +0200508 PyStatus status = _Py_HashRandomization_Init(config);
509 if (_PyStatus_EXCEPTION(status)) {
510 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800511 }
512
Victor Stinner331a6a52019-05-27 16:39:22 +0200513 status = _PyInterpreterState_Enable(runtime);
514 if (_PyStatus_EXCEPTION(status)) {
515 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -0800516 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200517 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100518}
Victor Stinnera7368ac2017-11-15 18:11:45 -0800519
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100520
Victor Stinner331a6a52019-05-27 16:39:22 +0200521static PyStatus
Victor Stinner43125222019-04-24 18:23:53 +0200522pycore_create_interpreter(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200523 const PyConfig *config,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200524 PyThreadState **tstate_p)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100525{
526 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnerda273412017-12-15 01:46:02 +0100527 if (interp == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200528 return _PyStatus_ERR("can't make main interpreter");
Victor Stinnerda273412017-12-15 01:46:02 +0100529 }
530
Victor Stinner331a6a52019-05-27 16:39:22 +0200531 PyStatus status = _PyConfig_Copy(&interp->config, config);
532 if (_PyStatus_EXCEPTION(status)) {
533 return status;
Victor Stinnerda273412017-12-15 01:46:02 +0100534 }
Nick Coghland6009512014-11-20 21:39:37 +1000535
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200536 PyThreadState *tstate = PyThreadState_New(interp);
Victor Stinnerb45d2592019-06-20 00:05:23 +0200537 if (tstate == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200538 return _PyStatus_ERR("can't make first thread");
Victor Stinnerb45d2592019-06-20 00:05:23 +0200539 }
Nick Coghland6009512014-11-20 21:39:37 +1000540 (void) PyThreadState_Swap(tstate);
541
Victor Stinner99fcc612019-04-29 13:04:07 +0200542 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
543 destroying the GIL might fail when it is being referenced from
544 another running thread (see issue #9901).
Nick Coghland6009512014-11-20 21:39:37 +1000545 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000546 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Victor Stinner09532fe2019-05-10 23:39:09 +0200547 _PyEval_FiniThreads(&runtime->ceval);
Victor Stinner2914bb32018-01-29 11:57:45 +0100548
Nick Coghland6009512014-11-20 21:39:37 +1000549 /* Auto-thread-state API */
Victor Stinnerb45d2592019-06-20 00:05:23 +0200550 _PyGILState_Init(runtime, tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000551
Victor Stinner2914bb32018-01-29 11:57:45 +0100552 /* Create the GIL */
553 PyEval_InitThreads();
554
Victor Stinnerb45d2592019-06-20 00:05:23 +0200555 *tstate_p = tstate;
Victor Stinner331a6a52019-05-27 16:39:22 +0200556 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100557}
Nick Coghland6009512014-11-20 21:39:37 +1000558
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100559
Victor Stinner331a6a52019-05-27 16:39:22 +0200560static PyStatus
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100561pycore_init_types(void)
562{
Victor Stinner331a6a52019-05-27 16:39:22 +0200563 PyStatus status = _PyTypes_Init();
564 if (_PyStatus_EXCEPTION(status)) {
565 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100566 }
567
Victor Stinner331a6a52019-05-27 16:39:22 +0200568 status = _PyUnicode_Init();
569 if (_PyStatus_EXCEPTION(status)) {
570 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100571 }
572
573 if (_PyStructSequence_Init() < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200574 return _PyStatus_ERR("can't initialize structseq");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100575 }
576
577 if (!_PyLong_Init()) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200578 return _PyStatus_ERR("can't init longs");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100579 }
Nick Coghland6009512014-11-20 21:39:37 +1000580
Victor Stinner331a6a52019-05-27 16:39:22 +0200581 status = _PyExc_Init();
582 if (_PyStatus_EXCEPTION(status)) {
583 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100584 }
585
586 if (!_PyFloat_Init()) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200587 return _PyStatus_ERR("can't init float");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100588 }
Nick Coghland6009512014-11-20 21:39:37 +1000589
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100590 if (!_PyContext_Init()) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200591 return _PyStatus_ERR("can't init context");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100592 }
Victor Stinneref9d9b62019-05-22 11:28:22 +0200593
Victor Stinner331a6a52019-05-27 16:39:22 +0200594 status = _PyErr_Init();
595 if (_PyStatus_EXCEPTION(status)) {
596 return status;
Victor Stinneref9d9b62019-05-22 11:28:22 +0200597 }
598
Victor Stinner331a6a52019-05-27 16:39:22 +0200599 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100600}
601
602
Victor Stinner331a6a52019-05-27 16:39:22 +0200603static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200604pycore_init_builtins(PyThreadState *tstate)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100605{
Victor Stinnerb45d2592019-06-20 00:05:23 +0200606 PyInterpreterState *interp = tstate->interp;
607
608 PyObject *bimod = _PyBuiltin_Init(tstate);
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100609 if (bimod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200610 return _PyStatus_ERR("can't initialize builtins modules");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100611 }
612 _PyImport_FixupBuiltin(bimod, "builtins", interp->modules);
613
614 interp->builtins = PyModule_GetDict(bimod);
615 if (interp->builtins == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200616 return _PyStatus_ERR("can't initialize builtins dict");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100617 }
618 Py_INCREF(interp->builtins);
619
Victor Stinner331a6a52019-05-27 16:39:22 +0200620 PyStatus status = _PyBuiltins_AddExceptions(bimod);
621 if (_PyStatus_EXCEPTION(status)) {
622 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100623 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200624 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100625}
626
627
Victor Stinner331a6a52019-05-27 16:39:22 +0200628static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200629pycore_init_import_warnings(PyThreadState *tstate, PyObject *sysmod)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100630{
Victor Stinnerb45d2592019-06-20 00:05:23 +0200631 const PyConfig *config = &tstate->interp->config;
632
633 PyStatus status = _PyImport_Init(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200634 if (_PyStatus_EXCEPTION(status)) {
635 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800636 }
Nick Coghland6009512014-11-20 21:39:37 +1000637
Victor Stinnerb45d2592019-06-20 00:05:23 +0200638 status = _PyImportHooks_Init(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200639 if (_PyStatus_EXCEPTION(status)) {
640 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800641 }
Nick Coghland6009512014-11-20 21:39:37 +1000642
643 /* Initialize _warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100644 if (_PyWarnings_Init() == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200645 return _PyStatus_ERR("can't initialize warnings");
Victor Stinner1f151112017-11-23 10:43:14 +0100646 }
Nick Coghland6009512014-11-20 21:39:37 +1000647
Victor Stinnerb45d2592019-06-20 00:05:23 +0200648 if (config->_install_importlib) {
Victor Stinnerc4221672019-09-21 01:02:56 +0200649 status = _PyPathConfig_Init();
Victor Stinner331a6a52019-05-27 16:39:22 +0200650 if (_PyStatus_EXCEPTION(status)) {
651 return status;
Victor Stinnerb1147e42018-07-21 02:06:16 +0200652 }
653 }
654
Eric Snow1abcf672017-05-23 21:46:51 -0700655 /* This call sets up builtin and frozen import support */
Victor Stinnerb45d2592019-06-20 00:05:23 +0200656 if (config->_install_importlib) {
657 status = init_importlib(tstate, sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200658 if (_PyStatus_EXCEPTION(status)) {
659 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800660 }
Eric Snow1abcf672017-05-23 21:46:51 -0700661 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200662 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100663}
664
665
Victor Stinner331a6a52019-05-27 16:39:22 +0200666static PyStatus
667pyinit_config(_PyRuntimeState *runtime,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200668 PyThreadState **tstate_p,
Victor Stinner331a6a52019-05-27 16:39:22 +0200669 const PyConfig *config)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100670{
Victor Stinner331a6a52019-05-27 16:39:22 +0200671 _PyConfig_Write(config, runtime);
Victor Stinner20004952019-03-26 02:31:11 +0100672
Victor Stinner331a6a52019-05-27 16:39:22 +0200673 PyStatus status = pycore_init_runtime(runtime, config);
674 if (_PyStatus_EXCEPTION(status)) {
675 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100676 }
677
Victor Stinnerb45d2592019-06-20 00:05:23 +0200678 PyThreadState *tstate;
679 status = pycore_create_interpreter(runtime, config, &tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200680 if (_PyStatus_EXCEPTION(status)) {
681 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100682 }
Victor Stinnerb45d2592019-06-20 00:05:23 +0200683 config = &tstate->interp->config;
684 *tstate_p = tstate;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100685
Victor Stinner331a6a52019-05-27 16:39:22 +0200686 status = pycore_init_types();
687 if (_PyStatus_EXCEPTION(status)) {
688 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100689 }
690
691 PyObject *sysmod;
Victor Stinnerb45d2592019-06-20 00:05:23 +0200692 status = _PySys_Create(runtime, tstate, &sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200693 if (_PyStatus_EXCEPTION(status)) {
694 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100695 }
696
Victor Stinnerb45d2592019-06-20 00:05:23 +0200697 status = pycore_init_builtins(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200698 if (_PyStatus_EXCEPTION(status)) {
699 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100700 }
701
Victor Stinnerb45d2592019-06-20 00:05:23 +0200702 status = pycore_init_import_warnings(tstate, sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200703 if (_PyStatus_EXCEPTION(status)) {
704 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100705 }
Eric Snow1abcf672017-05-23 21:46:51 -0700706
707 /* Only when we get here is the runtime core fully initialized */
Victor Stinner43125222019-04-24 18:23:53 +0200708 runtime->core_initialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200709 return _PyStatus_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700710}
711
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100712
Victor Stinner331a6a52019-05-27 16:39:22 +0200713PyStatus
714_Py_PreInitializeFromPyArgv(const PyPreConfig *src_config, const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100715{
Victor Stinner331a6a52019-05-27 16:39:22 +0200716 PyStatus status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100717
Victor Stinner6d1c4672019-05-20 11:02:00 +0200718 if (src_config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200719 return _PyStatus_ERR("preinitialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +0200720 }
721
Victor Stinner331a6a52019-05-27 16:39:22 +0200722 status = _PyRuntime_Initialize();
723 if (_PyStatus_EXCEPTION(status)) {
724 return status;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100725 }
Victor Stinner43125222019-04-24 18:23:53 +0200726 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100727
Victor Stinnerd3b90412019-09-17 23:59:51 +0200728 if (runtime->preinitialized) {
Victor Stinnerf72346c2019-03-25 17:54:58 +0100729 /* If it's already configured: ignored the new configuration */
Victor Stinner331a6a52019-05-27 16:39:22 +0200730 return _PyStatus_OK();
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100731 }
732
Victor Stinnerd3b90412019-09-17 23:59:51 +0200733 /* Note: preinitialized remains 1 on error, it is only set to 0
734 at exit on success. */
735 runtime->preinitializing = 1;
736
Victor Stinner331a6a52019-05-27 16:39:22 +0200737 PyPreConfig config;
Victor Stinner6d1c4672019-05-20 11:02:00 +0200738 _PyPreConfig_InitFromPreConfig(&config, src_config);
Victor Stinnerf72346c2019-03-25 17:54:58 +0100739
Victor Stinner331a6a52019-05-27 16:39:22 +0200740 status = _PyPreConfig_Read(&config, args);
741 if (_PyStatus_EXCEPTION(status)) {
742 return status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100743 }
744
Victor Stinner331a6a52019-05-27 16:39:22 +0200745 status = _PyPreConfig_Write(&config);
746 if (_PyStatus_EXCEPTION(status)) {
747 return status;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100748 }
749
Victor Stinnerd3b90412019-09-17 23:59:51 +0200750 runtime->preinitializing = 0;
751 runtime->preinitialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200752 return _PyStatus_OK();
Victor Stinnerf72346c2019-03-25 17:54:58 +0100753}
754
Victor Stinner70005ac2019-05-02 15:25:34 -0400755
Victor Stinner331a6a52019-05-27 16:39:22 +0200756PyStatus
757Py_PreInitializeFromBytesArgs(const PyPreConfig *src_config, Py_ssize_t argc, char **argv)
Victor Stinnerf72346c2019-03-25 17:54:58 +0100758{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100759 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400760 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100761}
762
763
Victor Stinner331a6a52019-05-27 16:39:22 +0200764PyStatus
765Py_PreInitializeFromArgs(const PyPreConfig *src_config, Py_ssize_t argc, wchar_t **argv)
Victor Stinner20004952019-03-26 02:31:11 +0100766{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100767 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400768 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinner20004952019-03-26 02:31:11 +0100769}
770
771
Victor Stinner331a6a52019-05-27 16:39:22 +0200772PyStatus
773Py_PreInitialize(const PyPreConfig *src_config)
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100774{
Victor Stinner70005ac2019-05-02 15:25:34 -0400775 return _Py_PreInitializeFromPyArgv(src_config, NULL);
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100776}
777
778
Victor Stinner331a6a52019-05-27 16:39:22 +0200779PyStatus
780_Py_PreInitializeFromConfig(const PyConfig *config,
781 const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100782{
Victor Stinner331a6a52019-05-27 16:39:22 +0200783 assert(config != NULL);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200784
Victor Stinner331a6a52019-05-27 16:39:22 +0200785 PyStatus status = _PyRuntime_Initialize();
786 if (_PyStatus_EXCEPTION(status)) {
787 return status;
Victor Stinner6d1c4672019-05-20 11:02:00 +0200788 }
789 _PyRuntimeState *runtime = &_PyRuntime;
790
Victor Stinnerd3b90412019-09-17 23:59:51 +0200791 if (runtime->preinitialized) {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200792 /* Already initialized: do nothing */
Victor Stinner331a6a52019-05-27 16:39:22 +0200793 return _PyStatus_OK();
Victor Stinner70005ac2019-05-02 15:25:34 -0400794 }
Victor Stinnercab5d072019-05-17 19:01:14 +0200795
Victor Stinner331a6a52019-05-27 16:39:22 +0200796 PyPreConfig preconfig;
797 _PyPreConfig_InitFromConfig(&preconfig, config);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200798
Victor Stinner331a6a52019-05-27 16:39:22 +0200799 if (!config->parse_argv) {
800 return Py_PreInitialize(&preconfig);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200801 }
802 else if (args == NULL) {
Victor Stinnercab5d072019-05-17 19:01:14 +0200803 _PyArgv config_args = {
804 .use_bytes_argv = 0,
Victor Stinner331a6a52019-05-27 16:39:22 +0200805 .argc = config->argv.length,
806 .wchar_argv = config->argv.items};
Victor Stinner6d1c4672019-05-20 11:02:00 +0200807 return _Py_PreInitializeFromPyArgv(&preconfig, &config_args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200808 }
809 else {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200810 return _Py_PreInitializeFromPyArgv(&preconfig, args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200811 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100812}
813
814
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100815/* Begin interpreter initialization
816 *
817 * On return, the first thread and interpreter state have been created,
818 * but the compiler, signal handling, multithreading and
819 * multiple interpreter support, and codec infrastructure are not yet
820 * available.
821 *
822 * The import system will support builtin and frozen modules only.
823 * The only supported io is writing to sys.stderr
824 *
825 * If any operation invoked by this function fails, a fatal error is
826 * issued and the function does not return.
827 *
828 * Any code invoked from this function should *not* assume it has access
829 * to the Python C API (unless the API is explicitly listed as being
830 * safe to call without calling Py_Initialize first)
831 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200832static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200833pyinit_core(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200834 const PyConfig *src_config,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200835 PyThreadState **tstate_p)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200836{
Victor Stinner331a6a52019-05-27 16:39:22 +0200837 PyStatus status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200838
Victor Stinner331a6a52019-05-27 16:39:22 +0200839 status = _Py_PreInitializeFromConfig(src_config, NULL);
840 if (_PyStatus_EXCEPTION(status)) {
841 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200842 }
843
Victor Stinner331a6a52019-05-27 16:39:22 +0200844 PyConfig config;
845 _PyConfig_InitCompatConfig(&config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200846
Victor Stinner331a6a52019-05-27 16:39:22 +0200847 status = _PyConfig_Copy(&config, src_config);
848 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200849 goto done;
850 }
851
Victor Stinner331a6a52019-05-27 16:39:22 +0200852 status = PyConfig_Read(&config);
853 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200854 goto done;
855 }
856
857 if (!runtime->core_initialized) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200858 status = pyinit_config(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200859 }
860 else {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200861 status = pyinit_core_reconfigure(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200862 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200863 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200864 goto done;
865 }
866
867done:
Victor Stinner331a6a52019-05-27 16:39:22 +0200868 PyConfig_Clear(&config);
869 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200870}
871
Victor Stinner5ac27a52019-03-27 13:40:14 +0100872
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200873/* Py_Initialize() has already been called: update the main interpreter
874 configuration. Example of bpo-34008: Py_Main() called after
875 Py_Initialize(). */
Victor Stinner331a6a52019-05-27 16:39:22 +0200876static PyStatus
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100877_Py_ReconfigureMainInterpreter(PyInterpreterState *interp)
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200878{
Victor Stinner331a6a52019-05-27 16:39:22 +0200879 PyConfig *config = &interp->config;
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100880
Victor Stinner331a6a52019-05-27 16:39:22 +0200881 PyObject *argv = _PyWideStringList_AsList(&config->argv);
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100882 if (argv == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200883 return _PyStatus_NO_MEMORY(); \
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100884 }
885
886 int res = PyDict_SetItemString(interp->sysdict, "argv", argv);
887 Py_DECREF(argv);
888 if (res < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200889 return _PyStatus_ERR("fail to set sys.argv");
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200890 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200891 return _PyStatus_OK();
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200892}
893
Eric Snowc7ec9982017-05-23 23:00:52 -0700894/* Update interpreter state based on supplied configuration settings
895 *
896 * After calling this function, most of the restrictions on the interpreter
897 * are lifted. The only remaining incomplete settings are those related
898 * to the main module (sys.argv[0], __main__ metadata)
899 *
900 * Calling this when the interpreter is not initializing, is already
901 * initialized or without a valid current thread state is a fatal error.
902 * Other errors should be reported as normal Python exceptions with a
903 * non-zero return code.
904 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200905static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200906pyinit_main(_PyRuntimeState *runtime, PyThreadState *tstate)
Eric Snow1abcf672017-05-23 21:46:51 -0700907{
Victor Stinner43125222019-04-24 18:23:53 +0200908 if (!runtime->core_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200909 return _PyStatus_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700910 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700911
Victor Stinner1dc6e392018-07-25 02:49:17 +0200912 /* Configure the main interpreter */
Victor Stinnerb45d2592019-06-20 00:05:23 +0200913 PyInterpreterState *interp = tstate->interp;
Victor Stinner331a6a52019-05-27 16:39:22 +0200914 PyConfig *config = &interp->config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700915
Victor Stinner43125222019-04-24 18:23:53 +0200916 if (runtime->initialized) {
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100917 return _Py_ReconfigureMainInterpreter(interp);
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200918 }
919
Victor Stinner331a6a52019-05-27 16:39:22 +0200920 if (!config->_install_importlib) {
Eric Snow1abcf672017-05-23 21:46:51 -0700921 /* Special mode for freeze_importlib: run with no import system
922 *
923 * This means anything which needs support from extension modules
924 * or pure Python code in the standard library won't work.
925 */
Victor Stinner43125222019-04-24 18:23:53 +0200926 runtime->initialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200927 return _PyStatus_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700928 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100929
Victor Stinner33c377e2017-12-05 15:12:41 +0100930 if (_PyTime_Init() < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200931 return _PyStatus_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100932 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200933
Victor Stinner838f2642019-06-13 22:41:23 +0200934 if (_PySys_InitMain(runtime, tstate) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200935 return _PyStatus_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100936 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800937
Victor Stinner0a28f8d2019-06-19 02:54:39 +0200938 PyStatus status = init_importlib_external(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200939 if (_PyStatus_EXCEPTION(status)) {
940 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800941 }
Nick Coghland6009512014-11-20 21:39:37 +1000942
943 /* initialize the faulthandler module */
Victor Stinner331a6a52019-05-27 16:39:22 +0200944 status = _PyFaulthandler_Init(config->faulthandler);
945 if (_PyStatus_EXCEPTION(status)) {
946 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800947 }
Nick Coghland6009512014-11-20 21:39:37 +1000948
Victor Stinnerb45d2592019-06-20 00:05:23 +0200949 status = _PyUnicode_InitEncodings(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200950 if (_PyStatus_EXCEPTION(status)) {
951 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800952 }
Nick Coghland6009512014-11-20 21:39:37 +1000953
Victor Stinner331a6a52019-05-27 16:39:22 +0200954 if (config->install_signal_handlers) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200955 status = init_signals(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200956 if (_PyStatus_EXCEPTION(status)) {
957 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800958 }
959 }
Nick Coghland6009512014-11-20 21:39:37 +1000960
Victor Stinner331a6a52019-05-27 16:39:22 +0200961 if (_PyTraceMalloc_Init(config->tracemalloc) < 0) {
962 return _PyStatus_ERR("can't initialize tracemalloc");
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200963 }
Nick Coghland6009512014-11-20 21:39:37 +1000964
Victor Stinner331a6a52019-05-27 16:39:22 +0200965 status = add_main_module(interp);
966 if (_PyStatus_EXCEPTION(status)) {
967 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800968 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800969
Victor Stinnerb45d2592019-06-20 00:05:23 +0200970 status = init_sys_streams(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200971 if (_PyStatus_EXCEPTION(status)) {
972 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800973 }
Nick Coghland6009512014-11-20 21:39:37 +1000974
975 /* Initialize warnings. */
Victor Stinner37cd9822018-11-16 11:55:35 +0100976 PyObject *warnoptions = PySys_GetObject("warnoptions");
977 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
Victor Stinner5d862462017-12-19 11:35:58 +0100978 {
Nick Coghland6009512014-11-20 21:39:37 +1000979 PyObject *warnings_module = PyImport_ImportModule("warnings");
980 if (warnings_module == NULL) {
981 fprintf(stderr, "'import warnings' failed; traceback:\n");
Victor Stinnerb45d2592019-06-20 00:05:23 +0200982 _PyErr_Print(tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000983 }
984 Py_XDECREF(warnings_module);
985 }
986
Victor Stinner43125222019-04-24 18:23:53 +0200987 runtime->initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700988
Victor Stinner331a6a52019-05-27 16:39:22 +0200989 if (config->site_import) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200990 status = init_import_site();
Victor Stinner331a6a52019-05-27 16:39:22 +0200991 if (_PyStatus_EXCEPTION(status)) {
992 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800993 }
994 }
Victor Stinnercf215042018-08-29 22:56:06 +0200995
996#ifndef MS_WINDOWS
Victor Stinner43125222019-04-24 18:23:53 +0200997 emit_stderr_warning_for_legacy_locale(runtime);
Victor Stinnercf215042018-08-29 22:56:06 +0200998#endif
999
Victor Stinner331a6a52019-05-27 16:39:22 +02001000 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001001}
1002
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001003
Victor Stinner331a6a52019-05-27 16:39:22 +02001004PyStatus
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001005_Py_InitializeMain(void)
1006{
Victor Stinner331a6a52019-05-27 16:39:22 +02001007 PyStatus status = _PyRuntime_Initialize();
1008 if (_PyStatus_EXCEPTION(status)) {
1009 return status;
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001010 }
1011 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinnerb45d2592019-06-20 00:05:23 +02001012 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
1013 return pyinit_main(runtime, tstate);
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001014}
1015
1016
Victor Stinner331a6a52019-05-27 16:39:22 +02001017PyStatus
1018Py_InitializeFromConfig(const PyConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -07001019{
Victor Stinner6d1c4672019-05-20 11:02:00 +02001020 if (config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001021 return _PyStatus_ERR("initialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +02001022 }
1023
Victor Stinner331a6a52019-05-27 16:39:22 +02001024 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001025
Victor Stinner331a6a52019-05-27 16:39:22 +02001026 status = _PyRuntime_Initialize();
1027 if (_PyStatus_EXCEPTION(status)) {
1028 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001029 }
1030 _PyRuntimeState *runtime = &_PyRuntime;
1031
Victor Stinnerb45d2592019-06-20 00:05:23 +02001032 PyThreadState *tstate = NULL;
1033 status = pyinit_core(runtime, config, &tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001034 if (_PyStatus_EXCEPTION(status)) {
1035 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001036 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001037 config = &tstate->interp->config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +01001038
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001039 if (config->_init_main) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02001040 status = pyinit_main(runtime, tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001041 if (_PyStatus_EXCEPTION(status)) {
1042 return status;
Victor Stinner484f20d2019-03-27 02:04:16 +01001043 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001044 }
Victor Stinner484f20d2019-03-27 02:04:16 +01001045
Victor Stinner331a6a52019-05-27 16:39:22 +02001046 return _PyStatus_OK();
Victor Stinner5ac27a52019-03-27 13:40:14 +01001047}
1048
1049
Eric Snow1abcf672017-05-23 21:46:51 -07001050void
Nick Coghland6009512014-11-20 21:39:37 +10001051Py_InitializeEx(int install_sigs)
1052{
Victor Stinner331a6a52019-05-27 16:39:22 +02001053 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001054
Victor Stinner331a6a52019-05-27 16:39:22 +02001055 status = _PyRuntime_Initialize();
1056 if (_PyStatus_EXCEPTION(status)) {
1057 Py_ExitStatusException(status);
Victor Stinner43125222019-04-24 18:23:53 +02001058 }
1059 _PyRuntimeState *runtime = &_PyRuntime;
1060
1061 if (runtime->initialized) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001062 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
1063 return;
1064 }
1065
Victor Stinner331a6a52019-05-27 16:39:22 +02001066 PyConfig config;
1067 _PyConfig_InitCompatConfig(&config);
Victor Stinner1dc6e392018-07-25 02:49:17 +02001068 config.install_signal_handlers = install_sigs;
1069
Victor Stinner331a6a52019-05-27 16:39:22 +02001070 status = Py_InitializeFromConfig(&config);
1071 if (_PyStatus_EXCEPTION(status)) {
1072 Py_ExitStatusException(status);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001073 }
Nick Coghland6009512014-11-20 21:39:37 +10001074}
1075
1076void
1077Py_Initialize(void)
1078{
1079 Py_InitializeEx(1);
1080}
1081
1082
1083#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001084extern void _Py_dump_counts(FILE*);
Nick Coghland6009512014-11-20 21:39:37 +10001085#endif
1086
1087/* Flush stdout and stderr */
1088
1089static int
1090file_is_closed(PyObject *fobj)
1091{
1092 int r;
1093 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1094 if (tmp == NULL) {
1095 PyErr_Clear();
1096 return 0;
1097 }
1098 r = PyObject_IsTrue(tmp);
1099 Py_DECREF(tmp);
1100 if (r < 0)
1101 PyErr_Clear();
1102 return r > 0;
1103}
1104
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001105static int
Nick Coghland6009512014-11-20 21:39:37 +10001106flush_std_files(void)
1107{
1108 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1109 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1110 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001111 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001112
1113 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001114 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001115 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001116 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001117 status = -1;
1118 }
Nick Coghland6009512014-11-20 21:39:37 +10001119 else
1120 Py_DECREF(tmp);
1121 }
1122
1123 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001124 tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001125 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001126 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001127 status = -1;
1128 }
Nick Coghland6009512014-11-20 21:39:37 +10001129 else
1130 Py_DECREF(tmp);
1131 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001132
1133 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001134}
1135
1136/* Undo the effect of Py_Initialize().
1137
1138 Beware: if multiple interpreter and/or thread states exist, these
1139 are not wiped out; only the current thread and interpreter state
1140 are deleted. But since everything else is deleted, those other
1141 interpreter and thread states should no longer be used.
1142
1143 (XXX We should do better, e.g. wipe out all interpreters and
1144 threads.)
1145
1146 Locking: as above.
1147
1148*/
1149
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001150int
1151Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001152{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001153 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001154
Victor Stinner8e91c242019-04-24 17:24:01 +02001155 _PyRuntimeState *runtime = &_PyRuntime;
1156 if (!runtime->initialized) {
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001157 return status;
Victor Stinner8e91c242019-04-24 17:24:01 +02001158 }
Nick Coghland6009512014-11-20 21:39:37 +10001159
Victor Stinnere225beb2019-06-03 18:14:24 +02001160 /* Get current thread state and interpreter pointer */
1161 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
1162 PyInterpreterState *interp = tstate->interp;
Victor Stinner8e91c242019-04-24 17:24:01 +02001163
Victor Stinnerb45d2592019-06-20 00:05:23 +02001164 // Wrap up existing "threading"-module-created, non-daemon threads.
1165 wait_for_thread_shutdown(tstate);
1166
1167 // Make any remaining pending calls.
1168 _Py_FinishPendingCalls(runtime);
1169
Nick Coghland6009512014-11-20 21:39:37 +10001170 /* The interpreter is still entirely intact at this point, and the
1171 * exit funcs may be relying on that. In particular, if some thread
1172 * or exit func is still waiting to do an import, the import machinery
1173 * expects Py_IsInitialized() to return true. So don't say the
Eric Snow842a2f02019-03-15 15:47:51 -06001174 * runtime is uninitialized until after the exit funcs have run.
Nick Coghland6009512014-11-20 21:39:37 +10001175 * Note that Threading.py uses an exit func to do a join on all the
1176 * threads created thru it, so this also protects pending imports in
1177 * the threads created via Threading.
1178 */
Nick Coghland6009512014-11-20 21:39:37 +10001179
Victor Stinnerb45d2592019-06-20 00:05:23 +02001180 call_py_exitfuncs(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001181
Victor Stinnerda273412017-12-15 01:46:02 +01001182 /* Copy the core config, PyInterpreterState_Delete() free
1183 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001184#ifdef Py_REF_DEBUG
Victor Stinner331a6a52019-05-27 16:39:22 +02001185 int show_ref_count = interp->config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001186#endif
1187#ifdef Py_TRACE_REFS
Victor Stinner331a6a52019-05-27 16:39:22 +02001188 int dump_refs = interp->config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001189#endif
1190#ifdef WITH_PYMALLOC
Victor Stinner331a6a52019-05-27 16:39:22 +02001191 int malloc_stats = interp->config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001192#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001193
Nick Coghland6009512014-11-20 21:39:37 +10001194 /* Remaining threads (e.g. daemon threads) will automatically exit
1195 after taking the GIL (in PyEval_RestoreThread()). */
Victor Stinner8e91c242019-04-24 17:24:01 +02001196 runtime->finalizing = tstate;
1197 runtime->initialized = 0;
1198 runtime->core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001199
Victor Stinnere0deff32015-03-24 13:46:18 +01001200 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001201 if (flush_std_files() < 0) {
1202 status = -1;
1203 }
Nick Coghland6009512014-11-20 21:39:37 +10001204
1205 /* Disable signal handling */
1206 PyOS_FiniInterrupts();
1207
1208 /* Collect garbage. This may call finalizers; it's nice to call these
1209 * before all modules are destroyed.
1210 * XXX If a __del__ or weakref callback is triggered here, and tries to
1211 * XXX import a module, bad things can happen, because Python no
1212 * XXX longer believes it's initialized.
1213 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1214 * XXX is easy to provoke that way. I've also seen, e.g.,
1215 * XXX Exception exceptions.ImportError: 'No module named sha'
1216 * XXX in <function callback at 0x008F5718> ignored
1217 * XXX but I'm unclear on exactly how that one happens. In any case,
1218 * XXX I haven't seen a real-life report of either of these.
1219 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001220 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001221#ifdef COUNT_ALLOCS
1222 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1223 each collection might release some types from the type
1224 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001225 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001226 /* nothing */;
1227#endif
Eric Snowdae02762017-09-14 00:35:58 -07001228
Steve Dowerb82e17e2019-05-23 08:45:22 -07001229 /* Clear all loghooks */
1230 /* We want minimal exposure of this function, so define the extern
1231 * here. The linker should discover the correct function without
1232 * exporting a symbol. */
1233 extern void _PySys_ClearAuditHooks(void);
1234 _PySys_ClearAuditHooks();
1235
Nick Coghland6009512014-11-20 21:39:37 +10001236 /* Destroy all modules */
Victor Stinner987a0dc2019-06-19 10:36:10 +02001237 _PyImport_Cleanup(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001238
Inada Naoki91234a12019-06-03 21:30:58 +09001239 /* Print debug stats if any */
1240 _PyEval_Fini();
1241
Victor Stinnere0deff32015-03-24 13:46:18 +01001242 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001243 if (flush_std_files() < 0) {
1244 status = -1;
1245 }
Nick Coghland6009512014-11-20 21:39:37 +10001246
1247 /* Collect final garbage. This disposes of cycles created by
1248 * class definitions, for example.
1249 * XXX This is disabled because it caused too many problems. If
1250 * XXX a __del__ or weakref callback triggers here, Python code has
1251 * XXX a hard time running, because even the sys module has been
1252 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1253 * XXX One symptom is a sequence of information-free messages
1254 * XXX coming from threads (if a __del__ or callback is invoked,
1255 * XXX other threads can execute too, and any exception they encounter
1256 * XXX triggers a comedy of errors as subsystem after subsystem
1257 * XXX fails to find what it *expects* to find in sys to help report
1258 * XXX the exception and consequent unexpected failures). I've also
1259 * XXX seen segfaults then, after adding print statements to the
1260 * XXX Python code getting called.
1261 */
1262#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001263 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001264#endif
1265
1266 /* Disable tracemalloc after all Python objects have been destroyed,
1267 so it is possible to use tracemalloc in objects destructor. */
1268 _PyTraceMalloc_Fini();
1269
1270 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1271 _PyImport_Fini();
1272
1273 /* Cleanup typeobject.c's internal caches. */
1274 _PyType_Fini();
1275
1276 /* unload faulthandler module */
1277 _PyFaulthandler_Fini();
1278
1279 /* Debugging stuff */
1280#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001281 _Py_dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001282#endif
1283 /* dump hash stats */
1284 _PyHash_Fini();
1285
Eric Snowdae02762017-09-14 00:35:58 -07001286#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001287 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001288 _PyDebug_PrintTotalRefs();
1289 }
Eric Snowdae02762017-09-14 00:35:58 -07001290#endif
Nick Coghland6009512014-11-20 21:39:37 +10001291
1292#ifdef Py_TRACE_REFS
1293 /* Display all objects still alive -- this can invoke arbitrary
1294 * __repr__ overrides, so requires a mostly-intact interpreter.
1295 * Alas, a lot of stuff may still be alive now that will be cleaned
1296 * up later.
1297 */
Victor Stinnerda273412017-12-15 01:46:02 +01001298 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001299 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001300 }
Nick Coghland6009512014-11-20 21:39:37 +10001301#endif /* Py_TRACE_REFS */
1302
1303 /* Clear interpreter state and all thread states. */
1304 PyInterpreterState_Clear(interp);
1305
1306 /* Now we decref the exception classes. After this point nothing
1307 can raise an exception. That's okay, because each Fini() method
1308 below has been checked to make sure no exceptions are ever
1309 raised.
1310 */
1311
1312 _PyExc_Fini();
1313
1314 /* Sundry finalizers */
Victor Stinnerbed48172019-08-27 00:12:32 +02001315 _PyMethod_Fini();
1316 _PyFrame_Fini();
1317 _PyCFunction_Fini();
1318 _PyTuple_Fini();
1319 _PyList_Fini();
1320 _PySet_Fini();
1321 _PyBytes_Fini();
1322 _PyLong_Fini();
1323 _PyFloat_Fini();
1324 _PyDict_Fini();
1325 _PySlice_Fini();
Victor Stinner8e91c242019-04-24 17:24:01 +02001326 _PyGC_Fini(runtime);
Eric Snow86ea5812019-05-10 13:29:55 -04001327 _PyWarnings_Fini(interp);
Eric Snow6b4be192017-05-22 21:36:03 -07001328 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001329 _PyArg_Fini();
Victor Stinnerbed48172019-08-27 00:12:32 +02001330 _PyAsyncGen_Fini();
Yury Selivanovf23746a2018-01-22 19:11:18 -05001331 _PyContext_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001332
1333 /* Cleanup Unicode implementation */
1334 _PyUnicode_Fini();
1335
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001336 _Py_ClearFileSystemEncoding();
Nick Coghland6009512014-11-20 21:39:37 +10001337
1338 /* XXX Still allocated:
1339 - various static ad-hoc pointers to interned strings
1340 - int and float free list blocks
1341 - whatever various modules and libraries allocate
1342 */
1343
1344 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1345
1346 /* Cleanup auto-thread-state */
Victor Stinner8e91c242019-04-24 17:24:01 +02001347 _PyGILState_Fini(runtime);
Nick Coghland6009512014-11-20 21:39:37 +10001348
1349 /* Delete current thread. After this, many C API calls become crashy. */
1350 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001351
Nick Coghland6009512014-11-20 21:39:37 +10001352 PyInterpreterState_Delete(interp);
1353
1354#ifdef Py_TRACE_REFS
1355 /* Display addresses (& refcnts) of all objects still alive.
1356 * An address can be used to find the repr of the object, printed
1357 * above by _Py_PrintReferences.
1358 */
Victor Stinnerda273412017-12-15 01:46:02 +01001359 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001360 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001361 }
Nick Coghland6009512014-11-20 21:39:37 +10001362#endif /* Py_TRACE_REFS */
Victor Stinner34be807c2016-03-14 12:04:26 +01001363#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001364 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001365 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be807c2016-03-14 12:04:26 +01001366 }
Nick Coghland6009512014-11-20 21:39:37 +10001367#endif
1368
Victor Stinner8e91c242019-04-24 17:24:01 +02001369 call_ll_exitfuncs(runtime);
Victor Stinner9316ee42017-11-25 03:17:57 +01001370
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001371 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001372 return status;
1373}
1374
1375void
1376Py_Finalize(void)
1377{
1378 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001379}
1380
1381/* Create and initialize a new interpreter and thread, and return the
1382 new thread. This requires that Py_Initialize() has been called
1383 first.
1384
1385 Unsuccessful initialization yields a NULL pointer. Note that *no*
1386 exception information is available even in this case -- the
1387 exception information is held in the thread, and there is no
1388 thread.
1389
1390 Locking: as above.
1391
1392*/
1393
Victor Stinner331a6a52019-05-27 16:39:22 +02001394static PyStatus
Victor Stinnera7368ac2017-11-15 18:11:45 -08001395new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001396{
Victor Stinner331a6a52019-05-27 16:39:22 +02001397 PyStatus status;
Nick Coghland6009512014-11-20 21:39:37 +10001398
Victor Stinner331a6a52019-05-27 16:39:22 +02001399 status = _PyRuntime_Initialize();
1400 if (_PyStatus_EXCEPTION(status)) {
1401 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001402 }
1403 _PyRuntimeState *runtime = &_PyRuntime;
1404
1405 if (!runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001406 return _PyStatus_ERR("Py_Initialize must be called first");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001407 }
Nick Coghland6009512014-11-20 21:39:37 +10001408
Victor Stinner8a1be612016-03-14 22:07:55 +01001409 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1410 interpreters: disable PyGILState_Check(). */
1411 _PyGILState_check_enabled = 0;
1412
Victor Stinner43125222019-04-24 18:23:53 +02001413 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001414 if (interp == NULL) {
1415 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001416 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001417 }
Nick Coghland6009512014-11-20 21:39:37 +10001418
Victor Stinner43125222019-04-24 18:23:53 +02001419 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001420 if (tstate == NULL) {
1421 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001422 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001423 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001424 }
1425
Victor Stinner43125222019-04-24 18:23:53 +02001426 PyThreadState *save_tstate = PyThreadState_Swap(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001427
Eric Snow1abcf672017-05-23 21:46:51 -07001428 /* Copy the current interpreter config into the new interpreter */
Victor Stinner331a6a52019-05-27 16:39:22 +02001429 PyConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001430 if (save_tstate != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001431 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001432 } else {
1433 /* No current thread state, copy from the main interpreter */
1434 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinner331a6a52019-05-27 16:39:22 +02001435 config = &main_interp->config;
Victor Stinnerda273412017-12-15 01:46:02 +01001436 }
1437
Victor Stinner331a6a52019-05-27 16:39:22 +02001438 status = _PyConfig_Copy(&interp->config, config);
1439 if (_PyStatus_EXCEPTION(status)) {
1440 return status;
Victor Stinnerda273412017-12-15 01:46:02 +01001441 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001442 config = &interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001443
Victor Stinner331a6a52019-05-27 16:39:22 +02001444 status = _PyExc_Init();
1445 if (_PyStatus_EXCEPTION(status)) {
1446 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001447 }
1448
Victor Stinner331a6a52019-05-27 16:39:22 +02001449 status = _PyErr_Init();
1450 if (_PyStatus_EXCEPTION(status)) {
1451 return status;
Victor Stinneref9d9b62019-05-22 11:28:22 +02001452 }
1453
1454
Nick Coghland6009512014-11-20 21:39:37 +10001455 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001456 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001457 if (modules == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001458 return _PyStatus_ERR("can't make modules dictionary");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001459 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001460 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001461
Victor Stinner0a28f8d2019-06-19 02:54:39 +02001462 PyObject *sysmod = _PyImport_FindBuiltin(tstate, "sys");
Eric Snowd393c1b2017-09-14 12:18:12 -06001463 if (sysmod != NULL) {
1464 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinner43125222019-04-24 18:23:53 +02001465 if (interp->sysdict == NULL) {
Eric Snowd393c1b2017-09-14 12:18:12 -06001466 goto handle_error;
Victor Stinner43125222019-04-24 18:23:53 +02001467 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001468 Py_INCREF(interp->sysdict);
1469 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner838f2642019-06-13 22:41:23 +02001470 if (_PySys_InitMain(runtime, tstate) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001471 return _PyStatus_ERR("can't finish initializing sys");
Victor Stinnerab672812019-01-23 15:04:40 +01001472 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001473 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001474 else if (_PyErr_Occurred(tstate)) {
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001475 goto handle_error;
1476 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001477
Victor Stinner0a28f8d2019-06-19 02:54:39 +02001478 PyObject *bimod = _PyImport_FindBuiltin(tstate, "builtins");
Nick Coghland6009512014-11-20 21:39:37 +10001479 if (bimod != NULL) {
1480 interp->builtins = PyModule_GetDict(bimod);
1481 if (interp->builtins == NULL)
1482 goto handle_error;
1483 Py_INCREF(interp->builtins);
1484 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001485 else if (_PyErr_Occurred(tstate)) {
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001486 goto handle_error;
1487 }
Nick Coghland6009512014-11-20 21:39:37 +10001488
Nick Coghland6009512014-11-20 21:39:37 +10001489 if (bimod != NULL && sysmod != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001490 status = _PyBuiltins_AddExceptions(bimod);
1491 if (_PyStatus_EXCEPTION(status)) {
1492 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001493 }
Nick Coghland6009512014-11-20 21:39:37 +10001494
Victor Stinner331a6a52019-05-27 16:39:22 +02001495 status = _PySys_SetPreliminaryStderr(interp->sysdict);
1496 if (_PyStatus_EXCEPTION(status)) {
1497 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001498 }
Nick Coghland6009512014-11-20 21:39:37 +10001499
Victor Stinnerb45d2592019-06-20 00:05:23 +02001500 status = _PyImportHooks_Init(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001501 if (_PyStatus_EXCEPTION(status)) {
1502 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001503 }
Nick Coghland6009512014-11-20 21:39:37 +10001504
Victor Stinnerb45d2592019-06-20 00:05:23 +02001505 status = init_importlib(tstate, sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +02001506 if (_PyStatus_EXCEPTION(status)) {
1507 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001508 }
Nick Coghland6009512014-11-20 21:39:37 +10001509
Victor Stinner0a28f8d2019-06-19 02:54:39 +02001510 status = init_importlib_external(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001511 if (_PyStatus_EXCEPTION(status)) {
1512 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001513 }
Nick Coghland6009512014-11-20 21:39:37 +10001514
Victor Stinnerb45d2592019-06-20 00:05:23 +02001515 status = _PyUnicode_InitEncodings(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001516 if (_PyStatus_EXCEPTION(status)) {
1517 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001518 }
1519
Victor Stinnerb45d2592019-06-20 00:05:23 +02001520 status = init_sys_streams(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001521 if (_PyStatus_EXCEPTION(status)) {
1522 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001523 }
1524
Victor Stinner331a6a52019-05-27 16:39:22 +02001525 status = add_main_module(interp);
1526 if (_PyStatus_EXCEPTION(status)) {
1527 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001528 }
1529
Victor Stinner331a6a52019-05-27 16:39:22 +02001530 if (config->site_import) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02001531 status = init_import_site();
Victor Stinner331a6a52019-05-27 16:39:22 +02001532 if (_PyStatus_EXCEPTION(status)) {
1533 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001534 }
1535 }
Nick Coghland6009512014-11-20 21:39:37 +10001536 }
1537
Victor Stinnerb45d2592019-06-20 00:05:23 +02001538 if (_PyErr_Occurred(tstate)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001539 goto handle_error;
1540 }
Nick Coghland6009512014-11-20 21:39:37 +10001541
Victor Stinnera7368ac2017-11-15 18:11:45 -08001542 *tstate_p = tstate;
Victor Stinner331a6a52019-05-27 16:39:22 +02001543 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001544
Nick Coghland6009512014-11-20 21:39:37 +10001545handle_error:
1546 /* Oops, it didn't work. Undo it all. */
1547
1548 PyErr_PrintEx(0);
1549 PyThreadState_Clear(tstate);
1550 PyThreadState_Swap(save_tstate);
1551 PyThreadState_Delete(tstate);
1552 PyInterpreterState_Delete(interp);
1553
Victor Stinnera7368ac2017-11-15 18:11:45 -08001554 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001555 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001556}
1557
1558PyThreadState *
1559Py_NewInterpreter(void)
1560{
Stéphane Wirtel9e06d2b2019-03-18 17:10:29 +01001561 PyThreadState *tstate = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001562 PyStatus status = new_interpreter(&tstate);
1563 if (_PyStatus_EXCEPTION(status)) {
1564 Py_ExitStatusException(status);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001565 }
1566 return tstate;
1567
Nick Coghland6009512014-11-20 21:39:37 +10001568}
1569
1570/* Delete an interpreter and its last thread. This requires that the
1571 given thread state is current, that the thread has no remaining
1572 frames, and that it is its interpreter's only remaining thread.
1573 It is a fatal error to violate these constraints.
1574
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001575 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001576 everything, regardless.)
1577
1578 Locking: as above.
1579
1580*/
1581
1582void
1583Py_EndInterpreter(PyThreadState *tstate)
1584{
1585 PyInterpreterState *interp = tstate->interp;
1586
Victor Stinnerb45d2592019-06-20 00:05:23 +02001587 if (tstate != _PyThreadState_GET()) {
Nick Coghland6009512014-11-20 21:39:37 +10001588 Py_FatalError("Py_EndInterpreter: thread is not current");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001589 }
1590 if (tstate->frame != NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001591 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001592 }
Eric Snow5be45a62019-03-08 22:47:07 -07001593 interp->finalizing = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001594
Eric Snow842a2f02019-03-15 15:47:51 -06001595 // Wrap up existing "threading"-module-created, non-daemon threads.
Victor Stinnerb45d2592019-06-20 00:05:23 +02001596 wait_for_thread_shutdown(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001597
Victor Stinnerb45d2592019-06-20 00:05:23 +02001598 call_py_exitfuncs(tstate);
Marcel Plch776407f2017-12-20 11:17:58 +01001599
Victor Stinnerb45d2592019-06-20 00:05:23 +02001600 if (tstate != interp->tstate_head || tstate->next != NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001601 Py_FatalError("Py_EndInterpreter: not the last thread");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001602 }
Nick Coghland6009512014-11-20 21:39:37 +10001603
Victor Stinner987a0dc2019-06-19 10:36:10 +02001604 _PyImport_Cleanup(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001605 PyInterpreterState_Clear(interp);
1606 PyThreadState_Swap(NULL);
1607 PyInterpreterState_Delete(interp);
1608}
1609
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001610/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001611
Victor Stinner331a6a52019-05-27 16:39:22 +02001612static PyStatus
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001613add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001614{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001615 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001616 m = PyImport_AddModule("__main__");
1617 if (m == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +02001618 return _PyStatus_ERR("can't create __main__ module");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001619
Nick Coghland6009512014-11-20 21:39:37 +10001620 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001621 ann_dict = PyDict_New();
1622 if ((ann_dict == NULL) ||
1623 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001624 return _PyStatus_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001625 }
1626 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001627
Nick Coghland6009512014-11-20 21:39:37 +10001628 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1629 PyObject *bimod = PyImport_ImportModule("builtins");
1630 if (bimod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001631 return _PyStatus_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001632 }
1633 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001634 return _PyStatus_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001635 }
1636 Py_DECREF(bimod);
1637 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001638
Nick Coghland6009512014-11-20 21:39:37 +10001639 /* Main is a little special - imp.is_builtin("__main__") will return
1640 * False, but BuiltinImporter is still the most appropriate initial
1641 * setting for its __loader__ attribute. A more suitable value will
1642 * be set if __main__ gets further initialized later in the startup
1643 * process.
1644 */
1645 loader = PyDict_GetItemString(d, "__loader__");
1646 if (loader == NULL || loader == Py_None) {
1647 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1648 "BuiltinImporter");
1649 if (loader == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001650 return _PyStatus_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001651 }
1652 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001653 return _PyStatus_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001654 }
1655 Py_DECREF(loader);
1656 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001657 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001658}
1659
Nick Coghland6009512014-11-20 21:39:37 +10001660/* Import the site module (not into __main__ though) */
1661
Victor Stinner331a6a52019-05-27 16:39:22 +02001662static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001663init_import_site(void)
Nick Coghland6009512014-11-20 21:39:37 +10001664{
1665 PyObject *m;
1666 m = PyImport_ImportModule("site");
1667 if (m == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001668 return _PyStatus_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001669 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001670 Py_DECREF(m);
Victor Stinner331a6a52019-05-27 16:39:22 +02001671 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001672}
1673
Victor Stinner874dbe82015-09-04 17:29:57 +02001674/* Check if a file descriptor is valid or not.
1675 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1676static int
1677is_valid_fd(int fd)
1678{
Victor Stinner3092d6b2019-04-17 18:09:12 +02001679/* dup() is faster than fstat(): fstat() can require input/output operations,
1680 whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python
1681 startup. Problem: dup() doesn't check if the file descriptor is valid on
1682 some platforms.
1683
1684 bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other
1685 side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with
1686 EBADF. FreeBSD has similar issue (bpo-32849).
1687
1688 Only use dup() on platforms where dup() is enough to detect invalid FD in
1689 corner cases: on Linux and Windows (bpo-32849). */
1690#if defined(__linux__) || defined(MS_WINDOWS)
1691 if (fd < 0) {
1692 return 0;
1693 }
1694 int fd2;
1695
1696 _Py_BEGIN_SUPPRESS_IPH
1697 fd2 = dup(fd);
1698 if (fd2 >= 0) {
1699 close(fd2);
1700 }
1701 _Py_END_SUPPRESS_IPH
1702
1703 return (fd2 >= 0);
1704#else
Victor Stinner1c4670e2017-05-04 00:45:56 +02001705 struct stat st;
1706 return (fstat(fd, &st) == 0);
Victor Stinner1c4670e2017-05-04 00:45:56 +02001707#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001708}
1709
1710/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001711static PyObject*
Victor Stinner331a6a52019-05-27 16:39:22 +02001712create_stdio(const PyConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001713 int fd, int write_mode, const char* name,
Victor Stinner709d23d2019-05-02 14:56:30 -04001714 const wchar_t* encoding, const wchar_t* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001715{
1716 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1717 const char* mode;
1718 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001719 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001720 int buffering, isatty;
1721 _Py_IDENTIFIER(open);
1722 _Py_IDENTIFIER(isatty);
1723 _Py_IDENTIFIER(TextIOWrapper);
1724 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001725 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001726
Victor Stinner874dbe82015-09-04 17:29:57 +02001727 if (!is_valid_fd(fd))
1728 Py_RETURN_NONE;
1729
Nick Coghland6009512014-11-20 21:39:37 +10001730 /* stdin is always opened in buffered mode, first because it shouldn't
1731 make a difference in common use cases, second because TextIOWrapper
1732 depends on the presence of a read1() method which only exists on
1733 buffered streams.
1734 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001735 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001736 buffering = 0;
1737 else
1738 buffering = -1;
1739 if (write_mode)
1740 mode = "wb";
1741 else
1742 mode = "rb";
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001743 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOO",
Nick Coghland6009512014-11-20 21:39:37 +10001744 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001745 Py_None, Py_None, /* encoding, errors */
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001746 Py_None, Py_False); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001747 if (buf == NULL)
1748 goto error;
1749
1750 if (buffering) {
1751 _Py_IDENTIFIER(raw);
1752 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1753 if (raw == NULL)
1754 goto error;
1755 }
1756 else {
1757 raw = buf;
1758 Py_INCREF(raw);
1759 }
1760
Steve Dower39294992016-08-30 21:22:36 -07001761#ifdef MS_WINDOWS
1762 /* Windows console IO is always UTF-8 encoded */
1763 if (PyWindowsConsoleIO_Check(raw))
Victor Stinner709d23d2019-05-02 14:56:30 -04001764 encoding = L"utf-8";
Steve Dower39294992016-08-30 21:22:36 -07001765#endif
1766
Nick Coghland6009512014-11-20 21:39:37 +10001767 text = PyUnicode_FromString(name);
1768 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1769 goto error;
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001770 res = _PyObject_CallMethodIdNoArgs(raw, &PyId_isatty);
Nick Coghland6009512014-11-20 21:39:37 +10001771 if (res == NULL)
1772 goto error;
1773 isatty = PyObject_IsTrue(res);
1774 Py_DECREF(res);
1775 if (isatty == -1)
1776 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001777 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001778 write_through = Py_True;
1779 else
1780 write_through = Py_False;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001781 if (isatty && buffered_stdio)
Nick Coghland6009512014-11-20 21:39:37 +10001782 line_buffering = Py_True;
1783 else
1784 line_buffering = Py_False;
1785
1786 Py_CLEAR(raw);
1787 Py_CLEAR(text);
1788
1789#ifdef MS_WINDOWS
1790 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1791 newlines to "\n".
1792 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1793 newline = NULL;
1794#else
1795 /* sys.stdin: split lines at "\n".
1796 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1797 newline = "\n";
1798#endif
1799
Victor Stinner709d23d2019-05-02 14:56:30 -04001800 PyObject *encoding_str = PyUnicode_FromWideChar(encoding, -1);
1801 if (encoding_str == NULL) {
1802 Py_CLEAR(buf);
1803 goto error;
1804 }
1805
1806 PyObject *errors_str = PyUnicode_FromWideChar(errors, -1);
1807 if (errors_str == NULL) {
1808 Py_CLEAR(buf);
1809 Py_CLEAR(encoding_str);
1810 goto error;
1811 }
1812
1813 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OOOsOO",
1814 buf, encoding_str, errors_str,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001815 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001816 Py_CLEAR(buf);
Victor Stinner709d23d2019-05-02 14:56:30 -04001817 Py_CLEAR(encoding_str);
1818 Py_CLEAR(errors_str);
Nick Coghland6009512014-11-20 21:39:37 +10001819 if (stream == NULL)
1820 goto error;
1821
1822 if (write_mode)
1823 mode = "w";
1824 else
1825 mode = "r";
1826 text = PyUnicode_FromString(mode);
1827 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1828 goto error;
1829 Py_CLEAR(text);
1830 return stream;
1831
1832error:
1833 Py_XDECREF(buf);
1834 Py_XDECREF(stream);
1835 Py_XDECREF(text);
1836 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001837
Victor Stinner874dbe82015-09-04 17:29:57 +02001838 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1839 /* Issue #24891: the file descriptor was closed after the first
1840 is_valid_fd() check was called. Ignore the OSError and set the
1841 stream to None. */
1842 PyErr_Clear();
1843 Py_RETURN_NONE;
1844 }
1845 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001846}
1847
1848/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinner331a6a52019-05-27 16:39:22 +02001849static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001850init_sys_streams(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10001851{
1852 PyObject *iomod = NULL, *wrapper;
1853 PyObject *bimod = NULL;
1854 PyObject *m;
1855 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001856 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001857 PyObject * encoding_attr;
Victor Stinner331a6a52019-05-27 16:39:22 +02001858 PyStatus res = _PyStatus_OK();
Victor Stinnerb45d2592019-06-20 00:05:23 +02001859 const PyConfig *config = &tstate->interp->config;
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001860
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001861 /* Check that stdin is not a directory
1862 Using shell redirection, you can redirect stdin to a directory,
1863 crashing the Python interpreter. Catch this common mistake here
1864 and output a useful error message. Note that under MS Windows,
1865 the shell already prevents that. */
1866#ifndef MS_WINDOWS
1867 struct _Py_stat_struct sb;
1868 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1869 S_ISDIR(sb.st_mode)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001870 return _PyStatus_ERR("<stdin> is a directory, cannot continue");
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001871 }
1872#endif
1873
Nick Coghland6009512014-11-20 21:39:37 +10001874 /* Hack to avoid a nasty recursion issue when Python is invoked
1875 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1876 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1877 goto error;
1878 }
1879 Py_DECREF(m);
1880
1881 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1882 goto error;
1883 }
1884 Py_DECREF(m);
1885
1886 if (!(bimod = PyImport_ImportModule("builtins"))) {
1887 goto error;
1888 }
1889
1890 if (!(iomod = PyImport_ImportModule("io"))) {
1891 goto error;
1892 }
1893 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1894 goto error;
1895 }
1896
1897 /* Set builtins.open */
1898 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1899 Py_DECREF(wrapper);
1900 goto error;
1901 }
1902 Py_DECREF(wrapper);
1903
Nick Coghland6009512014-11-20 21:39:37 +10001904 /* Set sys.stdin */
1905 fd = fileno(stdin);
1906 /* Under some conditions stdin, stdout and stderr may not be connected
1907 * and fileno() may point to an invalid file descriptor. For example
1908 * GUI apps don't have valid standard streams by default.
1909 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001910 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001911 config->stdio_encoding,
1912 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001913 if (std == NULL)
1914 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001915 PySys_SetObject("__stdin__", std);
1916 _PySys_SetObjectId(&PyId_stdin, std);
1917 Py_DECREF(std);
1918
1919 /* Set sys.stdout */
1920 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001921 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001922 config->stdio_encoding,
1923 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001924 if (std == NULL)
1925 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001926 PySys_SetObject("__stdout__", std);
1927 _PySys_SetObjectId(&PyId_stdout, std);
1928 Py_DECREF(std);
1929
1930#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1931 /* Set sys.stderr, replaces the preliminary stderr */
1932 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001933 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001934 config->stdio_encoding,
Victor Stinner709d23d2019-05-02 14:56:30 -04001935 L"backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001936 if (std == NULL)
1937 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001938
1939 /* Same as hack above, pre-import stderr's codec to avoid recursion
1940 when import.c tries to write to stderr in verbose mode. */
1941 encoding_attr = PyObject_GetAttrString(std, "encoding");
1942 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001943 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001944 if (std_encoding != NULL) {
1945 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1946 Py_XDECREF(codec_info);
1947 }
1948 Py_DECREF(encoding_attr);
1949 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001950 _PyErr_Clear(tstate); /* Not a fatal error if codec isn't available */
Nick Coghland6009512014-11-20 21:39:37 +10001951
1952 if (PySys_SetObject("__stderr__", std) < 0) {
1953 Py_DECREF(std);
1954 goto error;
1955 }
1956 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1957 Py_DECREF(std);
1958 goto error;
1959 }
1960 Py_DECREF(std);
1961#endif
1962
Victor Stinnera7368ac2017-11-15 18:11:45 -08001963 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001964
Victor Stinnera7368ac2017-11-15 18:11:45 -08001965error:
Victor Stinner331a6a52019-05-27 16:39:22 +02001966 res = _PyStatus_ERR("can't initialize sys standard streams");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001967
1968done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02001969 _Py_ClearStandardStreamEncoding();
Victor Stinner31e99082017-12-20 23:41:38 +01001970
Nick Coghland6009512014-11-20 21:39:37 +10001971 Py_XDECREF(bimod);
1972 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001973 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001974}
1975
1976
Victor Stinner10dc4842015-03-24 12:01:30 +01001977static void
Victor Stinner1ce16fb2019-09-18 01:35:33 +02001978_Py_FatalError_DumpTracebacks(int fd, PyInterpreterState *interp,
1979 PyThreadState *tstate)
Victor Stinner10dc4842015-03-24 12:01:30 +01001980{
Victor Stinner10dc4842015-03-24 12:01:30 +01001981 fputc('\n', stderr);
1982 fflush(stderr);
1983
1984 /* display the current Python stack */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02001985 _Py_DumpTracebackThreads(fd, interp, tstate);
Victor Stinner10dc4842015-03-24 12:01:30 +01001986}
Victor Stinner791da1c2016-03-14 16:53:12 +01001987
1988/* Print the current exception (if an exception is set) with its traceback,
1989 or display the current Python stack.
1990
1991 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1992 called on catastrophic cases.
1993
1994 Return 1 if the traceback was displayed, 0 otherwise. */
1995
1996static int
1997_Py_FatalError_PrintExc(int fd)
1998{
Victor Stinnerb45d2592019-06-20 00:05:23 +02001999 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner791da1c2016-03-14 16:53:12 +01002000 PyObject *ferr, *res;
2001 PyObject *exception, *v, *tb;
2002 int has_tb;
2003
Victor Stinnerb45d2592019-06-20 00:05:23 +02002004 _PyErr_Fetch(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002005 if (exception == NULL) {
2006 /* No current exception */
2007 return 0;
2008 }
2009
2010 ferr = _PySys_GetObjectId(&PyId_stderr);
2011 if (ferr == NULL || ferr == Py_None) {
2012 /* sys.stderr is not set yet or set to None,
2013 no need to try to display the exception */
2014 return 0;
2015 }
2016
Victor Stinnerb45d2592019-06-20 00:05:23 +02002017 _PyErr_NormalizeException(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002018 if (tb == NULL) {
2019 tb = Py_None;
2020 Py_INCREF(tb);
2021 }
2022 PyException_SetTraceback(v, tb);
2023 if (exception == NULL) {
2024 /* PyErr_NormalizeException() failed */
2025 return 0;
2026 }
2027
2028 has_tb = (tb != Py_None);
2029 PyErr_Display(exception, v, tb);
2030 Py_XDECREF(exception);
2031 Py_XDECREF(v);
2032 Py_XDECREF(tb);
2033
2034 /* sys.stderr may be buffered: call sys.stderr.flush() */
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002035 res = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002036 if (res == NULL) {
2037 _PyErr_Clear(tstate);
2038 }
2039 else {
Victor Stinner791da1c2016-03-14 16:53:12 +01002040 Py_DECREF(res);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002041 }
Victor Stinner791da1c2016-03-14 16:53:12 +01002042
2043 return has_tb;
2044}
2045
Nick Coghland6009512014-11-20 21:39:37 +10002046/* Print fatal error message and abort */
2047
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002048#ifdef MS_WINDOWS
2049static void
2050fatal_output_debug(const char *msg)
2051{
2052 /* buffer of 256 bytes allocated on the stack */
2053 WCHAR buffer[256 / sizeof(WCHAR)];
2054 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2055 size_t msglen;
2056
2057 OutputDebugStringW(L"Fatal Python error: ");
2058
2059 msglen = strlen(msg);
2060 while (msglen) {
2061 size_t i;
2062
2063 if (buflen > msglen) {
2064 buflen = msglen;
2065 }
2066
2067 /* Convert the message to wchar_t. This uses a simple one-to-one
2068 conversion, assuming that the this error message actually uses
2069 ASCII only. If this ceases to be true, we will have to convert. */
2070 for (i=0; i < buflen; ++i) {
2071 buffer[i] = msg[i];
2072 }
2073 buffer[i] = L'\0';
2074 OutputDebugStringW(buffer);
2075
2076 msg += buflen;
2077 msglen -= buflen;
2078 }
2079 OutputDebugStringW(L"\n");
2080}
2081#endif
2082
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002083
2084static void
2085fatal_error_dump_runtime(FILE *stream, _PyRuntimeState *runtime)
2086{
2087 fprintf(stream, "Python runtime state: ");
2088 if (runtime->finalizing) {
2089 fprintf(stream, "finalizing (tstate=%p)", runtime->finalizing);
2090 }
2091 else if (runtime->initialized) {
2092 fprintf(stream, "initialized");
2093 }
2094 else if (runtime->core_initialized) {
2095 fprintf(stream, "core initialized");
2096 }
2097 else if (runtime->preinitialized) {
2098 fprintf(stream, "preinitialized");
2099 }
2100 else if (runtime->preinitializing) {
2101 fprintf(stream, "preinitializing");
2102 }
2103 else {
2104 fprintf(stream, "unknown");
2105 }
2106 fprintf(stream, "\n");
2107 fflush(stream);
2108}
2109
2110
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002111static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002112fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002113{
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002114 FILE *stream = stderr;
2115 const int fd = fileno(stream);
Victor Stinner53345a42015-03-25 01:55:14 +01002116 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002117
2118 if (reentrant) {
2119 /* Py_FatalError() caused a second fatal error.
2120 Example: flush_std_files() raises a recursion error. */
2121 goto exit;
2122 }
2123 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002124
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002125 fprintf(stream, "Fatal Python error: ");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002126 if (prefix) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002127 fputs(prefix, stream);
2128 fputs(": ", stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002129 }
2130 if (msg) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002131 fputs(msg, stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002132 }
2133 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002134 fprintf(stream, "<message not set>");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002135 }
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002136 fputs("\n", stream);
2137 fflush(stream); /* it helps in Windows debug build */
2138
2139 _PyRuntimeState *runtime = &_PyRuntime;
2140 fatal_error_dump_runtime(stream, runtime);
2141
2142 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
2143 PyInterpreterState *interp = NULL;
2144 if (tstate != NULL) {
2145 interp = tstate->interp;
2146 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002147
Victor Stinner3a228ab2018-11-01 00:26:41 +01002148 /* Check if the current thread has a Python thread state
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002149 and holds the GIL.
Victor Stinner3a228ab2018-11-01 00:26:41 +01002150
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002151 tss_tstate is NULL if Py_FatalError() is called from a C thread which
2152 has no Python thread state.
2153
2154 tss_tstate != tstate if the current Python thread does not hold the GIL.
2155 */
2156 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2157 int has_tstate_and_gil = (tss_tstate != NULL && tss_tstate == tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002158 if (has_tstate_and_gil) {
2159 /* If an exception is set, print the exception with its traceback */
2160 if (!_Py_FatalError_PrintExc(fd)) {
2161 /* No exception is set, or an exception is set without traceback */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002162 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002163 }
2164 }
2165 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002166 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002167 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002168
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002169 /* The main purpose of faulthandler is to display the traceback.
2170 This function already did its best to display a traceback.
2171 Disable faulthandler to prevent writing a second traceback
2172 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002173 _PyFaulthandler_Fini();
2174
Victor Stinner791da1c2016-03-14 16:53:12 +01002175 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002176 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002177 /* Flush sys.stdout and sys.stderr */
2178 flush_std_files();
2179 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002180
Nick Coghland6009512014-11-20 21:39:37 +10002181#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002182 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002183#endif /* MS_WINDOWS */
2184
2185exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002186 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002187#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002188 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002189#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002190 abort();
2191 }
2192 else {
2193 exit(status);
2194 }
2195}
2196
Victor Stinner19760862017-12-20 01:41:59 +01002197void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002198Py_FatalError(const char *msg)
2199{
2200 fatal_error(NULL, msg, -1);
2201}
2202
Victor Stinner19760862017-12-20 01:41:59 +01002203void _Py_NO_RETURN
Victor Stinner331a6a52019-05-27 16:39:22 +02002204Py_ExitStatusException(PyStatus status)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002205{
Victor Stinner331a6a52019-05-27 16:39:22 +02002206 if (_PyStatus_IS_EXIT(status)) {
2207 exit(status.exitcode);
Victor Stinnerdbacfc22019-05-16 16:39:26 +02002208 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002209 else if (_PyStatus_IS_ERROR(status)) {
2210 fatal_error(status.func, status.err_msg, 1);
Victor Stinnerdfe88472019-03-01 12:14:41 +01002211 }
2212 else {
Victor Stinner331a6a52019-05-27 16:39:22 +02002213 Py_FatalError("Py_ExitStatusException() must not be called on success");
Victor Stinnerdfe88472019-03-01 12:14:41 +01002214 }
Nick Coghland6009512014-11-20 21:39:37 +10002215}
2216
2217/* Clean up and exit */
2218
Victor Stinnerd7292b52016-06-17 12:29:00 +02002219# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002220
Nick Coghland6009512014-11-20 21:39:37 +10002221/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002222void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002223{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002224 PyInterpreterState *is = _PyInterpreterState_GET_UNSAFE();
Marcel Plch776407f2017-12-20 11:17:58 +01002225
Antoine Pitroufc5db952017-12-13 02:29:07 +01002226 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002227 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2228
2229 is->pyexitfunc = func;
2230 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002231}
2232
2233static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002234call_py_exitfuncs(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002235{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002236 PyInterpreterState *interp = tstate->interp;
2237 if (interp->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002238 return;
2239
Victor Stinnerb45d2592019-06-20 00:05:23 +02002240 (*interp->pyexitfunc)(interp->pyexitmodule);
2241 _PyErr_Clear(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10002242}
2243
2244/* Wait until threading._shutdown completes, provided
2245 the threading module was imported in the first place.
2246 The shutdown routine will wait until all non-daemon
2247 "threading" threads have completed. */
2248static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002249wait_for_thread_shutdown(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002250{
Nick Coghland6009512014-11-20 21:39:37 +10002251 _Py_IDENTIFIER(_shutdown);
2252 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002253 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002254 if (threading == NULL) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02002255 if (_PyErr_Occurred(tstate)) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002256 PyErr_WriteUnraisable(NULL);
2257 }
2258 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002259 return;
2260 }
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002261 result = _PyObject_CallMethodIdNoArgs(threading, &PyId__shutdown);
Nick Coghland6009512014-11-20 21:39:37 +10002262 if (result == NULL) {
2263 PyErr_WriteUnraisable(threading);
2264 }
2265 else {
2266 Py_DECREF(result);
2267 }
2268 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002269}
2270
2271#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002272int Py_AtExit(void (*func)(void))
2273{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002274 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002275 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002276 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002277 return 0;
2278}
2279
2280static void
Victor Stinner8e91c242019-04-24 17:24:01 +02002281call_ll_exitfuncs(_PyRuntimeState *runtime)
Nick Coghland6009512014-11-20 21:39:37 +10002282{
Victor Stinner8e91c242019-04-24 17:24:01 +02002283 while (runtime->nexitfuncs > 0) {
Victor Stinner87d23a02019-04-26 05:49:26 +02002284 /* pop last function from the list */
2285 runtime->nexitfuncs--;
2286 void (*exitfunc)(void) = runtime->exitfuncs[runtime->nexitfuncs];
2287 runtime->exitfuncs[runtime->nexitfuncs] = NULL;
2288
2289 exitfunc();
Victor Stinner8e91c242019-04-24 17:24:01 +02002290 }
Nick Coghland6009512014-11-20 21:39:37 +10002291
2292 fflush(stdout);
2293 fflush(stderr);
2294}
2295
Victor Stinnercfc88312018-08-01 16:41:25 +02002296void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002297Py_Exit(int sts)
2298{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002299 if (Py_FinalizeEx() < 0) {
2300 sts = 120;
2301 }
Nick Coghland6009512014-11-20 21:39:37 +10002302
2303 exit(sts);
2304}
2305
Victor Stinner331a6a52019-05-27 16:39:22 +02002306static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02002307init_signals(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002308{
2309#ifdef SIGPIPE
2310 PyOS_setsig(SIGPIPE, SIG_IGN);
2311#endif
2312#ifdef SIGXFZ
2313 PyOS_setsig(SIGXFZ, SIG_IGN);
2314#endif
2315#ifdef SIGXFSZ
2316 PyOS_setsig(SIGXFSZ, SIG_IGN);
2317#endif
2318 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerb45d2592019-06-20 00:05:23 +02002319 if (_PyErr_Occurred(tstate)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02002320 return _PyStatus_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002321 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002322 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002323}
2324
2325
2326/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2327 *
2328 * All of the code in this function must only use async-signal-safe functions,
2329 * listed at `man 7 signal` or
2330 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2331 */
2332void
2333_Py_RestoreSignals(void)
2334{
2335#ifdef SIGPIPE
2336 PyOS_setsig(SIGPIPE, SIG_DFL);
2337#endif
2338#ifdef SIGXFZ
2339 PyOS_setsig(SIGXFZ, SIG_DFL);
2340#endif
2341#ifdef SIGXFSZ
2342 PyOS_setsig(SIGXFSZ, SIG_DFL);
2343#endif
2344}
2345
2346
2347/*
2348 * The file descriptor fd is considered ``interactive'' if either
2349 * a) isatty(fd) is TRUE, or
2350 * b) the -i flag was given, and the filename associated with
2351 * the descriptor is NULL or "<stdin>" or "???".
2352 */
2353int
2354Py_FdIsInteractive(FILE *fp, const char *filename)
2355{
2356 if (isatty((int)fileno(fp)))
2357 return 1;
2358 if (!Py_InteractiveFlag)
2359 return 0;
2360 return (filename == NULL) ||
2361 (strcmp(filename, "<stdin>") == 0) ||
2362 (strcmp(filename, "???") == 0);
2363}
2364
2365
Nick Coghland6009512014-11-20 21:39:37 +10002366/* Wrappers around sigaction() or signal(). */
2367
2368PyOS_sighandler_t
2369PyOS_getsig(int sig)
2370{
2371#ifdef HAVE_SIGACTION
2372 struct sigaction context;
2373 if (sigaction(sig, NULL, &context) == -1)
2374 return SIG_ERR;
2375 return context.sa_handler;
2376#else
2377 PyOS_sighandler_t handler;
2378/* Special signal handling for the secure CRT in Visual Studio 2005 */
2379#if defined(_MSC_VER) && _MSC_VER >= 1400
2380 switch (sig) {
2381 /* Only these signals are valid */
2382 case SIGINT:
2383 case SIGILL:
2384 case SIGFPE:
2385 case SIGSEGV:
2386 case SIGTERM:
2387 case SIGBREAK:
2388 case SIGABRT:
2389 break;
2390 /* Don't call signal() with other values or it will assert */
2391 default:
2392 return SIG_ERR;
2393 }
2394#endif /* _MSC_VER && _MSC_VER >= 1400 */
2395 handler = signal(sig, SIG_IGN);
2396 if (handler != SIG_ERR)
2397 signal(sig, handler);
2398 return handler;
2399#endif
2400}
2401
2402/*
2403 * All of the code in this function must only use async-signal-safe functions,
2404 * listed at `man 7 signal` or
2405 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2406 */
2407PyOS_sighandler_t
2408PyOS_setsig(int sig, PyOS_sighandler_t handler)
2409{
2410#ifdef HAVE_SIGACTION
2411 /* Some code in Modules/signalmodule.c depends on sigaction() being
2412 * used here if HAVE_SIGACTION is defined. Fix that if this code
2413 * changes to invalidate that assumption.
2414 */
2415 struct sigaction context, ocontext;
2416 context.sa_handler = handler;
2417 sigemptyset(&context.sa_mask);
2418 context.sa_flags = 0;
2419 if (sigaction(sig, &context, &ocontext) == -1)
2420 return SIG_ERR;
2421 return ocontext.sa_handler;
2422#else
2423 PyOS_sighandler_t oldhandler;
2424 oldhandler = signal(sig, handler);
2425#ifdef HAVE_SIGINTERRUPT
2426 siginterrupt(sig, 1);
2427#endif
2428 return oldhandler;
2429#endif
2430}
2431
2432#ifdef __cplusplus
2433}
2434#endif