blob: 44a4b18590b4b5e1913694c9c2a64649d5f2d85a [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 Stinner01b1cc12019-11-20 02:27:56 +0100550 _PyGILState_Init(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 Stinnere7e699e2019-11-20 12:08:13 +0100561pycore_init_types(PyThreadState *tstate, int is_main_interp)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100562{
Victor Stinner444b39b2019-11-20 01:18:11 +0100563 PyStatus status;
564
Victor Stinner01b1cc12019-11-20 02:27:56 +0100565 status = _PyGC_Init(tstate);
Victor Stinner444b39b2019-11-20 01:18:11 +0100566 if (_PyStatus_EXCEPTION(status)) {
567 return status;
568 }
569
Victor Stinnere7e699e2019-11-20 12:08:13 +0100570 if (is_main_interp) {
571 status = _PyTypes_Init();
572 if (_PyStatus_EXCEPTION(status)) {
573 return status;
574 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100575
Victor Stinnere7e699e2019-11-20 12:08:13 +0100576 if (!_PyLong_Init()) {
577 return _PyStatus_ERR("can't init longs");
578 }
Victor Stinneref5aa9a2019-11-20 00:38:03 +0100579
Victor Stinnere7e699e2019-11-20 12:08:13 +0100580 status = _PyUnicode_Init();
581 if (_PyStatus_EXCEPTION(status)) {
582 return status;
583 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100584 }
585
Victor Stinner331a6a52019-05-27 16:39:22 +0200586 status = _PyExc_Init();
587 if (_PyStatus_EXCEPTION(status)) {
588 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100589 }
590
Victor Stinnere7e699e2019-11-20 12:08:13 +0100591 if (is_main_interp) {
592 if (!_PyFloat_Init()) {
593 return _PyStatus_ERR("can't init float");
594 }
Nick Coghland6009512014-11-20 21:39:37 +1000595
Victor Stinnere7e699e2019-11-20 12:08:13 +0100596 if (_PyStructSequence_Init() < 0) {
597 return _PyStatus_ERR("can't initialize structseq");
598 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100599 }
Victor Stinneref9d9b62019-05-22 11:28:22 +0200600
Victor Stinner331a6a52019-05-27 16:39:22 +0200601 status = _PyErr_Init();
602 if (_PyStatus_EXCEPTION(status)) {
603 return status;
Victor Stinneref9d9b62019-05-22 11:28:22 +0200604 }
605
Victor Stinnere7e699e2019-11-20 12:08:13 +0100606 if (is_main_interp) {
607 if (!_PyContext_Init()) {
608 return _PyStatus_ERR("can't init context");
609 }
Victor Stinneref5aa9a2019-11-20 00:38:03 +0100610 }
611
Victor Stinner331a6a52019-05-27 16:39:22 +0200612 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100613}
614
615
Victor Stinner331a6a52019-05-27 16:39:22 +0200616static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200617pycore_init_builtins(PyThreadState *tstate)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100618{
Victor Stinnerb45d2592019-06-20 00:05:23 +0200619 PyInterpreterState *interp = tstate->interp;
620
621 PyObject *bimod = _PyBuiltin_Init(tstate);
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100622 if (bimod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200623 return _PyStatus_ERR("can't initialize builtins modules");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100624 }
625 _PyImport_FixupBuiltin(bimod, "builtins", interp->modules);
626
627 interp->builtins = PyModule_GetDict(bimod);
628 if (interp->builtins == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200629 return _PyStatus_ERR("can't initialize builtins dict");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100630 }
631 Py_INCREF(interp->builtins);
632
Victor Stinner331a6a52019-05-27 16:39:22 +0200633 PyStatus status = _PyBuiltins_AddExceptions(bimod);
634 if (_PyStatus_EXCEPTION(status)) {
635 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100636 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200637 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100638}
639
640
Victor Stinner331a6a52019-05-27 16:39:22 +0200641static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200642pycore_init_import_warnings(PyThreadState *tstate, PyObject *sysmod)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100643{
Victor Stinnerb45d2592019-06-20 00:05:23 +0200644 const PyConfig *config = &tstate->interp->config;
645
646 PyStatus status = _PyImport_Init(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200647 if (_PyStatus_EXCEPTION(status)) {
648 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800649 }
Nick Coghland6009512014-11-20 21:39:37 +1000650
Victor Stinnerb45d2592019-06-20 00:05:23 +0200651 status = _PyImportHooks_Init(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200652 if (_PyStatus_EXCEPTION(status)) {
653 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800654 }
Nick Coghland6009512014-11-20 21:39:37 +1000655
656 /* Initialize _warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100657 if (_PyWarnings_Init() == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200658 return _PyStatus_ERR("can't initialize warnings");
Victor Stinner1f151112017-11-23 10:43:14 +0100659 }
Nick Coghland6009512014-11-20 21:39:37 +1000660
Victor Stinnerb45d2592019-06-20 00:05:23 +0200661 if (config->_install_importlib) {
Victor Stinner12f2f172019-09-26 15:51:50 +0200662 status = _PyConfig_WritePathConfig(config);
Victor Stinner331a6a52019-05-27 16:39:22 +0200663 if (_PyStatus_EXCEPTION(status)) {
664 return status;
Victor Stinnerb1147e42018-07-21 02:06:16 +0200665 }
666 }
667
Eric Snow1abcf672017-05-23 21:46:51 -0700668 /* This call sets up builtin and frozen import support */
Victor Stinnerb45d2592019-06-20 00:05:23 +0200669 if (config->_install_importlib) {
670 status = init_importlib(tstate, sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200671 if (_PyStatus_EXCEPTION(status)) {
672 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800673 }
Eric Snow1abcf672017-05-23 21:46:51 -0700674 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200675 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100676}
677
678
Victor Stinner331a6a52019-05-27 16:39:22 +0200679static PyStatus
680pyinit_config(_PyRuntimeState *runtime,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200681 PyThreadState **tstate_p,
Victor Stinner331a6a52019-05-27 16:39:22 +0200682 const PyConfig *config)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100683{
Victor Stinner331a6a52019-05-27 16:39:22 +0200684 _PyConfig_Write(config, runtime);
Victor Stinner20004952019-03-26 02:31:11 +0100685
Victor Stinner331a6a52019-05-27 16:39:22 +0200686 PyStatus status = pycore_init_runtime(runtime, config);
687 if (_PyStatus_EXCEPTION(status)) {
688 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100689 }
690
Victor Stinnerb45d2592019-06-20 00:05:23 +0200691 PyThreadState *tstate;
692 status = pycore_create_interpreter(runtime, config, &tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200693 if (_PyStatus_EXCEPTION(status)) {
694 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100695 }
Victor Stinnerb45d2592019-06-20 00:05:23 +0200696 config = &tstate->interp->config;
697 *tstate_p = tstate;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100698
Victor Stinnere7e699e2019-11-20 12:08:13 +0100699 status = pycore_init_types(tstate, 1);
Victor Stinner331a6a52019-05-27 16:39:22 +0200700 if (_PyStatus_EXCEPTION(status)) {
701 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100702 }
703
704 PyObject *sysmod;
Victor Stinner01b1cc12019-11-20 02:27:56 +0100705 status = _PySys_Create(tstate, &sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200706 if (_PyStatus_EXCEPTION(status)) {
707 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100708 }
709
Victor Stinnerb45d2592019-06-20 00:05:23 +0200710 status = pycore_init_builtins(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200711 if (_PyStatus_EXCEPTION(status)) {
712 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100713 }
714
Victor Stinnerb45d2592019-06-20 00:05:23 +0200715 status = pycore_init_import_warnings(tstate, sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200716 if (_PyStatus_EXCEPTION(status)) {
717 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100718 }
Eric Snow1abcf672017-05-23 21:46:51 -0700719
720 /* Only when we get here is the runtime core fully initialized */
Victor Stinner43125222019-04-24 18:23:53 +0200721 runtime->core_initialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200722 return _PyStatus_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700723}
724
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100725
Victor Stinner331a6a52019-05-27 16:39:22 +0200726PyStatus
727_Py_PreInitializeFromPyArgv(const PyPreConfig *src_config, const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100728{
Victor Stinner331a6a52019-05-27 16:39:22 +0200729 PyStatus status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100730
Victor Stinner6d1c4672019-05-20 11:02:00 +0200731 if (src_config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200732 return _PyStatus_ERR("preinitialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +0200733 }
734
Victor Stinner331a6a52019-05-27 16:39:22 +0200735 status = _PyRuntime_Initialize();
736 if (_PyStatus_EXCEPTION(status)) {
737 return status;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100738 }
Victor Stinner43125222019-04-24 18:23:53 +0200739 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100740
Victor Stinnerd3b90412019-09-17 23:59:51 +0200741 if (runtime->preinitialized) {
Victor Stinnerf72346c2019-03-25 17:54:58 +0100742 /* If it's already configured: ignored the new configuration */
Victor Stinner331a6a52019-05-27 16:39:22 +0200743 return _PyStatus_OK();
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100744 }
745
Victor Stinnerd3b90412019-09-17 23:59:51 +0200746 /* Note: preinitialized remains 1 on error, it is only set to 0
747 at exit on success. */
748 runtime->preinitializing = 1;
749
Victor Stinner331a6a52019-05-27 16:39:22 +0200750 PyPreConfig config;
Victor Stinner441b10c2019-09-28 04:28:35 +0200751
752 status = _PyPreConfig_InitFromPreConfig(&config, src_config);
753 if (_PyStatus_EXCEPTION(status)) {
754 return status;
755 }
Victor Stinnerf72346c2019-03-25 17:54:58 +0100756
Victor Stinner331a6a52019-05-27 16:39:22 +0200757 status = _PyPreConfig_Read(&config, args);
758 if (_PyStatus_EXCEPTION(status)) {
759 return status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100760 }
761
Victor Stinner331a6a52019-05-27 16:39:22 +0200762 status = _PyPreConfig_Write(&config);
763 if (_PyStatus_EXCEPTION(status)) {
764 return status;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100765 }
766
Victor Stinnerd3b90412019-09-17 23:59:51 +0200767 runtime->preinitializing = 0;
768 runtime->preinitialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200769 return _PyStatus_OK();
Victor Stinnerf72346c2019-03-25 17:54:58 +0100770}
771
Victor Stinner70005ac2019-05-02 15:25:34 -0400772
Victor Stinner331a6a52019-05-27 16:39:22 +0200773PyStatus
774Py_PreInitializeFromBytesArgs(const PyPreConfig *src_config, Py_ssize_t argc, char **argv)
Victor Stinnerf72346c2019-03-25 17:54:58 +0100775{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100776 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400777 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100778}
779
780
Victor Stinner331a6a52019-05-27 16:39:22 +0200781PyStatus
782Py_PreInitializeFromArgs(const PyPreConfig *src_config, Py_ssize_t argc, wchar_t **argv)
Victor Stinner20004952019-03-26 02:31:11 +0100783{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100784 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400785 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinner20004952019-03-26 02:31:11 +0100786}
787
788
Victor Stinner331a6a52019-05-27 16:39:22 +0200789PyStatus
790Py_PreInitialize(const PyPreConfig *src_config)
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100791{
Victor Stinner70005ac2019-05-02 15:25:34 -0400792 return _Py_PreInitializeFromPyArgv(src_config, NULL);
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100793}
794
795
Victor Stinner331a6a52019-05-27 16:39:22 +0200796PyStatus
797_Py_PreInitializeFromConfig(const PyConfig *config,
798 const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100799{
Victor Stinner331a6a52019-05-27 16:39:22 +0200800 assert(config != NULL);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200801
Victor Stinner331a6a52019-05-27 16:39:22 +0200802 PyStatus status = _PyRuntime_Initialize();
803 if (_PyStatus_EXCEPTION(status)) {
804 return status;
Victor Stinner6d1c4672019-05-20 11:02:00 +0200805 }
806 _PyRuntimeState *runtime = &_PyRuntime;
807
Victor Stinnerd3b90412019-09-17 23:59:51 +0200808 if (runtime->preinitialized) {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200809 /* Already initialized: do nothing */
Victor Stinner331a6a52019-05-27 16:39:22 +0200810 return _PyStatus_OK();
Victor Stinner70005ac2019-05-02 15:25:34 -0400811 }
Victor Stinnercab5d072019-05-17 19:01:14 +0200812
Victor Stinner331a6a52019-05-27 16:39:22 +0200813 PyPreConfig preconfig;
Victor Stinner441b10c2019-09-28 04:28:35 +0200814
Victor Stinner3c30a762019-10-01 10:56:37 +0200815 _PyPreConfig_InitFromConfig(&preconfig, config);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200816
Victor Stinner331a6a52019-05-27 16:39:22 +0200817 if (!config->parse_argv) {
818 return Py_PreInitialize(&preconfig);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200819 }
820 else if (args == NULL) {
Victor Stinnercab5d072019-05-17 19:01:14 +0200821 _PyArgv config_args = {
822 .use_bytes_argv = 0,
Victor Stinner331a6a52019-05-27 16:39:22 +0200823 .argc = config->argv.length,
824 .wchar_argv = config->argv.items};
Victor Stinner6d1c4672019-05-20 11:02:00 +0200825 return _Py_PreInitializeFromPyArgv(&preconfig, &config_args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200826 }
827 else {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200828 return _Py_PreInitializeFromPyArgv(&preconfig, args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200829 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100830}
831
832
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100833/* Begin interpreter initialization
834 *
835 * On return, the first thread and interpreter state have been created,
836 * but the compiler, signal handling, multithreading and
837 * multiple interpreter support, and codec infrastructure are not yet
838 * available.
839 *
840 * The import system will support builtin and frozen modules only.
841 * The only supported io is writing to sys.stderr
842 *
843 * If any operation invoked by this function fails, a fatal error is
844 * issued and the function does not return.
845 *
846 * Any code invoked from this function should *not* assume it has access
847 * to the Python C API (unless the API is explicitly listed as being
848 * safe to call without calling Py_Initialize first)
849 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200850static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200851pyinit_core(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200852 const PyConfig *src_config,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200853 PyThreadState **tstate_p)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200854{
Victor Stinner331a6a52019-05-27 16:39:22 +0200855 PyStatus status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200856
Victor Stinner331a6a52019-05-27 16:39:22 +0200857 status = _Py_PreInitializeFromConfig(src_config, NULL);
858 if (_PyStatus_EXCEPTION(status)) {
859 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200860 }
861
Victor Stinner331a6a52019-05-27 16:39:22 +0200862 PyConfig config;
Victor Stinner8462a492019-10-01 12:06:16 +0200863 _PyConfig_InitCompatConfig(&config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200864
Victor Stinner331a6a52019-05-27 16:39:22 +0200865 status = _PyConfig_Copy(&config, src_config);
866 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200867 goto done;
868 }
869
Victor Stinner331a6a52019-05-27 16:39:22 +0200870 status = PyConfig_Read(&config);
871 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200872 goto done;
873 }
874
875 if (!runtime->core_initialized) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200876 status = pyinit_config(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200877 }
878 else {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200879 status = pyinit_core_reconfigure(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200880 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200881 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200882 goto done;
883 }
884
885done:
Victor Stinner331a6a52019-05-27 16:39:22 +0200886 PyConfig_Clear(&config);
887 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200888}
889
Victor Stinner5ac27a52019-03-27 13:40:14 +0100890
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200891/* Py_Initialize() has already been called: update the main interpreter
892 configuration. Example of bpo-34008: Py_Main() called after
893 Py_Initialize(). */
Victor Stinner331a6a52019-05-27 16:39:22 +0200894static PyStatus
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100895_Py_ReconfigureMainInterpreter(PyInterpreterState *interp)
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200896{
Victor Stinner331a6a52019-05-27 16:39:22 +0200897 PyConfig *config = &interp->config;
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100898
Victor Stinner331a6a52019-05-27 16:39:22 +0200899 PyObject *argv = _PyWideStringList_AsList(&config->argv);
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100900 if (argv == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200901 return _PyStatus_NO_MEMORY(); \
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100902 }
903
904 int res = PyDict_SetItemString(interp->sysdict, "argv", argv);
905 Py_DECREF(argv);
906 if (res < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200907 return _PyStatus_ERR("fail to set sys.argv");
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200908 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200909 return _PyStatus_OK();
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200910}
911
Eric Snowc7ec9982017-05-23 23:00:52 -0700912/* Update interpreter state based on supplied configuration settings
913 *
914 * After calling this function, most of the restrictions on the interpreter
915 * are lifted. The only remaining incomplete settings are those related
916 * to the main module (sys.argv[0], __main__ metadata)
917 *
918 * Calling this when the interpreter is not initializing, is already
919 * initialized or without a valid current thread state is a fatal error.
920 * Other errors should be reported as normal Python exceptions with a
921 * non-zero return code.
922 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200923static PyStatus
Victor Stinner01b1cc12019-11-20 02:27:56 +0100924pyinit_main(PyThreadState *tstate)
Eric Snow1abcf672017-05-23 21:46:51 -0700925{
Victor Stinner01b1cc12019-11-20 02:27:56 +0100926 _PyRuntimeState *runtime = tstate->interp->runtime;
Victor Stinner43125222019-04-24 18:23:53 +0200927 if (!runtime->core_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200928 return _PyStatus_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700929 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700930
Victor Stinner1dc6e392018-07-25 02:49:17 +0200931 /* Configure the main interpreter */
Victor Stinnerb45d2592019-06-20 00:05:23 +0200932 PyInterpreterState *interp = tstate->interp;
Victor Stinner331a6a52019-05-27 16:39:22 +0200933 PyConfig *config = &interp->config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700934
Victor Stinner43125222019-04-24 18:23:53 +0200935 if (runtime->initialized) {
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100936 return _Py_ReconfigureMainInterpreter(interp);
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200937 }
938
Victor Stinner331a6a52019-05-27 16:39:22 +0200939 if (!config->_install_importlib) {
Eric Snow1abcf672017-05-23 21:46:51 -0700940 /* Special mode for freeze_importlib: run with no import system
941 *
942 * This means anything which needs support from extension modules
943 * or pure Python code in the standard library won't work.
944 */
Victor Stinner43125222019-04-24 18:23:53 +0200945 runtime->initialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200946 return _PyStatus_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700947 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100948
Victor Stinner33c377e2017-12-05 15:12:41 +0100949 if (_PyTime_Init() < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200950 return _PyStatus_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100951 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200952
Victor Stinner01b1cc12019-11-20 02:27:56 +0100953 if (_PySys_InitMain(tstate) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200954 return _PyStatus_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100955 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800956
Victor Stinner0a28f8d2019-06-19 02:54:39 +0200957 PyStatus status = init_importlib_external(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200958 if (_PyStatus_EXCEPTION(status)) {
959 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800960 }
Nick Coghland6009512014-11-20 21:39:37 +1000961
962 /* initialize the faulthandler module */
Victor Stinner331a6a52019-05-27 16:39:22 +0200963 status = _PyFaulthandler_Init(config->faulthandler);
964 if (_PyStatus_EXCEPTION(status)) {
965 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800966 }
Nick Coghland6009512014-11-20 21:39:37 +1000967
Victor Stinnerb45d2592019-06-20 00:05:23 +0200968 status = _PyUnicode_InitEncodings(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200969 if (_PyStatus_EXCEPTION(status)) {
970 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800971 }
Nick Coghland6009512014-11-20 21:39:37 +1000972
Victor Stinner331a6a52019-05-27 16:39:22 +0200973 if (config->install_signal_handlers) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200974 status = init_signals(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200975 if (_PyStatus_EXCEPTION(status)) {
976 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800977 }
978 }
Nick Coghland6009512014-11-20 21:39:37 +1000979
Victor Stinner331a6a52019-05-27 16:39:22 +0200980 if (_PyTraceMalloc_Init(config->tracemalloc) < 0) {
981 return _PyStatus_ERR("can't initialize tracemalloc");
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200982 }
Nick Coghland6009512014-11-20 21:39:37 +1000983
Victor Stinner331a6a52019-05-27 16:39:22 +0200984 status = add_main_module(interp);
985 if (_PyStatus_EXCEPTION(status)) {
986 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800987 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800988
Victor Stinnerb45d2592019-06-20 00:05:23 +0200989 status = init_sys_streams(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200990 if (_PyStatus_EXCEPTION(status)) {
991 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800992 }
Nick Coghland6009512014-11-20 21:39:37 +1000993
994 /* Initialize warnings. */
Victor Stinner37cd9822018-11-16 11:55:35 +0100995 PyObject *warnoptions = PySys_GetObject("warnoptions");
996 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
Victor Stinner5d862462017-12-19 11:35:58 +0100997 {
Nick Coghland6009512014-11-20 21:39:37 +1000998 PyObject *warnings_module = PyImport_ImportModule("warnings");
999 if (warnings_module == NULL) {
1000 fprintf(stderr, "'import warnings' failed; traceback:\n");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001001 _PyErr_Print(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001002 }
1003 Py_XDECREF(warnings_module);
1004 }
1005
Victor Stinner43125222019-04-24 18:23:53 +02001006 runtime->initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -07001007
Victor Stinner331a6a52019-05-27 16:39:22 +02001008 if (config->site_import) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02001009 status = init_import_site();
Victor Stinner331a6a52019-05-27 16:39:22 +02001010 if (_PyStatus_EXCEPTION(status)) {
1011 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001012 }
1013 }
Victor Stinnercf215042018-08-29 22:56:06 +02001014
1015#ifndef MS_WINDOWS
Victor Stinner43125222019-04-24 18:23:53 +02001016 emit_stderr_warning_for_legacy_locale(runtime);
Victor Stinnercf215042018-08-29 22:56:06 +02001017#endif
1018
Victor Stinner331a6a52019-05-27 16:39:22 +02001019 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001020}
1021
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001022
Victor Stinner331a6a52019-05-27 16:39:22 +02001023PyStatus
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001024_Py_InitializeMain(void)
1025{
Victor Stinner331a6a52019-05-27 16:39:22 +02001026 PyStatus status = _PyRuntime_Initialize();
1027 if (_PyStatus_EXCEPTION(status)) {
1028 return status;
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001029 }
1030 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinnerb45d2592019-06-20 00:05:23 +02001031 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
Victor Stinner01b1cc12019-11-20 02:27:56 +01001032 return pyinit_main(tstate);
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001033}
1034
1035
Victor Stinner331a6a52019-05-27 16:39:22 +02001036PyStatus
1037Py_InitializeFromConfig(const PyConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -07001038{
Victor Stinner6d1c4672019-05-20 11:02:00 +02001039 if (config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001040 return _PyStatus_ERR("initialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +02001041 }
1042
Victor Stinner331a6a52019-05-27 16:39:22 +02001043 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001044
Victor Stinner331a6a52019-05-27 16:39:22 +02001045 status = _PyRuntime_Initialize();
1046 if (_PyStatus_EXCEPTION(status)) {
1047 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001048 }
1049 _PyRuntimeState *runtime = &_PyRuntime;
1050
Victor Stinnerb45d2592019-06-20 00:05:23 +02001051 PyThreadState *tstate = NULL;
1052 status = pyinit_core(runtime, config, &tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001053 if (_PyStatus_EXCEPTION(status)) {
1054 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001055 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001056 config = &tstate->interp->config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +01001057
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001058 if (config->_init_main) {
Victor Stinner01b1cc12019-11-20 02:27:56 +01001059 status = pyinit_main(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001060 if (_PyStatus_EXCEPTION(status)) {
1061 return status;
Victor Stinner484f20d2019-03-27 02:04:16 +01001062 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001063 }
Victor Stinner484f20d2019-03-27 02:04:16 +01001064
Victor Stinner331a6a52019-05-27 16:39:22 +02001065 return _PyStatus_OK();
Victor Stinner5ac27a52019-03-27 13:40:14 +01001066}
1067
1068
Eric Snow1abcf672017-05-23 21:46:51 -07001069void
Nick Coghland6009512014-11-20 21:39:37 +10001070Py_InitializeEx(int install_sigs)
1071{
Victor Stinner331a6a52019-05-27 16:39:22 +02001072 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001073
Victor Stinner331a6a52019-05-27 16:39:22 +02001074 status = _PyRuntime_Initialize();
1075 if (_PyStatus_EXCEPTION(status)) {
1076 Py_ExitStatusException(status);
Victor Stinner43125222019-04-24 18:23:53 +02001077 }
1078 _PyRuntimeState *runtime = &_PyRuntime;
1079
1080 if (runtime->initialized) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001081 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
1082 return;
1083 }
1084
Victor Stinner331a6a52019-05-27 16:39:22 +02001085 PyConfig config;
Victor Stinner8462a492019-10-01 12:06:16 +02001086 _PyConfig_InitCompatConfig(&config);
Victor Stinner441b10c2019-09-28 04:28:35 +02001087
Victor Stinner1dc6e392018-07-25 02:49:17 +02001088 config.install_signal_handlers = install_sigs;
1089
Victor Stinner331a6a52019-05-27 16:39:22 +02001090 status = Py_InitializeFromConfig(&config);
1091 if (_PyStatus_EXCEPTION(status)) {
1092 Py_ExitStatusException(status);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001093 }
Nick Coghland6009512014-11-20 21:39:37 +10001094}
1095
1096void
1097Py_Initialize(void)
1098{
1099 Py_InitializeEx(1);
1100}
1101
1102
1103#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001104extern void _Py_dump_counts(FILE*);
Nick Coghland6009512014-11-20 21:39:37 +10001105#endif
1106
1107/* Flush stdout and stderr */
1108
1109static int
1110file_is_closed(PyObject *fobj)
1111{
1112 int r;
1113 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1114 if (tmp == NULL) {
1115 PyErr_Clear();
1116 return 0;
1117 }
1118 r = PyObject_IsTrue(tmp);
1119 Py_DECREF(tmp);
1120 if (r < 0)
1121 PyErr_Clear();
1122 return r > 0;
1123}
1124
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001125static int
Nick Coghland6009512014-11-20 21:39:37 +10001126flush_std_files(void)
1127{
1128 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1129 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1130 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001131 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001132
1133 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001134 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001135 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001136 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001137 status = -1;
1138 }
Nick Coghland6009512014-11-20 21:39:37 +10001139 else
1140 Py_DECREF(tmp);
1141 }
1142
1143 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001144 tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001145 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001146 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001147 status = -1;
1148 }
Nick Coghland6009512014-11-20 21:39:37 +10001149 else
1150 Py_DECREF(tmp);
1151 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001152
1153 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001154}
1155
1156/* Undo the effect of Py_Initialize().
1157
1158 Beware: if multiple interpreter and/or thread states exist, these
1159 are not wiped out; only the current thread and interpreter state
1160 are deleted. But since everything else is deleted, those other
1161 interpreter and thread states should no longer be used.
1162
1163 (XXX We should do better, e.g. wipe out all interpreters and
1164 threads.)
1165
1166 Locking: as above.
1167
1168*/
1169
Victor Stinner7eee5be2019-11-20 10:38:34 +01001170
1171static void
1172finalize_interp_types(PyThreadState *tstate, int is_main_interp)
1173{
1174 if (is_main_interp) {
1175 /* Sundry finalizers */
Victor Stinner7eee5be2019-11-20 10:38:34 +01001176 _PyFrame_Fini();
Victor Stinner7eee5be2019-11-20 10:38:34 +01001177 _PyTuple_Fini();
1178 _PyList_Fini();
1179 _PySet_Fini();
1180 _PyBytes_Fini();
1181 _PyLong_Fini();
1182 _PyFloat_Fini();
1183 _PyDict_Fini();
1184 _PySlice_Fini();
1185 }
1186
1187 _PyWarnings_Fini(tstate->interp);
1188
1189 if (is_main_interp) {
1190 _Py_HashRandomization_Fini();
1191 _PyArg_Fini();
1192 _PyAsyncGen_Fini();
1193 _PyContext_Fini();
1194
1195 /* Cleanup Unicode implementation */
1196 _PyUnicode_Fini();
1197 _Py_ClearFileSystemEncoding();
1198 }
1199}
1200
1201
1202static void
1203finalize_interp_clear(PyThreadState *tstate, int is_main_interp)
1204{
1205 /* Clear interpreter state and all thread states */
1206 PyInterpreterState_Clear(tstate->interp);
1207
1208 finalize_interp_types(tstate, is_main_interp);
1209
1210 if (is_main_interp) {
1211 /* XXX Still allocated:
1212 - various static ad-hoc pointers to interned strings
1213 - int and float free list blocks
1214 - whatever various modules and libraries allocate
1215 */
1216
1217 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1218
1219 _PyExc_Fini();
Victor Stinner7eee5be2019-11-20 10:38:34 +01001220 }
Victor Stinner72474072019-11-20 12:25:50 +01001221
1222 _PyGC_Fini(tstate);
Victor Stinner7eee5be2019-11-20 10:38:34 +01001223}
1224
1225
1226static void
1227finalize_interp_delete(PyThreadState *tstate, int is_main_interp)
1228{
1229 if (is_main_interp) {
1230 /* Cleanup auto-thread-state */
1231 _PyGILState_Fini(tstate);
1232 }
1233
Victor Stinner7eee5be2019-11-20 10:38:34 +01001234 PyInterpreterState_Delete(tstate->interp);
1235}
1236
1237
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001238int
1239Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001240{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001241 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001242
Victor Stinner8e91c242019-04-24 17:24:01 +02001243 _PyRuntimeState *runtime = &_PyRuntime;
1244 if (!runtime->initialized) {
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001245 return status;
Victor Stinner8e91c242019-04-24 17:24:01 +02001246 }
Nick Coghland6009512014-11-20 21:39:37 +10001247
Victor Stinnere225beb2019-06-03 18:14:24 +02001248 /* Get current thread state and interpreter pointer */
1249 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
1250 PyInterpreterState *interp = tstate->interp;
Victor Stinner8e91c242019-04-24 17:24:01 +02001251
Victor Stinnerb45d2592019-06-20 00:05:23 +02001252 // Wrap up existing "threading"-module-created, non-daemon threads.
1253 wait_for_thread_shutdown(tstate);
1254
1255 // Make any remaining pending calls.
1256 _Py_FinishPendingCalls(runtime);
1257
Nick Coghland6009512014-11-20 21:39:37 +10001258 /* The interpreter is still entirely intact at this point, and the
1259 * exit funcs may be relying on that. In particular, if some thread
1260 * or exit func is still waiting to do an import, the import machinery
1261 * expects Py_IsInitialized() to return true. So don't say the
Eric Snow842a2f02019-03-15 15:47:51 -06001262 * runtime is uninitialized until after the exit funcs have run.
Nick Coghland6009512014-11-20 21:39:37 +10001263 * Note that Threading.py uses an exit func to do a join on all the
1264 * threads created thru it, so this also protects pending imports in
1265 * the threads created via Threading.
1266 */
Nick Coghland6009512014-11-20 21:39:37 +10001267
Victor Stinnerb45d2592019-06-20 00:05:23 +02001268 call_py_exitfuncs(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001269
Victor Stinnerda273412017-12-15 01:46:02 +01001270 /* Copy the core config, PyInterpreterState_Delete() free
1271 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001272#ifdef Py_REF_DEBUG
Victor Stinner331a6a52019-05-27 16:39:22 +02001273 int show_ref_count = interp->config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001274#endif
1275#ifdef Py_TRACE_REFS
Victor Stinner331a6a52019-05-27 16:39:22 +02001276 int dump_refs = interp->config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001277#endif
1278#ifdef WITH_PYMALLOC
Victor Stinner331a6a52019-05-27 16:39:22 +02001279 int malloc_stats = interp->config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001280#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001281
Nick Coghland6009512014-11-20 21:39:37 +10001282 /* Remaining threads (e.g. daemon threads) will automatically exit
1283 after taking the GIL (in PyEval_RestoreThread()). */
Victor Stinner8e91c242019-04-24 17:24:01 +02001284 runtime->finalizing = tstate;
1285 runtime->initialized = 0;
1286 runtime->core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001287
Victor Stinnere0deff32015-03-24 13:46:18 +01001288 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001289 if (flush_std_files() < 0) {
1290 status = -1;
1291 }
Nick Coghland6009512014-11-20 21:39:37 +10001292
1293 /* Disable signal handling */
1294 PyOS_FiniInterrupts();
1295
1296 /* Collect garbage. This may call finalizers; it's nice to call these
1297 * before all modules are destroyed.
1298 * XXX If a __del__ or weakref callback is triggered here, and tries to
1299 * XXX import a module, bad things can happen, because Python no
1300 * XXX longer believes it's initialized.
1301 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1302 * XXX is easy to provoke that way. I've also seen, e.g.,
1303 * XXX Exception exceptions.ImportError: 'No module named sha'
1304 * XXX in <function callback at 0x008F5718> ignored
1305 * XXX but I'm unclear on exactly how that one happens. In any case,
1306 * XXX I haven't seen a real-life report of either of these.
1307 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001308 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001309#ifdef COUNT_ALLOCS
1310 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1311 each collection might release some types from the type
1312 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001313 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001314 /* nothing */;
1315#endif
Eric Snowdae02762017-09-14 00:35:58 -07001316
Steve Dowerb82e17e2019-05-23 08:45:22 -07001317 /* Clear all loghooks */
1318 /* We want minimal exposure of this function, so define the extern
1319 * here. The linker should discover the correct function without
1320 * exporting a symbol. */
1321 extern void _PySys_ClearAuditHooks(void);
1322 _PySys_ClearAuditHooks();
1323
Nick Coghland6009512014-11-20 21:39:37 +10001324 /* Destroy all modules */
Victor Stinner987a0dc2019-06-19 10:36:10 +02001325 _PyImport_Cleanup(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001326
Inada Naoki91234a12019-06-03 21:30:58 +09001327 /* Print debug stats if any */
1328 _PyEval_Fini();
1329
Victor Stinnere0deff32015-03-24 13:46:18 +01001330 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001331 if (flush_std_files() < 0) {
1332 status = -1;
1333 }
Nick Coghland6009512014-11-20 21:39:37 +10001334
1335 /* Collect final garbage. This disposes of cycles created by
1336 * class definitions, for example.
1337 * XXX This is disabled because it caused too many problems. If
1338 * XXX a __del__ or weakref callback triggers here, Python code has
1339 * XXX a hard time running, because even the sys module has been
1340 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1341 * XXX One symptom is a sequence of information-free messages
1342 * XXX coming from threads (if a __del__ or callback is invoked,
1343 * XXX other threads can execute too, and any exception they encounter
1344 * XXX triggers a comedy of errors as subsystem after subsystem
1345 * XXX fails to find what it *expects* to find in sys to help report
1346 * XXX the exception and consequent unexpected failures). I've also
1347 * XXX seen segfaults then, after adding print statements to the
1348 * XXX Python code getting called.
1349 */
1350#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001351 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001352#endif
1353
1354 /* Disable tracemalloc after all Python objects have been destroyed,
1355 so it is possible to use tracemalloc in objects destructor. */
1356 _PyTraceMalloc_Fini();
1357
1358 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1359 _PyImport_Fini();
1360
1361 /* Cleanup typeobject.c's internal caches. */
1362 _PyType_Fini();
1363
1364 /* unload faulthandler module */
1365 _PyFaulthandler_Fini();
1366
1367 /* Debugging stuff */
1368#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001369 _Py_dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001370#endif
1371 /* dump hash stats */
1372 _PyHash_Fini();
1373
Eric Snowdae02762017-09-14 00:35:58 -07001374#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001375 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001376 _PyDebug_PrintTotalRefs();
1377 }
Eric Snowdae02762017-09-14 00:35:58 -07001378#endif
Nick Coghland6009512014-11-20 21:39:37 +10001379
1380#ifdef Py_TRACE_REFS
1381 /* Display all objects still alive -- this can invoke arbitrary
1382 * __repr__ overrides, so requires a mostly-intact interpreter.
1383 * Alas, a lot of stuff may still be alive now that will be cleaned
1384 * up later.
1385 */
Victor Stinnerda273412017-12-15 01:46:02 +01001386 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001387 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001388 }
Nick Coghland6009512014-11-20 21:39:37 +10001389#endif /* Py_TRACE_REFS */
1390
Victor Stinner7eee5be2019-11-20 10:38:34 +01001391 finalize_interp_clear(tstate, 1);
Nick Coghland6009512014-11-20 21:39:37 +10001392
Victor Stinner7eee5be2019-11-20 10:38:34 +01001393 finalize_interp_delete(tstate, 1);
Nick Coghland6009512014-11-20 21:39:37 +10001394
1395#ifdef Py_TRACE_REFS
1396 /* Display addresses (& refcnts) of all objects still alive.
1397 * An address can be used to find the repr of the object, printed
1398 * above by _Py_PrintReferences.
1399 */
Victor Stinnerda273412017-12-15 01:46:02 +01001400 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001401 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001402 }
Nick Coghland6009512014-11-20 21:39:37 +10001403#endif /* Py_TRACE_REFS */
Victor Stinner34be807c2016-03-14 12:04:26 +01001404#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001405 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001406 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be807c2016-03-14 12:04:26 +01001407 }
Nick Coghland6009512014-11-20 21:39:37 +10001408#endif
1409
Victor Stinner8e91c242019-04-24 17:24:01 +02001410 call_ll_exitfuncs(runtime);
Victor Stinner9316ee42017-11-25 03:17:57 +01001411
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001412 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001413 return status;
1414}
1415
1416void
1417Py_Finalize(void)
1418{
1419 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001420}
1421
1422/* Create and initialize a new interpreter and thread, and return the
1423 new thread. This requires that Py_Initialize() has been called
1424 first.
1425
1426 Unsuccessful initialization yields a NULL pointer. Note that *no*
1427 exception information is available even in this case -- the
1428 exception information is held in the thread, and there is no
1429 thread.
1430
1431 Locking: as above.
1432
1433*/
1434
Victor Stinner331a6a52019-05-27 16:39:22 +02001435static PyStatus
Victor Stinnera7368ac2017-11-15 18:11:45 -08001436new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001437{
Victor Stinner331a6a52019-05-27 16:39:22 +02001438 PyStatus status;
Nick Coghland6009512014-11-20 21:39:37 +10001439
Victor Stinner331a6a52019-05-27 16:39:22 +02001440 status = _PyRuntime_Initialize();
1441 if (_PyStatus_EXCEPTION(status)) {
1442 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001443 }
1444 _PyRuntimeState *runtime = &_PyRuntime;
1445
1446 if (!runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001447 return _PyStatus_ERR("Py_Initialize must be called first");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001448 }
Nick Coghland6009512014-11-20 21:39:37 +10001449
Victor Stinner8a1be612016-03-14 22:07:55 +01001450 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1451 interpreters: disable PyGILState_Check(). */
1452 _PyGILState_check_enabled = 0;
1453
Victor Stinner43125222019-04-24 18:23:53 +02001454 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001455 if (interp == NULL) {
1456 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001457 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001458 }
Nick Coghland6009512014-11-20 21:39:37 +10001459
Victor Stinner43125222019-04-24 18:23:53 +02001460 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001461 if (tstate == NULL) {
1462 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001463 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001464 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001465 }
1466
Victor Stinner43125222019-04-24 18:23:53 +02001467 PyThreadState *save_tstate = PyThreadState_Swap(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001468
Eric Snow1abcf672017-05-23 21:46:51 -07001469 /* Copy the current interpreter config into the new interpreter */
Victor Stinner331a6a52019-05-27 16:39:22 +02001470 PyConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001471 if (save_tstate != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001472 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001473 } else {
1474 /* No current thread state, copy from the main interpreter */
1475 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinner331a6a52019-05-27 16:39:22 +02001476 config = &main_interp->config;
Victor Stinnerda273412017-12-15 01:46:02 +01001477 }
1478
Victor Stinner331a6a52019-05-27 16:39:22 +02001479 status = _PyConfig_Copy(&interp->config, config);
1480 if (_PyStatus_EXCEPTION(status)) {
1481 return status;
Victor Stinnerda273412017-12-15 01:46:02 +01001482 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001483 config = &interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001484
Victor Stinnere7e699e2019-11-20 12:08:13 +01001485 status = pycore_init_types(tstate, 0);
Victor Stinneref9d9b62019-05-22 11:28:22 +02001486
Nick Coghland6009512014-11-20 21:39:37 +10001487 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001488 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001489 if (modules == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001490 return _PyStatus_ERR("can't make modules dictionary");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001491 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001492 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001493
Victor Stinner0a28f8d2019-06-19 02:54:39 +02001494 PyObject *sysmod = _PyImport_FindBuiltin(tstate, "sys");
Eric Snowd393c1b2017-09-14 12:18:12 -06001495 if (sysmod != NULL) {
1496 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinner43125222019-04-24 18:23:53 +02001497 if (interp->sysdict == NULL) {
Eric Snowd393c1b2017-09-14 12:18:12 -06001498 goto handle_error;
Victor Stinner43125222019-04-24 18:23:53 +02001499 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001500 Py_INCREF(interp->sysdict);
1501 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner01b1cc12019-11-20 02:27:56 +01001502 if (_PySys_InitMain(tstate) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001503 return _PyStatus_ERR("can't finish initializing sys");
Victor Stinnerab672812019-01-23 15:04:40 +01001504 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001505 }
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 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001509
Victor Stinner0a28f8d2019-06-19 02:54:39 +02001510 PyObject *bimod = _PyImport_FindBuiltin(tstate, "builtins");
Nick Coghland6009512014-11-20 21:39:37 +10001511 if (bimod != NULL) {
1512 interp->builtins = PyModule_GetDict(bimod);
1513 if (interp->builtins == NULL)
1514 goto handle_error;
1515 Py_INCREF(interp->builtins);
1516 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001517 else if (_PyErr_Occurred(tstate)) {
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001518 goto handle_error;
1519 }
Nick Coghland6009512014-11-20 21:39:37 +10001520
Nick Coghland6009512014-11-20 21:39:37 +10001521 if (bimod != NULL && sysmod != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001522 status = _PyBuiltins_AddExceptions(bimod);
1523 if (_PyStatus_EXCEPTION(status)) {
1524 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001525 }
Nick Coghland6009512014-11-20 21:39:37 +10001526
Victor Stinner331a6a52019-05-27 16:39:22 +02001527 status = _PySys_SetPreliminaryStderr(interp->sysdict);
1528 if (_PyStatus_EXCEPTION(status)) {
1529 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001530 }
Nick Coghland6009512014-11-20 21:39:37 +10001531
Victor Stinnerb45d2592019-06-20 00:05:23 +02001532 status = _PyImportHooks_Init(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001533 if (_PyStatus_EXCEPTION(status)) {
1534 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001535 }
Nick Coghland6009512014-11-20 21:39:37 +10001536
Victor Stinnerb45d2592019-06-20 00:05:23 +02001537 status = init_importlib(tstate, sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +02001538 if (_PyStatus_EXCEPTION(status)) {
1539 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001540 }
Nick Coghland6009512014-11-20 21:39:37 +10001541
Victor Stinner0a28f8d2019-06-19 02:54:39 +02001542 status = init_importlib_external(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001543 if (_PyStatus_EXCEPTION(status)) {
1544 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001545 }
Nick Coghland6009512014-11-20 21:39:37 +10001546
Victor Stinnerb45d2592019-06-20 00:05:23 +02001547 status = _PyUnicode_InitEncodings(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001548 if (_PyStatus_EXCEPTION(status)) {
1549 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001550 }
1551
Victor Stinnerb45d2592019-06-20 00:05:23 +02001552 status = init_sys_streams(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001553 if (_PyStatus_EXCEPTION(status)) {
1554 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001555 }
1556
Victor Stinner331a6a52019-05-27 16:39:22 +02001557 status = add_main_module(interp);
1558 if (_PyStatus_EXCEPTION(status)) {
1559 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001560 }
1561
Victor Stinner331a6a52019-05-27 16:39:22 +02001562 if (config->site_import) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02001563 status = init_import_site();
Victor Stinner331a6a52019-05-27 16:39:22 +02001564 if (_PyStatus_EXCEPTION(status)) {
1565 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001566 }
1567 }
Nick Coghland6009512014-11-20 21:39:37 +10001568 }
1569
Victor Stinnerb45d2592019-06-20 00:05:23 +02001570 if (_PyErr_Occurred(tstate)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001571 goto handle_error;
1572 }
Nick Coghland6009512014-11-20 21:39:37 +10001573
Victor Stinnera7368ac2017-11-15 18:11:45 -08001574 *tstate_p = tstate;
Victor Stinner331a6a52019-05-27 16:39:22 +02001575 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001576
Nick Coghland6009512014-11-20 21:39:37 +10001577handle_error:
1578 /* Oops, it didn't work. Undo it all. */
1579
1580 PyErr_PrintEx(0);
1581 PyThreadState_Clear(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001582 PyThreadState_Delete(tstate);
1583 PyInterpreterState_Delete(interp);
Victor Stinner9da74302019-11-20 11:17:17 +01001584 PyThreadState_Swap(save_tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001585
Victor Stinnera7368ac2017-11-15 18:11:45 -08001586 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001587 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001588}
1589
1590PyThreadState *
1591Py_NewInterpreter(void)
1592{
Stéphane Wirtel9e06d2b2019-03-18 17:10:29 +01001593 PyThreadState *tstate = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001594 PyStatus status = new_interpreter(&tstate);
1595 if (_PyStatus_EXCEPTION(status)) {
1596 Py_ExitStatusException(status);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001597 }
1598 return tstate;
1599
Nick Coghland6009512014-11-20 21:39:37 +10001600}
1601
1602/* Delete an interpreter and its last thread. This requires that the
1603 given thread state is current, that the thread has no remaining
1604 frames, and that it is its interpreter's only remaining thread.
1605 It is a fatal error to violate these constraints.
1606
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001607 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001608 everything, regardless.)
1609
1610 Locking: as above.
1611
1612*/
1613
1614void
1615Py_EndInterpreter(PyThreadState *tstate)
1616{
1617 PyInterpreterState *interp = tstate->interp;
1618
Victor Stinnerb45d2592019-06-20 00:05:23 +02001619 if (tstate != _PyThreadState_GET()) {
Nick Coghland6009512014-11-20 21:39:37 +10001620 Py_FatalError("Py_EndInterpreter: thread is not current");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001621 }
1622 if (tstate->frame != NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001623 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001624 }
Eric Snow5be45a62019-03-08 22:47:07 -07001625 interp->finalizing = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001626
Eric Snow842a2f02019-03-15 15:47:51 -06001627 // Wrap up existing "threading"-module-created, non-daemon threads.
Victor Stinnerb45d2592019-06-20 00:05:23 +02001628 wait_for_thread_shutdown(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001629
Victor Stinnerb45d2592019-06-20 00:05:23 +02001630 call_py_exitfuncs(tstate);
Marcel Plch776407f2017-12-20 11:17:58 +01001631
Victor Stinnerb45d2592019-06-20 00:05:23 +02001632 if (tstate != interp->tstate_head || tstate->next != NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001633 Py_FatalError("Py_EndInterpreter: not the last thread");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001634 }
Nick Coghland6009512014-11-20 21:39:37 +10001635
Victor Stinner987a0dc2019-06-19 10:36:10 +02001636 _PyImport_Cleanup(tstate);
Victor Stinner7eee5be2019-11-20 10:38:34 +01001637 finalize_interp_clear(tstate, 0);
1638 finalize_interp_delete(tstate, 0);
Nick Coghland6009512014-11-20 21:39:37 +10001639}
1640
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001641/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001642
Victor Stinner331a6a52019-05-27 16:39:22 +02001643static PyStatus
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001644add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001645{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001646 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001647 m = PyImport_AddModule("__main__");
1648 if (m == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +02001649 return _PyStatus_ERR("can't create __main__ module");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001650
Nick Coghland6009512014-11-20 21:39:37 +10001651 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001652 ann_dict = PyDict_New();
1653 if ((ann_dict == NULL) ||
1654 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001655 return _PyStatus_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001656 }
1657 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001658
Nick Coghland6009512014-11-20 21:39:37 +10001659 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1660 PyObject *bimod = PyImport_ImportModule("builtins");
1661 if (bimod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001662 return _PyStatus_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001663 }
1664 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001665 return _PyStatus_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001666 }
1667 Py_DECREF(bimod);
1668 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001669
Nick Coghland6009512014-11-20 21:39:37 +10001670 /* Main is a little special - imp.is_builtin("__main__") will return
1671 * False, but BuiltinImporter is still the most appropriate initial
1672 * setting for its __loader__ attribute. A more suitable value will
1673 * be set if __main__ gets further initialized later in the startup
1674 * process.
1675 */
1676 loader = PyDict_GetItemString(d, "__loader__");
1677 if (loader == NULL || loader == Py_None) {
1678 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1679 "BuiltinImporter");
1680 if (loader == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001681 return _PyStatus_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001682 }
1683 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001684 return _PyStatus_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001685 }
1686 Py_DECREF(loader);
1687 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001688 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001689}
1690
Nick Coghland6009512014-11-20 21:39:37 +10001691/* Import the site module (not into __main__ though) */
1692
Victor Stinner331a6a52019-05-27 16:39:22 +02001693static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001694init_import_site(void)
Nick Coghland6009512014-11-20 21:39:37 +10001695{
1696 PyObject *m;
1697 m = PyImport_ImportModule("site");
1698 if (m == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001699 return _PyStatus_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001700 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001701 Py_DECREF(m);
Victor Stinner331a6a52019-05-27 16:39:22 +02001702 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001703}
1704
Victor Stinner874dbe82015-09-04 17:29:57 +02001705/* Check if a file descriptor is valid or not.
1706 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1707static int
1708is_valid_fd(int fd)
1709{
Victor Stinner3092d6b2019-04-17 18:09:12 +02001710/* dup() is faster than fstat(): fstat() can require input/output operations,
1711 whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python
1712 startup. Problem: dup() doesn't check if the file descriptor is valid on
1713 some platforms.
1714
1715 bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other
1716 side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with
1717 EBADF. FreeBSD has similar issue (bpo-32849).
1718
1719 Only use dup() on platforms where dup() is enough to detect invalid FD in
1720 corner cases: on Linux and Windows (bpo-32849). */
1721#if defined(__linux__) || defined(MS_WINDOWS)
1722 if (fd < 0) {
1723 return 0;
1724 }
1725 int fd2;
1726
1727 _Py_BEGIN_SUPPRESS_IPH
1728 fd2 = dup(fd);
1729 if (fd2 >= 0) {
1730 close(fd2);
1731 }
1732 _Py_END_SUPPRESS_IPH
1733
1734 return (fd2 >= 0);
1735#else
Victor Stinner1c4670e2017-05-04 00:45:56 +02001736 struct stat st;
1737 return (fstat(fd, &st) == 0);
Victor Stinner1c4670e2017-05-04 00:45:56 +02001738#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001739}
1740
1741/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001742static PyObject*
Victor Stinner331a6a52019-05-27 16:39:22 +02001743create_stdio(const PyConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001744 int fd, int write_mode, const char* name,
Victor Stinner709d23d2019-05-02 14:56:30 -04001745 const wchar_t* encoding, const wchar_t* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001746{
1747 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1748 const char* mode;
1749 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001750 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001751 int buffering, isatty;
1752 _Py_IDENTIFIER(open);
1753 _Py_IDENTIFIER(isatty);
1754 _Py_IDENTIFIER(TextIOWrapper);
1755 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001756 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001757
Victor Stinner874dbe82015-09-04 17:29:57 +02001758 if (!is_valid_fd(fd))
1759 Py_RETURN_NONE;
1760
Nick Coghland6009512014-11-20 21:39:37 +10001761 /* stdin is always opened in buffered mode, first because it shouldn't
1762 make a difference in common use cases, second because TextIOWrapper
1763 depends on the presence of a read1() method which only exists on
1764 buffered streams.
1765 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001766 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001767 buffering = 0;
1768 else
1769 buffering = -1;
1770 if (write_mode)
1771 mode = "wb";
1772 else
1773 mode = "rb";
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001774 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOO",
Nick Coghland6009512014-11-20 21:39:37 +10001775 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001776 Py_None, Py_None, /* encoding, errors */
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001777 Py_None, Py_False); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001778 if (buf == NULL)
1779 goto error;
1780
1781 if (buffering) {
1782 _Py_IDENTIFIER(raw);
1783 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1784 if (raw == NULL)
1785 goto error;
1786 }
1787 else {
1788 raw = buf;
1789 Py_INCREF(raw);
1790 }
1791
Steve Dower39294992016-08-30 21:22:36 -07001792#ifdef MS_WINDOWS
1793 /* Windows console IO is always UTF-8 encoded */
1794 if (PyWindowsConsoleIO_Check(raw))
Victor Stinner709d23d2019-05-02 14:56:30 -04001795 encoding = L"utf-8";
Steve Dower39294992016-08-30 21:22:36 -07001796#endif
1797
Nick Coghland6009512014-11-20 21:39:37 +10001798 text = PyUnicode_FromString(name);
1799 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1800 goto error;
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001801 res = _PyObject_CallMethodIdNoArgs(raw, &PyId_isatty);
Nick Coghland6009512014-11-20 21:39:37 +10001802 if (res == NULL)
1803 goto error;
1804 isatty = PyObject_IsTrue(res);
1805 Py_DECREF(res);
1806 if (isatty == -1)
1807 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001808 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001809 write_through = Py_True;
1810 else
1811 write_through = Py_False;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001812 if (isatty && buffered_stdio)
Nick Coghland6009512014-11-20 21:39:37 +10001813 line_buffering = Py_True;
1814 else
1815 line_buffering = Py_False;
1816
1817 Py_CLEAR(raw);
1818 Py_CLEAR(text);
1819
1820#ifdef MS_WINDOWS
1821 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1822 newlines to "\n".
1823 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1824 newline = NULL;
1825#else
1826 /* sys.stdin: split lines at "\n".
1827 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1828 newline = "\n";
1829#endif
1830
Victor Stinner709d23d2019-05-02 14:56:30 -04001831 PyObject *encoding_str = PyUnicode_FromWideChar(encoding, -1);
1832 if (encoding_str == NULL) {
1833 Py_CLEAR(buf);
1834 goto error;
1835 }
1836
1837 PyObject *errors_str = PyUnicode_FromWideChar(errors, -1);
1838 if (errors_str == NULL) {
1839 Py_CLEAR(buf);
1840 Py_CLEAR(encoding_str);
1841 goto error;
1842 }
1843
1844 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OOOsOO",
1845 buf, encoding_str, errors_str,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001846 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001847 Py_CLEAR(buf);
Victor Stinner709d23d2019-05-02 14:56:30 -04001848 Py_CLEAR(encoding_str);
1849 Py_CLEAR(errors_str);
Nick Coghland6009512014-11-20 21:39:37 +10001850 if (stream == NULL)
1851 goto error;
1852
1853 if (write_mode)
1854 mode = "w";
1855 else
1856 mode = "r";
1857 text = PyUnicode_FromString(mode);
1858 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1859 goto error;
1860 Py_CLEAR(text);
1861 return stream;
1862
1863error:
1864 Py_XDECREF(buf);
1865 Py_XDECREF(stream);
1866 Py_XDECREF(text);
1867 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001868
Victor Stinner874dbe82015-09-04 17:29:57 +02001869 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1870 /* Issue #24891: the file descriptor was closed after the first
1871 is_valid_fd() check was called. Ignore the OSError and set the
1872 stream to None. */
1873 PyErr_Clear();
1874 Py_RETURN_NONE;
1875 }
1876 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001877}
1878
1879/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinner331a6a52019-05-27 16:39:22 +02001880static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001881init_sys_streams(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10001882{
1883 PyObject *iomod = NULL, *wrapper;
1884 PyObject *bimod = NULL;
1885 PyObject *m;
1886 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001887 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001888 PyObject * encoding_attr;
Victor Stinner331a6a52019-05-27 16:39:22 +02001889 PyStatus res = _PyStatus_OK();
Victor Stinnerb45d2592019-06-20 00:05:23 +02001890 const PyConfig *config = &tstate->interp->config;
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001891
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001892 /* Check that stdin is not a directory
1893 Using shell redirection, you can redirect stdin to a directory,
1894 crashing the Python interpreter. Catch this common mistake here
1895 and output a useful error message. Note that under MS Windows,
1896 the shell already prevents that. */
1897#ifndef MS_WINDOWS
1898 struct _Py_stat_struct sb;
1899 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1900 S_ISDIR(sb.st_mode)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001901 return _PyStatus_ERR("<stdin> is a directory, cannot continue");
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001902 }
1903#endif
1904
Nick Coghland6009512014-11-20 21:39:37 +10001905 /* Hack to avoid a nasty recursion issue when Python is invoked
1906 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1907 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1908 goto error;
1909 }
1910 Py_DECREF(m);
1911
1912 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1913 goto error;
1914 }
1915 Py_DECREF(m);
1916
1917 if (!(bimod = PyImport_ImportModule("builtins"))) {
1918 goto error;
1919 }
1920
1921 if (!(iomod = PyImport_ImportModule("io"))) {
1922 goto error;
1923 }
1924 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1925 goto error;
1926 }
1927
1928 /* Set builtins.open */
1929 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1930 Py_DECREF(wrapper);
1931 goto error;
1932 }
1933 Py_DECREF(wrapper);
1934
Nick Coghland6009512014-11-20 21:39:37 +10001935 /* Set sys.stdin */
1936 fd = fileno(stdin);
1937 /* Under some conditions stdin, stdout and stderr may not be connected
1938 * and fileno() may point to an invalid file descriptor. For example
1939 * GUI apps don't have valid standard streams by default.
1940 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001941 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001942 config->stdio_encoding,
1943 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001944 if (std == NULL)
1945 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001946 PySys_SetObject("__stdin__", std);
1947 _PySys_SetObjectId(&PyId_stdin, std);
1948 Py_DECREF(std);
1949
1950 /* Set sys.stdout */
1951 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001952 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001953 config->stdio_encoding,
1954 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001955 if (std == NULL)
1956 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001957 PySys_SetObject("__stdout__", std);
1958 _PySys_SetObjectId(&PyId_stdout, std);
1959 Py_DECREF(std);
1960
1961#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1962 /* Set sys.stderr, replaces the preliminary stderr */
1963 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001964 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001965 config->stdio_encoding,
Victor Stinner709d23d2019-05-02 14:56:30 -04001966 L"backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001967 if (std == NULL)
1968 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001969
1970 /* Same as hack above, pre-import stderr's codec to avoid recursion
1971 when import.c tries to write to stderr in verbose mode. */
1972 encoding_attr = PyObject_GetAttrString(std, "encoding");
1973 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001974 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001975 if (std_encoding != NULL) {
1976 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1977 Py_XDECREF(codec_info);
1978 }
1979 Py_DECREF(encoding_attr);
1980 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001981 _PyErr_Clear(tstate); /* Not a fatal error if codec isn't available */
Nick Coghland6009512014-11-20 21:39:37 +10001982
1983 if (PySys_SetObject("__stderr__", std) < 0) {
1984 Py_DECREF(std);
1985 goto error;
1986 }
1987 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1988 Py_DECREF(std);
1989 goto error;
1990 }
1991 Py_DECREF(std);
1992#endif
1993
Victor Stinnera7368ac2017-11-15 18:11:45 -08001994 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001995
Victor Stinnera7368ac2017-11-15 18:11:45 -08001996error:
Victor Stinner331a6a52019-05-27 16:39:22 +02001997 res = _PyStatus_ERR("can't initialize sys standard streams");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001998
1999done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02002000 _Py_ClearStandardStreamEncoding();
Victor Stinner31e99082017-12-20 23:41:38 +01002001
Nick Coghland6009512014-11-20 21:39:37 +10002002 Py_XDECREF(bimod);
2003 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08002004 return res;
Nick Coghland6009512014-11-20 21:39:37 +10002005}
2006
2007
Victor Stinner10dc4842015-03-24 12:01:30 +01002008static void
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002009_Py_FatalError_DumpTracebacks(int fd, PyInterpreterState *interp,
2010 PyThreadState *tstate)
Victor Stinner10dc4842015-03-24 12:01:30 +01002011{
Victor Stinner10dc4842015-03-24 12:01:30 +01002012 fputc('\n', stderr);
2013 fflush(stderr);
2014
2015 /* display the current Python stack */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002016 _Py_DumpTracebackThreads(fd, interp, tstate);
Victor Stinner10dc4842015-03-24 12:01:30 +01002017}
Victor Stinner791da1c2016-03-14 16:53:12 +01002018
2019/* Print the current exception (if an exception is set) with its traceback,
2020 or display the current Python stack.
2021
2022 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
2023 called on catastrophic cases.
2024
2025 Return 1 if the traceback was displayed, 0 otherwise. */
2026
2027static int
2028_Py_FatalError_PrintExc(int fd)
2029{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002030 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner791da1c2016-03-14 16:53:12 +01002031 PyObject *ferr, *res;
2032 PyObject *exception, *v, *tb;
2033 int has_tb;
2034
Victor Stinnerb45d2592019-06-20 00:05:23 +02002035 _PyErr_Fetch(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002036 if (exception == NULL) {
2037 /* No current exception */
2038 return 0;
2039 }
2040
2041 ferr = _PySys_GetObjectId(&PyId_stderr);
2042 if (ferr == NULL || ferr == Py_None) {
2043 /* sys.stderr is not set yet or set to None,
2044 no need to try to display the exception */
2045 return 0;
2046 }
2047
Victor Stinnerb45d2592019-06-20 00:05:23 +02002048 _PyErr_NormalizeException(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002049 if (tb == NULL) {
2050 tb = Py_None;
2051 Py_INCREF(tb);
2052 }
2053 PyException_SetTraceback(v, tb);
2054 if (exception == NULL) {
2055 /* PyErr_NormalizeException() failed */
2056 return 0;
2057 }
2058
2059 has_tb = (tb != Py_None);
2060 PyErr_Display(exception, v, tb);
2061 Py_XDECREF(exception);
2062 Py_XDECREF(v);
2063 Py_XDECREF(tb);
2064
2065 /* sys.stderr may be buffered: call sys.stderr.flush() */
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002066 res = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002067 if (res == NULL) {
2068 _PyErr_Clear(tstate);
2069 }
2070 else {
Victor Stinner791da1c2016-03-14 16:53:12 +01002071 Py_DECREF(res);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002072 }
Victor Stinner791da1c2016-03-14 16:53:12 +01002073
2074 return has_tb;
2075}
2076
Nick Coghland6009512014-11-20 21:39:37 +10002077/* Print fatal error message and abort */
2078
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002079#ifdef MS_WINDOWS
2080static void
2081fatal_output_debug(const char *msg)
2082{
2083 /* buffer of 256 bytes allocated on the stack */
2084 WCHAR buffer[256 / sizeof(WCHAR)];
2085 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2086 size_t msglen;
2087
2088 OutputDebugStringW(L"Fatal Python error: ");
2089
2090 msglen = strlen(msg);
2091 while (msglen) {
2092 size_t i;
2093
2094 if (buflen > msglen) {
2095 buflen = msglen;
2096 }
2097
2098 /* Convert the message to wchar_t. This uses a simple one-to-one
2099 conversion, assuming that the this error message actually uses
2100 ASCII only. If this ceases to be true, we will have to convert. */
2101 for (i=0; i < buflen; ++i) {
2102 buffer[i] = msg[i];
2103 }
2104 buffer[i] = L'\0';
2105 OutputDebugStringW(buffer);
2106
2107 msg += buflen;
2108 msglen -= buflen;
2109 }
2110 OutputDebugStringW(L"\n");
2111}
2112#endif
2113
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002114
2115static void
2116fatal_error_dump_runtime(FILE *stream, _PyRuntimeState *runtime)
2117{
2118 fprintf(stream, "Python runtime state: ");
2119 if (runtime->finalizing) {
2120 fprintf(stream, "finalizing (tstate=%p)", runtime->finalizing);
2121 }
2122 else if (runtime->initialized) {
2123 fprintf(stream, "initialized");
2124 }
2125 else if (runtime->core_initialized) {
2126 fprintf(stream, "core initialized");
2127 }
2128 else if (runtime->preinitialized) {
2129 fprintf(stream, "preinitialized");
2130 }
2131 else if (runtime->preinitializing) {
2132 fprintf(stream, "preinitializing");
2133 }
2134 else {
2135 fprintf(stream, "unknown");
2136 }
2137 fprintf(stream, "\n");
2138 fflush(stream);
2139}
2140
2141
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002142static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002143fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002144{
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002145 FILE *stream = stderr;
2146 const int fd = fileno(stream);
Victor Stinner53345a42015-03-25 01:55:14 +01002147 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002148
2149 if (reentrant) {
2150 /* Py_FatalError() caused a second fatal error.
2151 Example: flush_std_files() raises a recursion error. */
2152 goto exit;
2153 }
2154 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002155
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002156 fprintf(stream, "Fatal Python error: ");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002157 if (prefix) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002158 fputs(prefix, stream);
2159 fputs(": ", stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002160 }
2161 if (msg) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002162 fputs(msg, stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002163 }
2164 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002165 fprintf(stream, "<message not set>");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002166 }
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002167 fputs("\n", stream);
2168 fflush(stream); /* it helps in Windows debug build */
2169
2170 _PyRuntimeState *runtime = &_PyRuntime;
2171 fatal_error_dump_runtime(stream, runtime);
2172
2173 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
2174 PyInterpreterState *interp = NULL;
2175 if (tstate != NULL) {
2176 interp = tstate->interp;
2177 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002178
Victor Stinner3a228ab2018-11-01 00:26:41 +01002179 /* Check if the current thread has a Python thread state
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002180 and holds the GIL.
Victor Stinner3a228ab2018-11-01 00:26:41 +01002181
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002182 tss_tstate is NULL if Py_FatalError() is called from a C thread which
2183 has no Python thread state.
2184
2185 tss_tstate != tstate if the current Python thread does not hold the GIL.
2186 */
2187 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2188 int has_tstate_and_gil = (tss_tstate != NULL && tss_tstate == tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002189 if (has_tstate_and_gil) {
2190 /* If an exception is set, print the exception with its traceback */
2191 if (!_Py_FatalError_PrintExc(fd)) {
2192 /* No exception is set, or an exception is set without traceback */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002193 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002194 }
2195 }
2196 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002197 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002198 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002199
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002200 /* The main purpose of faulthandler is to display the traceback.
2201 This function already did its best to display a traceback.
2202 Disable faulthandler to prevent writing a second traceback
2203 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002204 _PyFaulthandler_Fini();
2205
Victor Stinner791da1c2016-03-14 16:53:12 +01002206 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002207 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002208 /* Flush sys.stdout and sys.stderr */
2209 flush_std_files();
2210 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002211
Nick Coghland6009512014-11-20 21:39:37 +10002212#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002213 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002214#endif /* MS_WINDOWS */
2215
2216exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002217 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002218#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002219 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002220#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002221 abort();
2222 }
2223 else {
2224 exit(status);
2225 }
2226}
2227
Victor Stinner19760862017-12-20 01:41:59 +01002228void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002229Py_FatalError(const char *msg)
2230{
2231 fatal_error(NULL, msg, -1);
2232}
2233
Victor Stinner19760862017-12-20 01:41:59 +01002234void _Py_NO_RETURN
Victor Stinner331a6a52019-05-27 16:39:22 +02002235Py_ExitStatusException(PyStatus status)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002236{
Victor Stinner331a6a52019-05-27 16:39:22 +02002237 if (_PyStatus_IS_EXIT(status)) {
2238 exit(status.exitcode);
Victor Stinnerdbacfc22019-05-16 16:39:26 +02002239 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002240 else if (_PyStatus_IS_ERROR(status)) {
2241 fatal_error(status.func, status.err_msg, 1);
Victor Stinnerdfe88472019-03-01 12:14:41 +01002242 }
2243 else {
Victor Stinner331a6a52019-05-27 16:39:22 +02002244 Py_FatalError("Py_ExitStatusException() must not be called on success");
Victor Stinnerdfe88472019-03-01 12:14:41 +01002245 }
Nick Coghland6009512014-11-20 21:39:37 +10002246}
2247
2248/* Clean up and exit */
2249
Victor Stinnerd7292b52016-06-17 12:29:00 +02002250# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002251
Nick Coghland6009512014-11-20 21:39:37 +10002252/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002253void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002254{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002255 PyInterpreterState *is = _PyInterpreterState_GET_UNSAFE();
Marcel Plch776407f2017-12-20 11:17:58 +01002256
Antoine Pitroufc5db952017-12-13 02:29:07 +01002257 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002258 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2259
2260 is->pyexitfunc = func;
2261 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002262}
2263
2264static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002265call_py_exitfuncs(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002266{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002267 PyInterpreterState *interp = tstate->interp;
2268 if (interp->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002269 return;
2270
Victor Stinnerb45d2592019-06-20 00:05:23 +02002271 (*interp->pyexitfunc)(interp->pyexitmodule);
2272 _PyErr_Clear(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10002273}
2274
2275/* Wait until threading._shutdown completes, provided
2276 the threading module was imported in the first place.
2277 The shutdown routine will wait until all non-daemon
2278 "threading" threads have completed. */
2279static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002280wait_for_thread_shutdown(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002281{
Nick Coghland6009512014-11-20 21:39:37 +10002282 _Py_IDENTIFIER(_shutdown);
2283 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002284 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002285 if (threading == NULL) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02002286 if (_PyErr_Occurred(tstate)) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002287 PyErr_WriteUnraisable(NULL);
2288 }
2289 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002290 return;
2291 }
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002292 result = _PyObject_CallMethodIdNoArgs(threading, &PyId__shutdown);
Nick Coghland6009512014-11-20 21:39:37 +10002293 if (result == NULL) {
2294 PyErr_WriteUnraisable(threading);
2295 }
2296 else {
2297 Py_DECREF(result);
2298 }
2299 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002300}
2301
2302#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002303int Py_AtExit(void (*func)(void))
2304{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002305 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002306 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002307 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002308 return 0;
2309}
2310
2311static void
Victor Stinner8e91c242019-04-24 17:24:01 +02002312call_ll_exitfuncs(_PyRuntimeState *runtime)
Nick Coghland6009512014-11-20 21:39:37 +10002313{
Victor Stinner8e91c242019-04-24 17:24:01 +02002314 while (runtime->nexitfuncs > 0) {
Victor Stinner87d23a02019-04-26 05:49:26 +02002315 /* pop last function from the list */
2316 runtime->nexitfuncs--;
2317 void (*exitfunc)(void) = runtime->exitfuncs[runtime->nexitfuncs];
2318 runtime->exitfuncs[runtime->nexitfuncs] = NULL;
2319
2320 exitfunc();
Victor Stinner8e91c242019-04-24 17:24:01 +02002321 }
Nick Coghland6009512014-11-20 21:39:37 +10002322
2323 fflush(stdout);
2324 fflush(stderr);
2325}
2326
Victor Stinnercfc88312018-08-01 16:41:25 +02002327void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002328Py_Exit(int sts)
2329{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002330 if (Py_FinalizeEx() < 0) {
2331 sts = 120;
2332 }
Nick Coghland6009512014-11-20 21:39:37 +10002333
2334 exit(sts);
2335}
2336
Victor Stinner331a6a52019-05-27 16:39:22 +02002337static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02002338init_signals(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002339{
2340#ifdef SIGPIPE
2341 PyOS_setsig(SIGPIPE, SIG_IGN);
2342#endif
2343#ifdef SIGXFZ
2344 PyOS_setsig(SIGXFZ, SIG_IGN);
2345#endif
2346#ifdef SIGXFSZ
2347 PyOS_setsig(SIGXFSZ, SIG_IGN);
2348#endif
2349 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerb45d2592019-06-20 00:05:23 +02002350 if (_PyErr_Occurred(tstate)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02002351 return _PyStatus_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002352 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002353 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002354}
2355
2356
2357/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2358 *
2359 * All of the code in this function must only use async-signal-safe functions,
2360 * listed at `man 7 signal` or
2361 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2362 */
2363void
2364_Py_RestoreSignals(void)
2365{
2366#ifdef SIGPIPE
2367 PyOS_setsig(SIGPIPE, SIG_DFL);
2368#endif
2369#ifdef SIGXFZ
2370 PyOS_setsig(SIGXFZ, SIG_DFL);
2371#endif
2372#ifdef SIGXFSZ
2373 PyOS_setsig(SIGXFSZ, SIG_DFL);
2374#endif
2375}
2376
2377
2378/*
2379 * The file descriptor fd is considered ``interactive'' if either
2380 * a) isatty(fd) is TRUE, or
2381 * b) the -i flag was given, and the filename associated with
2382 * the descriptor is NULL or "<stdin>" or "???".
2383 */
2384int
2385Py_FdIsInteractive(FILE *fp, const char *filename)
2386{
2387 if (isatty((int)fileno(fp)))
2388 return 1;
2389 if (!Py_InteractiveFlag)
2390 return 0;
2391 return (filename == NULL) ||
2392 (strcmp(filename, "<stdin>") == 0) ||
2393 (strcmp(filename, "???") == 0);
2394}
2395
2396
Nick Coghland6009512014-11-20 21:39:37 +10002397/* Wrappers around sigaction() or signal(). */
2398
2399PyOS_sighandler_t
2400PyOS_getsig(int sig)
2401{
2402#ifdef HAVE_SIGACTION
2403 struct sigaction context;
2404 if (sigaction(sig, NULL, &context) == -1)
2405 return SIG_ERR;
2406 return context.sa_handler;
2407#else
2408 PyOS_sighandler_t handler;
2409/* Special signal handling for the secure CRT in Visual Studio 2005 */
2410#if defined(_MSC_VER) && _MSC_VER >= 1400
2411 switch (sig) {
2412 /* Only these signals are valid */
2413 case SIGINT:
2414 case SIGILL:
2415 case SIGFPE:
2416 case SIGSEGV:
2417 case SIGTERM:
2418 case SIGBREAK:
2419 case SIGABRT:
2420 break;
2421 /* Don't call signal() with other values or it will assert */
2422 default:
2423 return SIG_ERR;
2424 }
2425#endif /* _MSC_VER && _MSC_VER >= 1400 */
2426 handler = signal(sig, SIG_IGN);
2427 if (handler != SIG_ERR)
2428 signal(sig, handler);
2429 return handler;
2430#endif
2431}
2432
2433/*
2434 * All of the code in this function must only use async-signal-safe functions,
2435 * listed at `man 7 signal` or
2436 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2437 */
2438PyOS_sighandler_t
2439PyOS_setsig(int sig, PyOS_sighandler_t handler)
2440{
2441#ifdef HAVE_SIGACTION
2442 /* Some code in Modules/signalmodule.c depends on sigaction() being
2443 * used here if HAVE_SIGACTION is defined. Fix that if this code
2444 * changes to invalidate that assumption.
2445 */
2446 struct sigaction context, ocontext;
2447 context.sa_handler = handler;
2448 sigemptyset(&context.sa_mask);
2449 context.sa_flags = 0;
2450 if (sigaction(sig, &context, &ocontext) == -1)
2451 return SIG_ERR;
2452 return ocontext.sa_handler;
2453#else
2454 PyOS_sighandler_t oldhandler;
2455 oldhandler = signal(sig, handler);
2456#ifdef HAVE_SIGINTERRUPT
2457 siginterrupt(sig, 1);
2458#endif
2459 return oldhandler;
2460#endif
2461}
2462
2463#ifdef __cplusplus
2464}
2465#endif