blob: ea0d7a5ee2b943cc5b846599f08518c2ab9f2742 [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 Stinner12f2f172019-09-26 15:51:50 +0200478 status = _PyConfig_WritePathConfig(config);
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 Stinner12f2f172019-09-26 15:51:50 +0200649 status = _PyConfig_WritePathConfig(config);
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 Stinner441b10c2019-09-28 04:28:35 +0200738 config.struct_size = sizeof(PyPreConfig);
739
740 status = _PyPreConfig_InitFromPreConfig(&config, src_config);
741 if (_PyStatus_EXCEPTION(status)) {
742 return status;
743 }
Victor Stinnerf72346c2019-03-25 17:54:58 +0100744
Victor Stinner331a6a52019-05-27 16:39:22 +0200745 status = _PyPreConfig_Read(&config, args);
746 if (_PyStatus_EXCEPTION(status)) {
747 return status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100748 }
749
Victor Stinner331a6a52019-05-27 16:39:22 +0200750 status = _PyPreConfig_Write(&config);
751 if (_PyStatus_EXCEPTION(status)) {
752 return status;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100753 }
754
Victor Stinnerd3b90412019-09-17 23:59:51 +0200755 runtime->preinitializing = 0;
756 runtime->preinitialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200757 return _PyStatus_OK();
Victor Stinnerf72346c2019-03-25 17:54:58 +0100758}
759
Victor Stinner70005ac2019-05-02 15:25:34 -0400760
Victor Stinner331a6a52019-05-27 16:39:22 +0200761PyStatus
762Py_PreInitializeFromBytesArgs(const PyPreConfig *src_config, Py_ssize_t argc, char **argv)
Victor Stinnerf72346c2019-03-25 17:54:58 +0100763{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100764 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400765 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100766}
767
768
Victor Stinner331a6a52019-05-27 16:39:22 +0200769PyStatus
770Py_PreInitializeFromArgs(const PyPreConfig *src_config, Py_ssize_t argc, wchar_t **argv)
Victor Stinner20004952019-03-26 02:31:11 +0100771{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100772 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400773 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinner20004952019-03-26 02:31:11 +0100774}
775
776
Victor Stinner331a6a52019-05-27 16:39:22 +0200777PyStatus
778Py_PreInitialize(const PyPreConfig *src_config)
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100779{
Victor Stinner70005ac2019-05-02 15:25:34 -0400780 return _Py_PreInitializeFromPyArgv(src_config, NULL);
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100781}
782
783
Victor Stinner331a6a52019-05-27 16:39:22 +0200784PyStatus
785_Py_PreInitializeFromConfig(const PyConfig *config,
786 const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100787{
Victor Stinner331a6a52019-05-27 16:39:22 +0200788 assert(config != NULL);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200789
Victor Stinner331a6a52019-05-27 16:39:22 +0200790 PyStatus status = _PyRuntime_Initialize();
791 if (_PyStatus_EXCEPTION(status)) {
792 return status;
Victor Stinner6d1c4672019-05-20 11:02:00 +0200793 }
794 _PyRuntimeState *runtime = &_PyRuntime;
795
Victor Stinnerd3b90412019-09-17 23:59:51 +0200796 if (runtime->preinitialized) {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200797 /* Already initialized: do nothing */
Victor Stinner331a6a52019-05-27 16:39:22 +0200798 return _PyStatus_OK();
Victor Stinner70005ac2019-05-02 15:25:34 -0400799 }
Victor Stinnercab5d072019-05-17 19:01:14 +0200800
Victor Stinner331a6a52019-05-27 16:39:22 +0200801 PyPreConfig preconfig;
Victor Stinner441b10c2019-09-28 04:28:35 +0200802 preconfig.struct_size = sizeof(PyPreConfig);
803
804 status = _PyPreConfig_InitFromConfig(&preconfig, config);
805 if (_PyStatus_EXCEPTION(status)) {
806 return status;
807 }
Victor Stinner6d1c4672019-05-20 11:02:00 +0200808
Victor Stinner331a6a52019-05-27 16:39:22 +0200809 if (!config->parse_argv) {
810 return Py_PreInitialize(&preconfig);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200811 }
812 else if (args == NULL) {
Victor Stinnercab5d072019-05-17 19:01:14 +0200813 _PyArgv config_args = {
814 .use_bytes_argv = 0,
Victor Stinner331a6a52019-05-27 16:39:22 +0200815 .argc = config->argv.length,
816 .wchar_argv = config->argv.items};
Victor Stinner6d1c4672019-05-20 11:02:00 +0200817 return _Py_PreInitializeFromPyArgv(&preconfig, &config_args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200818 }
819 else {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200820 return _Py_PreInitializeFromPyArgv(&preconfig, args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200821 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100822}
823
824
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100825/* Begin interpreter initialization
826 *
827 * On return, the first thread and interpreter state have been created,
828 * but the compiler, signal handling, multithreading and
829 * multiple interpreter support, and codec infrastructure are not yet
830 * available.
831 *
832 * The import system will support builtin and frozen modules only.
833 * The only supported io is writing to sys.stderr
834 *
835 * If any operation invoked by this function fails, a fatal error is
836 * issued and the function does not return.
837 *
838 * Any code invoked from this function should *not* assume it has access
839 * to the Python C API (unless the API is explicitly listed as being
840 * safe to call without calling Py_Initialize first)
841 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200842static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200843pyinit_core(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200844 const PyConfig *src_config,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200845 PyThreadState **tstate_p)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200846{
Victor Stinner331a6a52019-05-27 16:39:22 +0200847 PyStatus status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200848
Victor Stinner331a6a52019-05-27 16:39:22 +0200849 status = _Py_PreInitializeFromConfig(src_config, NULL);
850 if (_PyStatus_EXCEPTION(status)) {
851 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200852 }
853
Victor Stinner331a6a52019-05-27 16:39:22 +0200854 PyConfig config;
Victor Stinner441b10c2019-09-28 04:28:35 +0200855 config.struct_size = sizeof(PyConfig);
856
857 status = _PyConfig_InitCompatConfig(&config);
858 if (_PyStatus_EXCEPTION(status)) {
859 goto done;
860 }
Victor Stinner5edcf262019-05-23 00:57:57 +0200861
Victor Stinner331a6a52019-05-27 16:39:22 +0200862 status = _PyConfig_Copy(&config, src_config);
863 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200864 goto done;
865 }
866
Victor Stinner331a6a52019-05-27 16:39:22 +0200867 status = PyConfig_Read(&config);
868 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200869 goto done;
870 }
871
872 if (!runtime->core_initialized) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200873 status = pyinit_config(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200874 }
875 else {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200876 status = pyinit_core_reconfigure(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200877 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200878 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200879 goto done;
880 }
881
882done:
Victor Stinner331a6a52019-05-27 16:39:22 +0200883 PyConfig_Clear(&config);
884 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200885}
886
Victor Stinner5ac27a52019-03-27 13:40:14 +0100887
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200888/* Py_Initialize() has already been called: update the main interpreter
889 configuration. Example of bpo-34008: Py_Main() called after
890 Py_Initialize(). */
Victor Stinner331a6a52019-05-27 16:39:22 +0200891static PyStatus
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100892_Py_ReconfigureMainInterpreter(PyInterpreterState *interp)
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200893{
Victor Stinner331a6a52019-05-27 16:39:22 +0200894 PyConfig *config = &interp->config;
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100895
Victor Stinner331a6a52019-05-27 16:39:22 +0200896 PyObject *argv = _PyWideStringList_AsList(&config->argv);
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100897 if (argv == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200898 return _PyStatus_NO_MEMORY(); \
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100899 }
900
901 int res = PyDict_SetItemString(interp->sysdict, "argv", argv);
902 Py_DECREF(argv);
903 if (res < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200904 return _PyStatus_ERR("fail to set sys.argv");
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200905 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200906 return _PyStatus_OK();
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200907}
908
Eric Snowc7ec9982017-05-23 23:00:52 -0700909/* Update interpreter state based on supplied configuration settings
910 *
911 * After calling this function, most of the restrictions on the interpreter
912 * are lifted. The only remaining incomplete settings are those related
913 * to the main module (sys.argv[0], __main__ metadata)
914 *
915 * Calling this when the interpreter is not initializing, is already
916 * initialized or without a valid current thread state is a fatal error.
917 * Other errors should be reported as normal Python exceptions with a
918 * non-zero return code.
919 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200920static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200921pyinit_main(_PyRuntimeState *runtime, PyThreadState *tstate)
Eric Snow1abcf672017-05-23 21:46:51 -0700922{
Victor Stinner43125222019-04-24 18:23:53 +0200923 if (!runtime->core_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200924 return _PyStatus_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700925 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700926
Victor Stinner1dc6e392018-07-25 02:49:17 +0200927 /* Configure the main interpreter */
Victor Stinnerb45d2592019-06-20 00:05:23 +0200928 PyInterpreterState *interp = tstate->interp;
Victor Stinner331a6a52019-05-27 16:39:22 +0200929 PyConfig *config = &interp->config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700930
Victor Stinner43125222019-04-24 18:23:53 +0200931 if (runtime->initialized) {
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100932 return _Py_ReconfigureMainInterpreter(interp);
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200933 }
934
Victor Stinner331a6a52019-05-27 16:39:22 +0200935 if (!config->_install_importlib) {
Eric Snow1abcf672017-05-23 21:46:51 -0700936 /* Special mode for freeze_importlib: run with no import system
937 *
938 * This means anything which needs support from extension modules
939 * or pure Python code in the standard library won't work.
940 */
Victor Stinner43125222019-04-24 18:23:53 +0200941 runtime->initialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200942 return _PyStatus_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700943 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100944
Victor Stinner33c377e2017-12-05 15:12:41 +0100945 if (_PyTime_Init() < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200946 return _PyStatus_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100947 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200948
Victor Stinner838f2642019-06-13 22:41:23 +0200949 if (_PySys_InitMain(runtime, tstate) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200950 return _PyStatus_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100951 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800952
Victor Stinner0a28f8d2019-06-19 02:54:39 +0200953 PyStatus status = init_importlib_external(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200954 if (_PyStatus_EXCEPTION(status)) {
955 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800956 }
Nick Coghland6009512014-11-20 21:39:37 +1000957
958 /* initialize the faulthandler module */
Victor Stinner331a6a52019-05-27 16:39:22 +0200959 status = _PyFaulthandler_Init(config->faulthandler);
960 if (_PyStatus_EXCEPTION(status)) {
961 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800962 }
Nick Coghland6009512014-11-20 21:39:37 +1000963
Victor Stinnerb45d2592019-06-20 00:05:23 +0200964 status = _PyUnicode_InitEncodings(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200965 if (_PyStatus_EXCEPTION(status)) {
966 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800967 }
Nick Coghland6009512014-11-20 21:39:37 +1000968
Victor Stinner331a6a52019-05-27 16:39:22 +0200969 if (config->install_signal_handlers) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200970 status = init_signals(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200971 if (_PyStatus_EXCEPTION(status)) {
972 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800973 }
974 }
Nick Coghland6009512014-11-20 21:39:37 +1000975
Victor Stinner331a6a52019-05-27 16:39:22 +0200976 if (_PyTraceMalloc_Init(config->tracemalloc) < 0) {
977 return _PyStatus_ERR("can't initialize tracemalloc");
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200978 }
Nick Coghland6009512014-11-20 21:39:37 +1000979
Victor Stinner331a6a52019-05-27 16:39:22 +0200980 status = add_main_module(interp);
981 if (_PyStatus_EXCEPTION(status)) {
982 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800983 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800984
Victor Stinnerb45d2592019-06-20 00:05:23 +0200985 status = init_sys_streams(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200986 if (_PyStatus_EXCEPTION(status)) {
987 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800988 }
Nick Coghland6009512014-11-20 21:39:37 +1000989
990 /* Initialize warnings. */
Victor Stinner37cd9822018-11-16 11:55:35 +0100991 PyObject *warnoptions = PySys_GetObject("warnoptions");
992 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
Victor Stinner5d862462017-12-19 11:35:58 +0100993 {
Nick Coghland6009512014-11-20 21:39:37 +1000994 PyObject *warnings_module = PyImport_ImportModule("warnings");
995 if (warnings_module == NULL) {
996 fprintf(stderr, "'import warnings' failed; traceback:\n");
Victor Stinnerb45d2592019-06-20 00:05:23 +0200997 _PyErr_Print(tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000998 }
999 Py_XDECREF(warnings_module);
1000 }
1001
Victor Stinner43125222019-04-24 18:23:53 +02001002 runtime->initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -07001003
Victor Stinner331a6a52019-05-27 16:39:22 +02001004 if (config->site_import) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02001005 status = init_import_site();
Victor Stinner331a6a52019-05-27 16:39:22 +02001006 if (_PyStatus_EXCEPTION(status)) {
1007 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001008 }
1009 }
Victor Stinnercf215042018-08-29 22:56:06 +02001010
1011#ifndef MS_WINDOWS
Victor Stinner43125222019-04-24 18:23:53 +02001012 emit_stderr_warning_for_legacy_locale(runtime);
Victor Stinnercf215042018-08-29 22:56:06 +02001013#endif
1014
Victor Stinner331a6a52019-05-27 16:39:22 +02001015 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001016}
1017
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001018
Victor Stinner331a6a52019-05-27 16:39:22 +02001019PyStatus
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001020_Py_InitializeMain(void)
1021{
Victor Stinner331a6a52019-05-27 16:39:22 +02001022 PyStatus status = _PyRuntime_Initialize();
1023 if (_PyStatus_EXCEPTION(status)) {
1024 return status;
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001025 }
1026 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinnerb45d2592019-06-20 00:05:23 +02001027 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
1028 return pyinit_main(runtime, tstate);
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001029}
1030
1031
Victor Stinner331a6a52019-05-27 16:39:22 +02001032PyStatus
1033Py_InitializeFromConfig(const PyConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -07001034{
Victor Stinner6d1c4672019-05-20 11:02:00 +02001035 if (config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001036 return _PyStatus_ERR("initialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +02001037 }
1038
Victor Stinner331a6a52019-05-27 16:39:22 +02001039 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001040
Victor Stinner331a6a52019-05-27 16:39:22 +02001041 status = _PyRuntime_Initialize();
1042 if (_PyStatus_EXCEPTION(status)) {
1043 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001044 }
1045 _PyRuntimeState *runtime = &_PyRuntime;
1046
Victor Stinnerb45d2592019-06-20 00:05:23 +02001047 PyThreadState *tstate = NULL;
1048 status = pyinit_core(runtime, config, &tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001049 if (_PyStatus_EXCEPTION(status)) {
1050 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001051 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001052 config = &tstate->interp->config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +01001053
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001054 if (config->_init_main) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02001055 status = pyinit_main(runtime, tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001056 if (_PyStatus_EXCEPTION(status)) {
1057 return status;
Victor Stinner484f20d2019-03-27 02:04:16 +01001058 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001059 }
Victor Stinner484f20d2019-03-27 02:04:16 +01001060
Victor Stinner331a6a52019-05-27 16:39:22 +02001061 return _PyStatus_OK();
Victor Stinner5ac27a52019-03-27 13:40:14 +01001062}
1063
1064
Eric Snow1abcf672017-05-23 21:46:51 -07001065void
Nick Coghland6009512014-11-20 21:39:37 +10001066Py_InitializeEx(int install_sigs)
1067{
Victor Stinner331a6a52019-05-27 16:39:22 +02001068 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001069
Victor Stinner331a6a52019-05-27 16:39:22 +02001070 status = _PyRuntime_Initialize();
1071 if (_PyStatus_EXCEPTION(status)) {
1072 Py_ExitStatusException(status);
Victor Stinner43125222019-04-24 18:23:53 +02001073 }
1074 _PyRuntimeState *runtime = &_PyRuntime;
1075
1076 if (runtime->initialized) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001077 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
1078 return;
1079 }
1080
Victor Stinner331a6a52019-05-27 16:39:22 +02001081 PyConfig config;
Victor Stinner441b10c2019-09-28 04:28:35 +02001082 config.struct_size = sizeof(PyConfig);
1083
1084 status = _PyConfig_InitCompatConfig(&config);
1085 if (_PyStatus_EXCEPTION(status)) {
1086 Py_ExitStatusException(status);
1087 }
1088
Victor Stinner1dc6e392018-07-25 02:49:17 +02001089 config.install_signal_handlers = install_sigs;
1090
Victor Stinner331a6a52019-05-27 16:39:22 +02001091 status = Py_InitializeFromConfig(&config);
1092 if (_PyStatus_EXCEPTION(status)) {
1093 Py_ExitStatusException(status);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001094 }
Nick Coghland6009512014-11-20 21:39:37 +10001095}
1096
1097void
1098Py_Initialize(void)
1099{
1100 Py_InitializeEx(1);
1101}
1102
1103
1104#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001105extern void _Py_dump_counts(FILE*);
Nick Coghland6009512014-11-20 21:39:37 +10001106#endif
1107
1108/* Flush stdout and stderr */
1109
1110static int
1111file_is_closed(PyObject *fobj)
1112{
1113 int r;
1114 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1115 if (tmp == NULL) {
1116 PyErr_Clear();
1117 return 0;
1118 }
1119 r = PyObject_IsTrue(tmp);
1120 Py_DECREF(tmp);
1121 if (r < 0)
1122 PyErr_Clear();
1123 return r > 0;
1124}
1125
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001126static int
Nick Coghland6009512014-11-20 21:39:37 +10001127flush_std_files(void)
1128{
1129 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1130 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1131 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001132 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001133
1134 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001135 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001136 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001137 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001138 status = -1;
1139 }
Nick Coghland6009512014-11-20 21:39:37 +10001140 else
1141 Py_DECREF(tmp);
1142 }
1143
1144 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001145 tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001146 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001147 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001148 status = -1;
1149 }
Nick Coghland6009512014-11-20 21:39:37 +10001150 else
1151 Py_DECREF(tmp);
1152 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001153
1154 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001155}
1156
1157/* Undo the effect of Py_Initialize().
1158
1159 Beware: if multiple interpreter and/or thread states exist, these
1160 are not wiped out; only the current thread and interpreter state
1161 are deleted. But since everything else is deleted, those other
1162 interpreter and thread states should no longer be used.
1163
1164 (XXX We should do better, e.g. wipe out all interpreters and
1165 threads.)
1166
1167 Locking: as above.
1168
1169*/
1170
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001171int
1172Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001173{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001174 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001175
Victor Stinner8e91c242019-04-24 17:24:01 +02001176 _PyRuntimeState *runtime = &_PyRuntime;
1177 if (!runtime->initialized) {
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001178 return status;
Victor Stinner8e91c242019-04-24 17:24:01 +02001179 }
Nick Coghland6009512014-11-20 21:39:37 +10001180
Victor Stinnere225beb2019-06-03 18:14:24 +02001181 /* Get current thread state and interpreter pointer */
1182 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
1183 PyInterpreterState *interp = tstate->interp;
Victor Stinner8e91c242019-04-24 17:24:01 +02001184
Victor Stinnerb45d2592019-06-20 00:05:23 +02001185 // Wrap up existing "threading"-module-created, non-daemon threads.
1186 wait_for_thread_shutdown(tstate);
1187
1188 // Make any remaining pending calls.
1189 _Py_FinishPendingCalls(runtime);
1190
Nick Coghland6009512014-11-20 21:39:37 +10001191 /* The interpreter is still entirely intact at this point, and the
1192 * exit funcs may be relying on that. In particular, if some thread
1193 * or exit func is still waiting to do an import, the import machinery
1194 * expects Py_IsInitialized() to return true. So don't say the
Eric Snow842a2f02019-03-15 15:47:51 -06001195 * runtime is uninitialized until after the exit funcs have run.
Nick Coghland6009512014-11-20 21:39:37 +10001196 * Note that Threading.py uses an exit func to do a join on all the
1197 * threads created thru it, so this also protects pending imports in
1198 * the threads created via Threading.
1199 */
Nick Coghland6009512014-11-20 21:39:37 +10001200
Victor Stinnerb45d2592019-06-20 00:05:23 +02001201 call_py_exitfuncs(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001202
Victor Stinnerda273412017-12-15 01:46:02 +01001203 /* Copy the core config, PyInterpreterState_Delete() free
1204 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001205#ifdef Py_REF_DEBUG
Victor Stinner331a6a52019-05-27 16:39:22 +02001206 int show_ref_count = interp->config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001207#endif
1208#ifdef Py_TRACE_REFS
Victor Stinner331a6a52019-05-27 16:39:22 +02001209 int dump_refs = interp->config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001210#endif
1211#ifdef WITH_PYMALLOC
Victor Stinner331a6a52019-05-27 16:39:22 +02001212 int malloc_stats = interp->config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001213#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001214
Nick Coghland6009512014-11-20 21:39:37 +10001215 /* Remaining threads (e.g. daemon threads) will automatically exit
1216 after taking the GIL (in PyEval_RestoreThread()). */
Victor Stinner8e91c242019-04-24 17:24:01 +02001217 runtime->finalizing = tstate;
1218 runtime->initialized = 0;
1219 runtime->core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001220
Victor Stinnere0deff32015-03-24 13:46:18 +01001221 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001222 if (flush_std_files() < 0) {
1223 status = -1;
1224 }
Nick Coghland6009512014-11-20 21:39:37 +10001225
1226 /* Disable signal handling */
1227 PyOS_FiniInterrupts();
1228
1229 /* Collect garbage. This may call finalizers; it's nice to call these
1230 * before all modules are destroyed.
1231 * XXX If a __del__ or weakref callback is triggered here, and tries to
1232 * XXX import a module, bad things can happen, because Python no
1233 * XXX longer believes it's initialized.
1234 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1235 * XXX is easy to provoke that way. I've also seen, e.g.,
1236 * XXX Exception exceptions.ImportError: 'No module named sha'
1237 * XXX in <function callback at 0x008F5718> ignored
1238 * XXX but I'm unclear on exactly how that one happens. In any case,
1239 * XXX I haven't seen a real-life report of either of these.
1240 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001241 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001242#ifdef COUNT_ALLOCS
1243 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1244 each collection might release some types from the type
1245 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001246 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001247 /* nothing */;
1248#endif
Eric Snowdae02762017-09-14 00:35:58 -07001249
Steve Dowerb82e17e2019-05-23 08:45:22 -07001250 /* Clear all loghooks */
1251 /* We want minimal exposure of this function, so define the extern
1252 * here. The linker should discover the correct function without
1253 * exporting a symbol. */
1254 extern void _PySys_ClearAuditHooks(void);
1255 _PySys_ClearAuditHooks();
1256
Nick Coghland6009512014-11-20 21:39:37 +10001257 /* Destroy all modules */
Victor Stinner987a0dc2019-06-19 10:36:10 +02001258 _PyImport_Cleanup(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001259
Inada Naoki91234a12019-06-03 21:30:58 +09001260 /* Print debug stats if any */
1261 _PyEval_Fini();
1262
Victor Stinnere0deff32015-03-24 13:46:18 +01001263 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001264 if (flush_std_files() < 0) {
1265 status = -1;
1266 }
Nick Coghland6009512014-11-20 21:39:37 +10001267
1268 /* Collect final garbage. This disposes of cycles created by
1269 * class definitions, for example.
1270 * XXX This is disabled because it caused too many problems. If
1271 * XXX a __del__ or weakref callback triggers here, Python code has
1272 * XXX a hard time running, because even the sys module has been
1273 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1274 * XXX One symptom is a sequence of information-free messages
1275 * XXX coming from threads (if a __del__ or callback is invoked,
1276 * XXX other threads can execute too, and any exception they encounter
1277 * XXX triggers a comedy of errors as subsystem after subsystem
1278 * XXX fails to find what it *expects* to find in sys to help report
1279 * XXX the exception and consequent unexpected failures). I've also
1280 * XXX seen segfaults then, after adding print statements to the
1281 * XXX Python code getting called.
1282 */
1283#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001284 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001285#endif
1286
1287 /* Disable tracemalloc after all Python objects have been destroyed,
1288 so it is possible to use tracemalloc in objects destructor. */
1289 _PyTraceMalloc_Fini();
1290
1291 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1292 _PyImport_Fini();
1293
1294 /* Cleanup typeobject.c's internal caches. */
1295 _PyType_Fini();
1296
1297 /* unload faulthandler module */
1298 _PyFaulthandler_Fini();
1299
1300 /* Debugging stuff */
1301#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001302 _Py_dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001303#endif
1304 /* dump hash stats */
1305 _PyHash_Fini();
1306
Eric Snowdae02762017-09-14 00:35:58 -07001307#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001308 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001309 _PyDebug_PrintTotalRefs();
1310 }
Eric Snowdae02762017-09-14 00:35:58 -07001311#endif
Nick Coghland6009512014-11-20 21:39:37 +10001312
1313#ifdef Py_TRACE_REFS
1314 /* Display all objects still alive -- this can invoke arbitrary
1315 * __repr__ overrides, so requires a mostly-intact interpreter.
1316 * Alas, a lot of stuff may still be alive now that will be cleaned
1317 * up later.
1318 */
Victor Stinnerda273412017-12-15 01:46:02 +01001319 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001320 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001321 }
Nick Coghland6009512014-11-20 21:39:37 +10001322#endif /* Py_TRACE_REFS */
1323
1324 /* Clear interpreter state and all thread states. */
1325 PyInterpreterState_Clear(interp);
1326
1327 /* Now we decref the exception classes. After this point nothing
1328 can raise an exception. That's okay, because each Fini() method
1329 below has been checked to make sure no exceptions are ever
1330 raised.
1331 */
1332
1333 _PyExc_Fini();
1334
1335 /* Sundry finalizers */
Victor Stinnerbed48172019-08-27 00:12:32 +02001336 _PyMethod_Fini();
1337 _PyFrame_Fini();
1338 _PyCFunction_Fini();
1339 _PyTuple_Fini();
1340 _PyList_Fini();
1341 _PySet_Fini();
1342 _PyBytes_Fini();
1343 _PyLong_Fini();
1344 _PyFloat_Fini();
1345 _PyDict_Fini();
1346 _PySlice_Fini();
Victor Stinner8e91c242019-04-24 17:24:01 +02001347 _PyGC_Fini(runtime);
Eric Snow86ea5812019-05-10 13:29:55 -04001348 _PyWarnings_Fini(interp);
Eric Snow6b4be192017-05-22 21:36:03 -07001349 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001350 _PyArg_Fini();
Victor Stinnerbed48172019-08-27 00:12:32 +02001351 _PyAsyncGen_Fini();
Yury Selivanovf23746a2018-01-22 19:11:18 -05001352 _PyContext_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001353
1354 /* Cleanup Unicode implementation */
1355 _PyUnicode_Fini();
1356
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001357 _Py_ClearFileSystemEncoding();
Nick Coghland6009512014-11-20 21:39:37 +10001358
1359 /* XXX Still allocated:
1360 - various static ad-hoc pointers to interned strings
1361 - int and float free list blocks
1362 - whatever various modules and libraries allocate
1363 */
1364
1365 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1366
1367 /* Cleanup auto-thread-state */
Victor Stinner8e91c242019-04-24 17:24:01 +02001368 _PyGILState_Fini(runtime);
Nick Coghland6009512014-11-20 21:39:37 +10001369
1370 /* Delete current thread. After this, many C API calls become crashy. */
1371 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001372
Nick Coghland6009512014-11-20 21:39:37 +10001373 PyInterpreterState_Delete(interp);
1374
1375#ifdef Py_TRACE_REFS
1376 /* Display addresses (& refcnts) of all objects still alive.
1377 * An address can be used to find the repr of the object, printed
1378 * above by _Py_PrintReferences.
1379 */
Victor Stinnerda273412017-12-15 01:46:02 +01001380 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001381 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001382 }
Nick Coghland6009512014-11-20 21:39:37 +10001383#endif /* Py_TRACE_REFS */
Victor Stinner34be807c2016-03-14 12:04:26 +01001384#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001385 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001386 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be807c2016-03-14 12:04:26 +01001387 }
Nick Coghland6009512014-11-20 21:39:37 +10001388#endif
1389
Victor Stinner8e91c242019-04-24 17:24:01 +02001390 call_ll_exitfuncs(runtime);
Victor Stinner9316ee42017-11-25 03:17:57 +01001391
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001392 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001393 return status;
1394}
1395
1396void
1397Py_Finalize(void)
1398{
1399 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001400}
1401
1402/* Create and initialize a new interpreter and thread, and return the
1403 new thread. This requires that Py_Initialize() has been called
1404 first.
1405
1406 Unsuccessful initialization yields a NULL pointer. Note that *no*
1407 exception information is available even in this case -- the
1408 exception information is held in the thread, and there is no
1409 thread.
1410
1411 Locking: as above.
1412
1413*/
1414
Victor Stinner331a6a52019-05-27 16:39:22 +02001415static PyStatus
Victor Stinnera7368ac2017-11-15 18:11:45 -08001416new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001417{
Victor Stinner331a6a52019-05-27 16:39:22 +02001418 PyStatus status;
Nick Coghland6009512014-11-20 21:39:37 +10001419
Victor Stinner331a6a52019-05-27 16:39:22 +02001420 status = _PyRuntime_Initialize();
1421 if (_PyStatus_EXCEPTION(status)) {
1422 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001423 }
1424 _PyRuntimeState *runtime = &_PyRuntime;
1425
1426 if (!runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001427 return _PyStatus_ERR("Py_Initialize must be called first");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001428 }
Nick Coghland6009512014-11-20 21:39:37 +10001429
Victor Stinner8a1be612016-03-14 22:07:55 +01001430 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1431 interpreters: disable PyGILState_Check(). */
1432 _PyGILState_check_enabled = 0;
1433
Victor Stinner43125222019-04-24 18:23:53 +02001434 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001435 if (interp == NULL) {
1436 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001437 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001438 }
Nick Coghland6009512014-11-20 21:39:37 +10001439
Victor Stinner43125222019-04-24 18:23:53 +02001440 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001441 if (tstate == NULL) {
1442 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001443 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001444 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001445 }
1446
Victor Stinner43125222019-04-24 18:23:53 +02001447 PyThreadState *save_tstate = PyThreadState_Swap(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001448
Eric Snow1abcf672017-05-23 21:46:51 -07001449 /* Copy the current interpreter config into the new interpreter */
Victor Stinner331a6a52019-05-27 16:39:22 +02001450 PyConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001451 if (save_tstate != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001452 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001453 } else {
1454 /* No current thread state, copy from the main interpreter */
1455 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinner331a6a52019-05-27 16:39:22 +02001456 config = &main_interp->config;
Victor Stinnerda273412017-12-15 01:46:02 +01001457 }
1458
Victor Stinner331a6a52019-05-27 16:39:22 +02001459 status = _PyConfig_Copy(&interp->config, config);
1460 if (_PyStatus_EXCEPTION(status)) {
1461 return status;
Victor Stinnerda273412017-12-15 01:46:02 +01001462 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001463 config = &interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001464
Victor Stinner331a6a52019-05-27 16:39:22 +02001465 status = _PyExc_Init();
1466 if (_PyStatus_EXCEPTION(status)) {
1467 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001468 }
1469
Victor Stinner331a6a52019-05-27 16:39:22 +02001470 status = _PyErr_Init();
1471 if (_PyStatus_EXCEPTION(status)) {
1472 return status;
Victor Stinneref9d9b62019-05-22 11:28:22 +02001473 }
1474
1475
Nick Coghland6009512014-11-20 21:39:37 +10001476 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001477 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001478 if (modules == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001479 return _PyStatus_ERR("can't make modules dictionary");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001480 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001481 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001482
Victor Stinner0a28f8d2019-06-19 02:54:39 +02001483 PyObject *sysmod = _PyImport_FindBuiltin(tstate, "sys");
Eric Snowd393c1b2017-09-14 12:18:12 -06001484 if (sysmod != NULL) {
1485 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinner43125222019-04-24 18:23:53 +02001486 if (interp->sysdict == NULL) {
Eric Snowd393c1b2017-09-14 12:18:12 -06001487 goto handle_error;
Victor Stinner43125222019-04-24 18:23:53 +02001488 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001489 Py_INCREF(interp->sysdict);
1490 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner838f2642019-06-13 22:41:23 +02001491 if (_PySys_InitMain(runtime, tstate) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001492 return _PyStatus_ERR("can't finish initializing sys");
Victor Stinnerab672812019-01-23 15:04:40 +01001493 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001494 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001495 else if (_PyErr_Occurred(tstate)) {
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001496 goto handle_error;
1497 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001498
Victor Stinner0a28f8d2019-06-19 02:54:39 +02001499 PyObject *bimod = _PyImport_FindBuiltin(tstate, "builtins");
Nick Coghland6009512014-11-20 21:39:37 +10001500 if (bimod != NULL) {
1501 interp->builtins = PyModule_GetDict(bimod);
1502 if (interp->builtins == NULL)
1503 goto handle_error;
1504 Py_INCREF(interp->builtins);
1505 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001506 else if (_PyErr_Occurred(tstate)) {
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001507 goto handle_error;
1508 }
Nick Coghland6009512014-11-20 21:39:37 +10001509
Nick Coghland6009512014-11-20 21:39:37 +10001510 if (bimod != NULL && sysmod != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001511 status = _PyBuiltins_AddExceptions(bimod);
1512 if (_PyStatus_EXCEPTION(status)) {
1513 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001514 }
Nick Coghland6009512014-11-20 21:39:37 +10001515
Victor Stinner331a6a52019-05-27 16:39:22 +02001516 status = _PySys_SetPreliminaryStderr(interp->sysdict);
1517 if (_PyStatus_EXCEPTION(status)) {
1518 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001519 }
Nick Coghland6009512014-11-20 21:39:37 +10001520
Victor Stinnerb45d2592019-06-20 00:05:23 +02001521 status = _PyImportHooks_Init(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001522 if (_PyStatus_EXCEPTION(status)) {
1523 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001524 }
Nick Coghland6009512014-11-20 21:39:37 +10001525
Victor Stinnerb45d2592019-06-20 00:05:23 +02001526 status = init_importlib(tstate, sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +02001527 if (_PyStatus_EXCEPTION(status)) {
1528 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001529 }
Nick Coghland6009512014-11-20 21:39:37 +10001530
Victor Stinner0a28f8d2019-06-19 02:54:39 +02001531 status = init_importlib_external(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001532 if (_PyStatus_EXCEPTION(status)) {
1533 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001534 }
Nick Coghland6009512014-11-20 21:39:37 +10001535
Victor Stinnerb45d2592019-06-20 00:05:23 +02001536 status = _PyUnicode_InitEncodings(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001537 if (_PyStatus_EXCEPTION(status)) {
1538 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001539 }
1540
Victor Stinnerb45d2592019-06-20 00:05:23 +02001541 status = init_sys_streams(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001542 if (_PyStatus_EXCEPTION(status)) {
1543 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001544 }
1545
Victor Stinner331a6a52019-05-27 16:39:22 +02001546 status = add_main_module(interp);
1547 if (_PyStatus_EXCEPTION(status)) {
1548 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001549 }
1550
Victor Stinner331a6a52019-05-27 16:39:22 +02001551 if (config->site_import) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02001552 status = init_import_site();
Victor Stinner331a6a52019-05-27 16:39:22 +02001553 if (_PyStatus_EXCEPTION(status)) {
1554 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001555 }
1556 }
Nick Coghland6009512014-11-20 21:39:37 +10001557 }
1558
Victor Stinnerb45d2592019-06-20 00:05:23 +02001559 if (_PyErr_Occurred(tstate)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001560 goto handle_error;
1561 }
Nick Coghland6009512014-11-20 21:39:37 +10001562
Victor Stinnera7368ac2017-11-15 18:11:45 -08001563 *tstate_p = tstate;
Victor Stinner331a6a52019-05-27 16:39:22 +02001564 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001565
Nick Coghland6009512014-11-20 21:39:37 +10001566handle_error:
1567 /* Oops, it didn't work. Undo it all. */
1568
1569 PyErr_PrintEx(0);
1570 PyThreadState_Clear(tstate);
1571 PyThreadState_Swap(save_tstate);
1572 PyThreadState_Delete(tstate);
1573 PyInterpreterState_Delete(interp);
1574
Victor Stinnera7368ac2017-11-15 18:11:45 -08001575 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001576 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001577}
1578
1579PyThreadState *
1580Py_NewInterpreter(void)
1581{
Stéphane Wirtel9e06d2b2019-03-18 17:10:29 +01001582 PyThreadState *tstate = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001583 PyStatus status = new_interpreter(&tstate);
1584 if (_PyStatus_EXCEPTION(status)) {
1585 Py_ExitStatusException(status);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001586 }
1587 return tstate;
1588
Nick Coghland6009512014-11-20 21:39:37 +10001589}
1590
1591/* Delete an interpreter and its last thread. This requires that the
1592 given thread state is current, that the thread has no remaining
1593 frames, and that it is its interpreter's only remaining thread.
1594 It is a fatal error to violate these constraints.
1595
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001596 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001597 everything, regardless.)
1598
1599 Locking: as above.
1600
1601*/
1602
1603void
1604Py_EndInterpreter(PyThreadState *tstate)
1605{
1606 PyInterpreterState *interp = tstate->interp;
1607
Victor Stinnerb45d2592019-06-20 00:05:23 +02001608 if (tstate != _PyThreadState_GET()) {
Nick Coghland6009512014-11-20 21:39:37 +10001609 Py_FatalError("Py_EndInterpreter: thread is not current");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001610 }
1611 if (tstate->frame != NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001612 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001613 }
Eric Snow5be45a62019-03-08 22:47:07 -07001614 interp->finalizing = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001615
Eric Snow842a2f02019-03-15 15:47:51 -06001616 // Wrap up existing "threading"-module-created, non-daemon threads.
Victor Stinnerb45d2592019-06-20 00:05:23 +02001617 wait_for_thread_shutdown(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001618
Victor Stinnerb45d2592019-06-20 00:05:23 +02001619 call_py_exitfuncs(tstate);
Marcel Plch776407f2017-12-20 11:17:58 +01001620
Victor Stinnerb45d2592019-06-20 00:05:23 +02001621 if (tstate != interp->tstate_head || tstate->next != NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001622 Py_FatalError("Py_EndInterpreter: not the last thread");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001623 }
Nick Coghland6009512014-11-20 21:39:37 +10001624
Victor Stinner987a0dc2019-06-19 10:36:10 +02001625 _PyImport_Cleanup(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001626 PyInterpreterState_Clear(interp);
1627 PyThreadState_Swap(NULL);
1628 PyInterpreterState_Delete(interp);
1629}
1630
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001631/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001632
Victor Stinner331a6a52019-05-27 16:39:22 +02001633static PyStatus
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001634add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001635{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001636 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001637 m = PyImport_AddModule("__main__");
1638 if (m == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +02001639 return _PyStatus_ERR("can't create __main__ module");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001640
Nick Coghland6009512014-11-20 21:39:37 +10001641 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001642 ann_dict = PyDict_New();
1643 if ((ann_dict == NULL) ||
1644 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001645 return _PyStatus_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001646 }
1647 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001648
Nick Coghland6009512014-11-20 21:39:37 +10001649 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1650 PyObject *bimod = PyImport_ImportModule("builtins");
1651 if (bimod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001652 return _PyStatus_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001653 }
1654 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001655 return _PyStatus_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001656 }
1657 Py_DECREF(bimod);
1658 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001659
Nick Coghland6009512014-11-20 21:39:37 +10001660 /* Main is a little special - imp.is_builtin("__main__") will return
1661 * False, but BuiltinImporter is still the most appropriate initial
1662 * setting for its __loader__ attribute. A more suitable value will
1663 * be set if __main__ gets further initialized later in the startup
1664 * process.
1665 */
1666 loader = PyDict_GetItemString(d, "__loader__");
1667 if (loader == NULL || loader == Py_None) {
1668 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1669 "BuiltinImporter");
1670 if (loader == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001671 return _PyStatus_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001672 }
1673 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001674 return _PyStatus_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001675 }
1676 Py_DECREF(loader);
1677 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001678 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001679}
1680
Nick Coghland6009512014-11-20 21:39:37 +10001681/* Import the site module (not into __main__ though) */
1682
Victor Stinner331a6a52019-05-27 16:39:22 +02001683static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001684init_import_site(void)
Nick Coghland6009512014-11-20 21:39:37 +10001685{
1686 PyObject *m;
1687 m = PyImport_ImportModule("site");
1688 if (m == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001689 return _PyStatus_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001690 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001691 Py_DECREF(m);
Victor Stinner331a6a52019-05-27 16:39:22 +02001692 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001693}
1694
Victor Stinner874dbe82015-09-04 17:29:57 +02001695/* Check if a file descriptor is valid or not.
1696 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1697static int
1698is_valid_fd(int fd)
1699{
Victor Stinner3092d6b2019-04-17 18:09:12 +02001700/* dup() is faster than fstat(): fstat() can require input/output operations,
1701 whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python
1702 startup. Problem: dup() doesn't check if the file descriptor is valid on
1703 some platforms.
1704
1705 bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other
1706 side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with
1707 EBADF. FreeBSD has similar issue (bpo-32849).
1708
1709 Only use dup() on platforms where dup() is enough to detect invalid FD in
1710 corner cases: on Linux and Windows (bpo-32849). */
1711#if defined(__linux__) || defined(MS_WINDOWS)
1712 if (fd < 0) {
1713 return 0;
1714 }
1715 int fd2;
1716
1717 _Py_BEGIN_SUPPRESS_IPH
1718 fd2 = dup(fd);
1719 if (fd2 >= 0) {
1720 close(fd2);
1721 }
1722 _Py_END_SUPPRESS_IPH
1723
1724 return (fd2 >= 0);
1725#else
Victor Stinner1c4670e2017-05-04 00:45:56 +02001726 struct stat st;
1727 return (fstat(fd, &st) == 0);
Victor Stinner1c4670e2017-05-04 00:45:56 +02001728#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001729}
1730
1731/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001732static PyObject*
Victor Stinner331a6a52019-05-27 16:39:22 +02001733create_stdio(const PyConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001734 int fd, int write_mode, const char* name,
Victor Stinner709d23d2019-05-02 14:56:30 -04001735 const wchar_t* encoding, const wchar_t* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001736{
1737 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1738 const char* mode;
1739 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001740 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001741 int buffering, isatty;
1742 _Py_IDENTIFIER(open);
1743 _Py_IDENTIFIER(isatty);
1744 _Py_IDENTIFIER(TextIOWrapper);
1745 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001746 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001747
Victor Stinner874dbe82015-09-04 17:29:57 +02001748 if (!is_valid_fd(fd))
1749 Py_RETURN_NONE;
1750
Nick Coghland6009512014-11-20 21:39:37 +10001751 /* stdin is always opened in buffered mode, first because it shouldn't
1752 make a difference in common use cases, second because TextIOWrapper
1753 depends on the presence of a read1() method which only exists on
1754 buffered streams.
1755 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001756 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001757 buffering = 0;
1758 else
1759 buffering = -1;
1760 if (write_mode)
1761 mode = "wb";
1762 else
1763 mode = "rb";
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001764 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOO",
Nick Coghland6009512014-11-20 21:39:37 +10001765 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001766 Py_None, Py_None, /* encoding, errors */
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001767 Py_None, Py_False); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001768 if (buf == NULL)
1769 goto error;
1770
1771 if (buffering) {
1772 _Py_IDENTIFIER(raw);
1773 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1774 if (raw == NULL)
1775 goto error;
1776 }
1777 else {
1778 raw = buf;
1779 Py_INCREF(raw);
1780 }
1781
Steve Dower39294992016-08-30 21:22:36 -07001782#ifdef MS_WINDOWS
1783 /* Windows console IO is always UTF-8 encoded */
1784 if (PyWindowsConsoleIO_Check(raw))
Victor Stinner709d23d2019-05-02 14:56:30 -04001785 encoding = L"utf-8";
Steve Dower39294992016-08-30 21:22:36 -07001786#endif
1787
Nick Coghland6009512014-11-20 21:39:37 +10001788 text = PyUnicode_FromString(name);
1789 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1790 goto error;
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001791 res = _PyObject_CallMethodIdNoArgs(raw, &PyId_isatty);
Nick Coghland6009512014-11-20 21:39:37 +10001792 if (res == NULL)
1793 goto error;
1794 isatty = PyObject_IsTrue(res);
1795 Py_DECREF(res);
1796 if (isatty == -1)
1797 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001798 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001799 write_through = Py_True;
1800 else
1801 write_through = Py_False;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001802 if (isatty && buffered_stdio)
Nick Coghland6009512014-11-20 21:39:37 +10001803 line_buffering = Py_True;
1804 else
1805 line_buffering = Py_False;
1806
1807 Py_CLEAR(raw);
1808 Py_CLEAR(text);
1809
1810#ifdef MS_WINDOWS
1811 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1812 newlines to "\n".
1813 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1814 newline = NULL;
1815#else
1816 /* sys.stdin: split lines at "\n".
1817 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1818 newline = "\n";
1819#endif
1820
Victor Stinner709d23d2019-05-02 14:56:30 -04001821 PyObject *encoding_str = PyUnicode_FromWideChar(encoding, -1);
1822 if (encoding_str == NULL) {
1823 Py_CLEAR(buf);
1824 goto error;
1825 }
1826
1827 PyObject *errors_str = PyUnicode_FromWideChar(errors, -1);
1828 if (errors_str == NULL) {
1829 Py_CLEAR(buf);
1830 Py_CLEAR(encoding_str);
1831 goto error;
1832 }
1833
1834 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OOOsOO",
1835 buf, encoding_str, errors_str,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001836 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001837 Py_CLEAR(buf);
Victor Stinner709d23d2019-05-02 14:56:30 -04001838 Py_CLEAR(encoding_str);
1839 Py_CLEAR(errors_str);
Nick Coghland6009512014-11-20 21:39:37 +10001840 if (stream == NULL)
1841 goto error;
1842
1843 if (write_mode)
1844 mode = "w";
1845 else
1846 mode = "r";
1847 text = PyUnicode_FromString(mode);
1848 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1849 goto error;
1850 Py_CLEAR(text);
1851 return stream;
1852
1853error:
1854 Py_XDECREF(buf);
1855 Py_XDECREF(stream);
1856 Py_XDECREF(text);
1857 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001858
Victor Stinner874dbe82015-09-04 17:29:57 +02001859 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1860 /* Issue #24891: the file descriptor was closed after the first
1861 is_valid_fd() check was called. Ignore the OSError and set the
1862 stream to None. */
1863 PyErr_Clear();
1864 Py_RETURN_NONE;
1865 }
1866 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001867}
1868
1869/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinner331a6a52019-05-27 16:39:22 +02001870static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001871init_sys_streams(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10001872{
1873 PyObject *iomod = NULL, *wrapper;
1874 PyObject *bimod = NULL;
1875 PyObject *m;
1876 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001877 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001878 PyObject * encoding_attr;
Victor Stinner331a6a52019-05-27 16:39:22 +02001879 PyStatus res = _PyStatus_OK();
Victor Stinnerb45d2592019-06-20 00:05:23 +02001880 const PyConfig *config = &tstate->interp->config;
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001881
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001882 /* Check that stdin is not a directory
1883 Using shell redirection, you can redirect stdin to a directory,
1884 crashing the Python interpreter. Catch this common mistake here
1885 and output a useful error message. Note that under MS Windows,
1886 the shell already prevents that. */
1887#ifndef MS_WINDOWS
1888 struct _Py_stat_struct sb;
1889 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1890 S_ISDIR(sb.st_mode)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001891 return _PyStatus_ERR("<stdin> is a directory, cannot continue");
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001892 }
1893#endif
1894
Nick Coghland6009512014-11-20 21:39:37 +10001895 /* Hack to avoid a nasty recursion issue when Python is invoked
1896 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1897 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1898 goto error;
1899 }
1900 Py_DECREF(m);
1901
1902 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1903 goto error;
1904 }
1905 Py_DECREF(m);
1906
1907 if (!(bimod = PyImport_ImportModule("builtins"))) {
1908 goto error;
1909 }
1910
1911 if (!(iomod = PyImport_ImportModule("io"))) {
1912 goto error;
1913 }
1914 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1915 goto error;
1916 }
1917
1918 /* Set builtins.open */
1919 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1920 Py_DECREF(wrapper);
1921 goto error;
1922 }
1923 Py_DECREF(wrapper);
1924
Nick Coghland6009512014-11-20 21:39:37 +10001925 /* Set sys.stdin */
1926 fd = fileno(stdin);
1927 /* Under some conditions stdin, stdout and stderr may not be connected
1928 * and fileno() may point to an invalid file descriptor. For example
1929 * GUI apps don't have valid standard streams by default.
1930 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001931 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001932 config->stdio_encoding,
1933 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001934 if (std == NULL)
1935 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001936 PySys_SetObject("__stdin__", std);
1937 _PySys_SetObjectId(&PyId_stdin, std);
1938 Py_DECREF(std);
1939
1940 /* Set sys.stdout */
1941 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001942 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001943 config->stdio_encoding,
1944 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001945 if (std == NULL)
1946 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001947 PySys_SetObject("__stdout__", std);
1948 _PySys_SetObjectId(&PyId_stdout, std);
1949 Py_DECREF(std);
1950
1951#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1952 /* Set sys.stderr, replaces the preliminary stderr */
1953 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001954 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001955 config->stdio_encoding,
Victor Stinner709d23d2019-05-02 14:56:30 -04001956 L"backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001957 if (std == NULL)
1958 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001959
1960 /* Same as hack above, pre-import stderr's codec to avoid recursion
1961 when import.c tries to write to stderr in verbose mode. */
1962 encoding_attr = PyObject_GetAttrString(std, "encoding");
1963 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001964 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001965 if (std_encoding != NULL) {
1966 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1967 Py_XDECREF(codec_info);
1968 }
1969 Py_DECREF(encoding_attr);
1970 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001971 _PyErr_Clear(tstate); /* Not a fatal error if codec isn't available */
Nick Coghland6009512014-11-20 21:39:37 +10001972
1973 if (PySys_SetObject("__stderr__", std) < 0) {
1974 Py_DECREF(std);
1975 goto error;
1976 }
1977 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1978 Py_DECREF(std);
1979 goto error;
1980 }
1981 Py_DECREF(std);
1982#endif
1983
Victor Stinnera7368ac2017-11-15 18:11:45 -08001984 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001985
Victor Stinnera7368ac2017-11-15 18:11:45 -08001986error:
Victor Stinner331a6a52019-05-27 16:39:22 +02001987 res = _PyStatus_ERR("can't initialize sys standard streams");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001988
1989done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02001990 _Py_ClearStandardStreamEncoding();
Victor Stinner31e99082017-12-20 23:41:38 +01001991
Nick Coghland6009512014-11-20 21:39:37 +10001992 Py_XDECREF(bimod);
1993 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001994 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001995}
1996
1997
Victor Stinner10dc4842015-03-24 12:01:30 +01001998static void
Victor Stinner1ce16fb2019-09-18 01:35:33 +02001999_Py_FatalError_DumpTracebacks(int fd, PyInterpreterState *interp,
2000 PyThreadState *tstate)
Victor Stinner10dc4842015-03-24 12:01:30 +01002001{
Victor Stinner10dc4842015-03-24 12:01:30 +01002002 fputc('\n', stderr);
2003 fflush(stderr);
2004
2005 /* display the current Python stack */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002006 _Py_DumpTracebackThreads(fd, interp, tstate);
Victor Stinner10dc4842015-03-24 12:01:30 +01002007}
Victor Stinner791da1c2016-03-14 16:53:12 +01002008
2009/* Print the current exception (if an exception is set) with its traceback,
2010 or display the current Python stack.
2011
2012 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
2013 called on catastrophic cases.
2014
2015 Return 1 if the traceback was displayed, 0 otherwise. */
2016
2017static int
2018_Py_FatalError_PrintExc(int fd)
2019{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002020 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner791da1c2016-03-14 16:53:12 +01002021 PyObject *ferr, *res;
2022 PyObject *exception, *v, *tb;
2023 int has_tb;
2024
Victor Stinnerb45d2592019-06-20 00:05:23 +02002025 _PyErr_Fetch(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002026 if (exception == NULL) {
2027 /* No current exception */
2028 return 0;
2029 }
2030
2031 ferr = _PySys_GetObjectId(&PyId_stderr);
2032 if (ferr == NULL || ferr == Py_None) {
2033 /* sys.stderr is not set yet or set to None,
2034 no need to try to display the exception */
2035 return 0;
2036 }
2037
Victor Stinnerb45d2592019-06-20 00:05:23 +02002038 _PyErr_NormalizeException(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002039 if (tb == NULL) {
2040 tb = Py_None;
2041 Py_INCREF(tb);
2042 }
2043 PyException_SetTraceback(v, tb);
2044 if (exception == NULL) {
2045 /* PyErr_NormalizeException() failed */
2046 return 0;
2047 }
2048
2049 has_tb = (tb != Py_None);
2050 PyErr_Display(exception, v, tb);
2051 Py_XDECREF(exception);
2052 Py_XDECREF(v);
2053 Py_XDECREF(tb);
2054
2055 /* sys.stderr may be buffered: call sys.stderr.flush() */
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002056 res = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002057 if (res == NULL) {
2058 _PyErr_Clear(tstate);
2059 }
2060 else {
Victor Stinner791da1c2016-03-14 16:53:12 +01002061 Py_DECREF(res);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002062 }
Victor Stinner791da1c2016-03-14 16:53:12 +01002063
2064 return has_tb;
2065}
2066
Nick Coghland6009512014-11-20 21:39:37 +10002067/* Print fatal error message and abort */
2068
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002069#ifdef MS_WINDOWS
2070static void
2071fatal_output_debug(const char *msg)
2072{
2073 /* buffer of 256 bytes allocated on the stack */
2074 WCHAR buffer[256 / sizeof(WCHAR)];
2075 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2076 size_t msglen;
2077
2078 OutputDebugStringW(L"Fatal Python error: ");
2079
2080 msglen = strlen(msg);
2081 while (msglen) {
2082 size_t i;
2083
2084 if (buflen > msglen) {
2085 buflen = msglen;
2086 }
2087
2088 /* Convert the message to wchar_t. This uses a simple one-to-one
2089 conversion, assuming that the this error message actually uses
2090 ASCII only. If this ceases to be true, we will have to convert. */
2091 for (i=0; i < buflen; ++i) {
2092 buffer[i] = msg[i];
2093 }
2094 buffer[i] = L'\0';
2095 OutputDebugStringW(buffer);
2096
2097 msg += buflen;
2098 msglen -= buflen;
2099 }
2100 OutputDebugStringW(L"\n");
2101}
2102#endif
2103
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002104
2105static void
2106fatal_error_dump_runtime(FILE *stream, _PyRuntimeState *runtime)
2107{
2108 fprintf(stream, "Python runtime state: ");
2109 if (runtime->finalizing) {
2110 fprintf(stream, "finalizing (tstate=%p)", runtime->finalizing);
2111 }
2112 else if (runtime->initialized) {
2113 fprintf(stream, "initialized");
2114 }
2115 else if (runtime->core_initialized) {
2116 fprintf(stream, "core initialized");
2117 }
2118 else if (runtime->preinitialized) {
2119 fprintf(stream, "preinitialized");
2120 }
2121 else if (runtime->preinitializing) {
2122 fprintf(stream, "preinitializing");
2123 }
2124 else {
2125 fprintf(stream, "unknown");
2126 }
2127 fprintf(stream, "\n");
2128 fflush(stream);
2129}
2130
2131
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002132static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002133fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002134{
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002135 FILE *stream = stderr;
2136 const int fd = fileno(stream);
Victor Stinner53345a42015-03-25 01:55:14 +01002137 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002138
2139 if (reentrant) {
2140 /* Py_FatalError() caused a second fatal error.
2141 Example: flush_std_files() raises a recursion error. */
2142 goto exit;
2143 }
2144 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002145
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002146 fprintf(stream, "Fatal Python error: ");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002147 if (prefix) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002148 fputs(prefix, stream);
2149 fputs(": ", stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002150 }
2151 if (msg) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002152 fputs(msg, stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002153 }
2154 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002155 fprintf(stream, "<message not set>");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002156 }
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002157 fputs("\n", stream);
2158 fflush(stream); /* it helps in Windows debug build */
2159
2160 _PyRuntimeState *runtime = &_PyRuntime;
2161 fatal_error_dump_runtime(stream, runtime);
2162
2163 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
2164 PyInterpreterState *interp = NULL;
2165 if (tstate != NULL) {
2166 interp = tstate->interp;
2167 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002168
Victor Stinner3a228ab2018-11-01 00:26:41 +01002169 /* Check if the current thread has a Python thread state
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002170 and holds the GIL.
Victor Stinner3a228ab2018-11-01 00:26:41 +01002171
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002172 tss_tstate is NULL if Py_FatalError() is called from a C thread which
2173 has no Python thread state.
2174
2175 tss_tstate != tstate if the current Python thread does not hold the GIL.
2176 */
2177 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2178 int has_tstate_and_gil = (tss_tstate != NULL && tss_tstate == tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002179 if (has_tstate_and_gil) {
2180 /* If an exception is set, print the exception with its traceback */
2181 if (!_Py_FatalError_PrintExc(fd)) {
2182 /* No exception is set, or an exception is set without traceback */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002183 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002184 }
2185 }
2186 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002187 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002188 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002189
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002190 /* The main purpose of faulthandler is to display the traceback.
2191 This function already did its best to display a traceback.
2192 Disable faulthandler to prevent writing a second traceback
2193 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002194 _PyFaulthandler_Fini();
2195
Victor Stinner791da1c2016-03-14 16:53:12 +01002196 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002197 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002198 /* Flush sys.stdout and sys.stderr */
2199 flush_std_files();
2200 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002201
Nick Coghland6009512014-11-20 21:39:37 +10002202#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002203 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002204#endif /* MS_WINDOWS */
2205
2206exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002207 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002208#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002209 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002210#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002211 abort();
2212 }
2213 else {
2214 exit(status);
2215 }
2216}
2217
Victor Stinner19760862017-12-20 01:41:59 +01002218void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002219Py_FatalError(const char *msg)
2220{
2221 fatal_error(NULL, msg, -1);
2222}
2223
Victor Stinner19760862017-12-20 01:41:59 +01002224void _Py_NO_RETURN
Victor Stinner331a6a52019-05-27 16:39:22 +02002225Py_ExitStatusException(PyStatus status)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002226{
Victor Stinner331a6a52019-05-27 16:39:22 +02002227 if (_PyStatus_IS_EXIT(status)) {
2228 exit(status.exitcode);
Victor Stinnerdbacfc22019-05-16 16:39:26 +02002229 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002230 else if (_PyStatus_IS_ERROR(status)) {
2231 fatal_error(status.func, status.err_msg, 1);
Victor Stinnerdfe88472019-03-01 12:14:41 +01002232 }
2233 else {
Victor Stinner331a6a52019-05-27 16:39:22 +02002234 Py_FatalError("Py_ExitStatusException() must not be called on success");
Victor Stinnerdfe88472019-03-01 12:14:41 +01002235 }
Nick Coghland6009512014-11-20 21:39:37 +10002236}
2237
2238/* Clean up and exit */
2239
Victor Stinnerd7292b52016-06-17 12:29:00 +02002240# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002241
Nick Coghland6009512014-11-20 21:39:37 +10002242/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002243void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002244{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002245 PyInterpreterState *is = _PyInterpreterState_GET_UNSAFE();
Marcel Plch776407f2017-12-20 11:17:58 +01002246
Antoine Pitroufc5db952017-12-13 02:29:07 +01002247 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002248 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2249
2250 is->pyexitfunc = func;
2251 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002252}
2253
2254static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002255call_py_exitfuncs(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002256{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002257 PyInterpreterState *interp = tstate->interp;
2258 if (interp->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002259 return;
2260
Victor Stinnerb45d2592019-06-20 00:05:23 +02002261 (*interp->pyexitfunc)(interp->pyexitmodule);
2262 _PyErr_Clear(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10002263}
2264
2265/* Wait until threading._shutdown completes, provided
2266 the threading module was imported in the first place.
2267 The shutdown routine will wait until all non-daemon
2268 "threading" threads have completed. */
2269static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002270wait_for_thread_shutdown(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002271{
Nick Coghland6009512014-11-20 21:39:37 +10002272 _Py_IDENTIFIER(_shutdown);
2273 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002274 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002275 if (threading == NULL) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02002276 if (_PyErr_Occurred(tstate)) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002277 PyErr_WriteUnraisable(NULL);
2278 }
2279 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002280 return;
2281 }
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002282 result = _PyObject_CallMethodIdNoArgs(threading, &PyId__shutdown);
Nick Coghland6009512014-11-20 21:39:37 +10002283 if (result == NULL) {
2284 PyErr_WriteUnraisable(threading);
2285 }
2286 else {
2287 Py_DECREF(result);
2288 }
2289 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002290}
2291
2292#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002293int Py_AtExit(void (*func)(void))
2294{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002295 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002296 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002297 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002298 return 0;
2299}
2300
2301static void
Victor Stinner8e91c242019-04-24 17:24:01 +02002302call_ll_exitfuncs(_PyRuntimeState *runtime)
Nick Coghland6009512014-11-20 21:39:37 +10002303{
Victor Stinner8e91c242019-04-24 17:24:01 +02002304 while (runtime->nexitfuncs > 0) {
Victor Stinner87d23a02019-04-26 05:49:26 +02002305 /* pop last function from the list */
2306 runtime->nexitfuncs--;
2307 void (*exitfunc)(void) = runtime->exitfuncs[runtime->nexitfuncs];
2308 runtime->exitfuncs[runtime->nexitfuncs] = NULL;
2309
2310 exitfunc();
Victor Stinner8e91c242019-04-24 17:24:01 +02002311 }
Nick Coghland6009512014-11-20 21:39:37 +10002312
2313 fflush(stdout);
2314 fflush(stderr);
2315}
2316
Victor Stinnercfc88312018-08-01 16:41:25 +02002317void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002318Py_Exit(int sts)
2319{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002320 if (Py_FinalizeEx() < 0) {
2321 sts = 120;
2322 }
Nick Coghland6009512014-11-20 21:39:37 +10002323
2324 exit(sts);
2325}
2326
Victor Stinner331a6a52019-05-27 16:39:22 +02002327static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02002328init_signals(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002329{
2330#ifdef SIGPIPE
2331 PyOS_setsig(SIGPIPE, SIG_IGN);
2332#endif
2333#ifdef SIGXFZ
2334 PyOS_setsig(SIGXFZ, SIG_IGN);
2335#endif
2336#ifdef SIGXFSZ
2337 PyOS_setsig(SIGXFSZ, SIG_IGN);
2338#endif
2339 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerb45d2592019-06-20 00:05:23 +02002340 if (_PyErr_Occurred(tstate)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02002341 return _PyStatus_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002342 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002343 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002344}
2345
2346
2347/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2348 *
2349 * All of the code in this function must only use async-signal-safe functions,
2350 * listed at `man 7 signal` or
2351 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2352 */
2353void
2354_Py_RestoreSignals(void)
2355{
2356#ifdef SIGPIPE
2357 PyOS_setsig(SIGPIPE, SIG_DFL);
2358#endif
2359#ifdef SIGXFZ
2360 PyOS_setsig(SIGXFZ, SIG_DFL);
2361#endif
2362#ifdef SIGXFSZ
2363 PyOS_setsig(SIGXFSZ, SIG_DFL);
2364#endif
2365}
2366
2367
2368/*
2369 * The file descriptor fd is considered ``interactive'' if either
2370 * a) isatty(fd) is TRUE, or
2371 * b) the -i flag was given, and the filename associated with
2372 * the descriptor is NULL or "<stdin>" or "???".
2373 */
2374int
2375Py_FdIsInteractive(FILE *fp, const char *filename)
2376{
2377 if (isatty((int)fileno(fp)))
2378 return 1;
2379 if (!Py_InteractiveFlag)
2380 return 0;
2381 return (filename == NULL) ||
2382 (strcmp(filename, "<stdin>") == 0) ||
2383 (strcmp(filename, "???") == 0);
2384}
2385
2386
Nick Coghland6009512014-11-20 21:39:37 +10002387/* Wrappers around sigaction() or signal(). */
2388
2389PyOS_sighandler_t
2390PyOS_getsig(int sig)
2391{
2392#ifdef HAVE_SIGACTION
2393 struct sigaction context;
2394 if (sigaction(sig, NULL, &context) == -1)
2395 return SIG_ERR;
2396 return context.sa_handler;
2397#else
2398 PyOS_sighandler_t handler;
2399/* Special signal handling for the secure CRT in Visual Studio 2005 */
2400#if defined(_MSC_VER) && _MSC_VER >= 1400
2401 switch (sig) {
2402 /* Only these signals are valid */
2403 case SIGINT:
2404 case SIGILL:
2405 case SIGFPE:
2406 case SIGSEGV:
2407 case SIGTERM:
2408 case SIGBREAK:
2409 case SIGABRT:
2410 break;
2411 /* Don't call signal() with other values or it will assert */
2412 default:
2413 return SIG_ERR;
2414 }
2415#endif /* _MSC_VER && _MSC_VER >= 1400 */
2416 handler = signal(sig, SIG_IGN);
2417 if (handler != SIG_ERR)
2418 signal(sig, handler);
2419 return handler;
2420#endif
2421}
2422
2423/*
2424 * All of the code in this function must only use async-signal-safe functions,
2425 * listed at `man 7 signal` or
2426 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2427 */
2428PyOS_sighandler_t
2429PyOS_setsig(int sig, PyOS_sighandler_t handler)
2430{
2431#ifdef HAVE_SIGACTION
2432 /* Some code in Modules/signalmodule.c depends on sigaction() being
2433 * used here if HAVE_SIGACTION is defined. Fix that if this code
2434 * changes to invalidate that assumption.
2435 */
2436 struct sigaction context, ocontext;
2437 context.sa_handler = handler;
2438 sigemptyset(&context.sa_mask);
2439 context.sa_flags = 0;
2440 if (sigaction(sig, &context, &ocontext) == -1)
2441 return SIG_ERR;
2442 return ocontext.sa_handler;
2443#else
2444 PyOS_sighandler_t oldhandler;
2445 oldhandler = signal(sig, handler);
2446#ifdef HAVE_SIGINTERRUPT
2447 siginterrupt(sig, 1);
2448#endif
2449 return oldhandler;
2450#endif
2451}
2452
2453#ifdef __cplusplus
2454}
2455#endif