blob: 5174f749c68d62a90f7ad69827a0dfe98a1b22a7 [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 Stinner331a6a52019-05-27 16:39:22 +02009#include "pycore_initconfig.h"
Victor Stinner353933e2018-11-23 13:08:26 +010010#include "pycore_fileutils.h"
Victor Stinner27e2d1f2018-11-01 00:52:28 +010011#include "pycore_hamt.h"
Victor Stinnera1c249c2018-11-01 03:15:58 +010012#include "pycore_pathconfig.h"
Victor Stinner621cebe2018-11-12 16:53:38 +010013#include "pycore_pylifecycle.h"
14#include "pycore_pymem.h"
15#include "pycore_pystate.h"
Victor Stinnered488662019-05-20 00:14:57 +020016#include "pycore_traceback.h"
Nick Coghland6009512014-11-20 21:39:37 +100017#include "grammar.h"
18#include "node.h"
19#include "token.h"
20#include "parsetok.h"
21#include "errcode.h"
22#include "code.h"
23#include "symtable.h"
24#include "ast.h"
25#include "marshal.h"
26#include "osdefs.h"
27#include <locale.h>
28
29#ifdef HAVE_SIGNAL_H
30#include <signal.h>
31#endif
32
33#ifdef MS_WINDOWS
34#include "malloc.h" /* for alloca */
35#endif
36
37#ifdef HAVE_LANGINFO_H
38#include <langinfo.h>
39#endif
40
41#ifdef MS_WINDOWS
42#undef BYTE
43#include "windows.h"
Steve Dower39294992016-08-30 21:22:36 -070044
45extern PyTypeObject PyWindowsConsoleIO_Type;
46#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
Nick Coghland6009512014-11-20 21:39:37 +100047#endif
48
49_Py_IDENTIFIER(flush);
50_Py_IDENTIFIER(name);
51_Py_IDENTIFIER(stdin);
52_Py_IDENTIFIER(stdout);
53_Py_IDENTIFIER(stderr);
Eric Snow3f9eee62017-09-15 16:35:20 -060054_Py_IDENTIFIER(threading);
Nick Coghland6009512014-11-20 21:39:37 +100055
56#ifdef __cplusplus
57extern "C" {
58#endif
59
Nick Coghland6009512014-11-20 21:39:37 +100060extern grammar _PyParser_Grammar; /* From graminit.c */
61
62/* Forward */
Victor Stinner331a6a52019-05-27 16:39:22 +020063static PyStatus add_main_module(PyInterpreterState *interp);
64static PyStatus init_import_size(void);
65static PyStatus init_sys_streams(PyInterpreterState *interp);
66static PyStatus init_signals(void);
Marcel Plch776407f2017-12-20 11:17:58 +010067static void call_py_exitfuncs(PyInterpreterState *);
Nick Coghland6009512014-11-20 21:39:37 +100068static void wait_for_thread_shutdown(void);
Victor Stinner8e91c242019-04-24 17:24:01 +020069static void call_ll_exitfuncs(_PyRuntimeState *runtime);
Nick Coghland6009512014-11-20 21:39:37 +100070
Gregory P. Smith38f11cc2019-02-16 12:57:40 -080071int _Py_UnhandledKeyboardInterrupt = 0;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080072_PyRuntimeState _PyRuntime = _PyRuntimeState_INIT;
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010073static int runtime_initialized = 0;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060074
Victor Stinner331a6a52019-05-27 16:39:22 +020075PyStatus
Eric Snow2ebc5ce2017-09-07 23:51:28 -060076_PyRuntime_Initialize(void)
77{
78 /* XXX We only initialize once in the process, which aligns with
79 the static initialization of the former globals now found in
80 _PyRuntime. However, _PyRuntime *should* be initialized with
81 every Py_Initialize() call, but doing so breaks the runtime.
82 This is because the runtime state is not properly finalized
83 currently. */
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010084 if (runtime_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +020085 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -080086 }
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010087 runtime_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080088
89 return _PyRuntimeState_Init(&_PyRuntime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -060090}
91
92void
93_PyRuntime_Finalize(void)
94{
95 _PyRuntimeState_Fini(&_PyRuntime);
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010096 runtime_initialized = 0;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060097}
98
99int
100_Py_IsFinalizing(void)
101{
102 return _PyRuntime.finalizing != NULL;
103}
104
Nick Coghland6009512014-11-20 21:39:37 +1000105/* Hack to force loading of object files */
106int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
107 PyOS_mystrnicmp; /* Python/pystrcmp.o */
108
109/* PyModule_GetWarningsModule is no longer necessary as of 2.6
110since _warnings is builtin. This API should not be used. */
111PyObject *
112PyModule_GetWarningsModule(void)
113{
114 return PyImport_ImportModule("warnings");
115}
116
Eric Snowc7ec9982017-05-23 23:00:52 -0700117
Eric Snow1abcf672017-05-23 21:46:51 -0700118/* APIs to access the initialization flags
119 *
120 * Can be called prior to Py_Initialize.
121 */
Nick Coghland6009512014-11-20 21:39:37 +1000122
Eric Snow1abcf672017-05-23 21:46:51 -0700123int
124_Py_IsCoreInitialized(void)
125{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600126 return _PyRuntime.core_initialized;
Eric Snow1abcf672017-05-23 21:46:51 -0700127}
Nick Coghland6009512014-11-20 21:39:37 +1000128
129int
130Py_IsInitialized(void)
131{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600132 return _PyRuntime.initialized;
Nick Coghland6009512014-11-20 21:39:37 +1000133}
134
Nick Coghlan6ea41862017-06-11 13:16:15 +1000135
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000136/* Global initializations. Can be undone by Py_FinalizeEx(). Don't
137 call this twice without an intervening Py_FinalizeEx() call. When
Nick Coghland6009512014-11-20 21:39:37 +1000138 initializations fail, a fatal error is issued and the function does
139 not return. On return, the first thread and interpreter state have
140 been created.
141
142 Locking: you must hold the interpreter lock while calling this.
143 (If the lock has not yet been initialized, that's equivalent to
144 having the lock, but you cannot use multiple threads.)
145
146*/
147
Victor Stinner331a6a52019-05-27 16:39:22 +0200148static PyStatus
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400149init_importlib(PyInterpreterState *interp, PyObject *sysmod)
Nick Coghland6009512014-11-20 21:39:37 +1000150{
151 PyObject *importlib;
152 PyObject *impmod;
Nick Coghland6009512014-11-20 21:39:37 +1000153 PyObject *value;
Victor Stinner331a6a52019-05-27 16:39:22 +0200154 int verbose = interp->config.verbose;
Nick Coghland6009512014-11-20 21:39:37 +1000155
156 /* Import _importlib through its frozen version, _frozen_importlib. */
157 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200158 return _PyStatus_ERR("can't import _frozen_importlib");
Nick Coghland6009512014-11-20 21:39:37 +1000159 }
Victor Stinnerc96be812019-05-14 17:34:56 +0200160 else if (verbose) {
Nick Coghland6009512014-11-20 21:39:37 +1000161 PySys_FormatStderr("import _frozen_importlib # frozen\n");
162 }
163 importlib = PyImport_AddModule("_frozen_importlib");
164 if (importlib == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200165 return _PyStatus_ERR("couldn't get _frozen_importlib from sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000166 }
167 interp->importlib = importlib;
168 Py_INCREF(interp->importlib);
169
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300170 interp->import_func = PyDict_GetItemString(interp->builtins, "__import__");
171 if (interp->import_func == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +0200172 return _PyStatus_ERR("__import__ not found");
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300173 Py_INCREF(interp->import_func);
174
Victor Stinnercd6e6942015-09-18 09:11:57 +0200175 /* Import the _imp module */
Benjamin Petersonc65ef772018-01-29 11:33:57 -0800176 impmod = PyInit__imp();
Nick Coghland6009512014-11-20 21:39:37 +1000177 if (impmod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200178 return _PyStatus_ERR("can't import _imp");
Nick Coghland6009512014-11-20 21:39:37 +1000179 }
Victor Stinnerc96be812019-05-14 17:34:56 +0200180 else if (verbose) {
Victor Stinnercd6e6942015-09-18 09:11:57 +0200181 PySys_FormatStderr("import _imp # builtin\n");
Nick Coghland6009512014-11-20 21:39:37 +1000182 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600183 if (_PyImport_SetModuleString("_imp", impmod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200184 return _PyStatus_ERR("can't save _imp to sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000185 }
186
Victor Stinnercd6e6942015-09-18 09:11:57 +0200187 /* Install importlib as the implementation of import */
Nick Coghland6009512014-11-20 21:39:37 +1000188 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
189 if (value == NULL) {
190 PyErr_Print();
Victor Stinner331a6a52019-05-27 16:39:22 +0200191 return _PyStatus_ERR("importlib install failed");
Nick Coghland6009512014-11-20 21:39:37 +1000192 }
193 Py_DECREF(value);
194 Py_DECREF(impmod);
195
Victor Stinner331a6a52019-05-27 16:39:22 +0200196 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000197}
198
Victor Stinner331a6a52019-05-27 16:39:22 +0200199static PyStatus
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400200init_importlib_external(PyInterpreterState *interp)
Eric Snow1abcf672017-05-23 21:46:51 -0700201{
202 PyObject *value;
203 value = PyObject_CallMethod(interp->importlib,
204 "_install_external_importers", "");
205 if (value == NULL) {
206 PyErr_Print();
Victor Stinner331a6a52019-05-27 16:39:22 +0200207 return _PyStatus_ERR("external importer setup failed");
Eric Snow1abcf672017-05-23 21:46:51 -0700208 }
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200209 Py_DECREF(value);
Victor Stinner410b85a2019-05-13 17:12:45 +0200210 return _PyImportZip_Init(interp);
Eric Snow1abcf672017-05-23 21:46:51 -0700211}
Nick Coghland6009512014-11-20 21:39:37 +1000212
Nick Coghlan6ea41862017-06-11 13:16:15 +1000213/* Helper functions to better handle the legacy C locale
214 *
215 * The legacy C locale assumes ASCII as the default text encoding, which
216 * causes problems not only for the CPython runtime, but also other
217 * components like GNU readline.
218 *
219 * Accordingly, when the CLI detects it, it attempts to coerce it to a
220 * more capable UTF-8 based alternative as follows:
221 *
222 * if (_Py_LegacyLocaleDetected()) {
223 * _Py_CoerceLegacyLocale();
224 * }
225 *
226 * See the documentation of the PYTHONCOERCECLOCALE setting for more details.
227 *
228 * Locale coercion also impacts the default error handler for the standard
229 * streams: while the usual default is "strict", the default for the legacy
230 * C locale and for any of the coercion target locales is "surrogateescape".
231 */
232
233int
Victor Stinner0f721472019-05-20 17:16:38 +0200234_Py_LegacyLocaleDetected(int warn)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000235{
236#ifndef MS_WINDOWS
Victor Stinner0f721472019-05-20 17:16:38 +0200237 if (!warn) {
238 const char *locale_override = getenv("LC_ALL");
239 if (locale_override != NULL && *locale_override != '\0') {
240 /* Don't coerce C locale if the LC_ALL environment variable
241 is set */
242 return 0;
243 }
244 }
245
Nick Coghlan6ea41862017-06-11 13:16:15 +1000246 /* On non-Windows systems, the C locale is considered a legacy locale */
Nick Coghlaneb817952017-06-18 12:29:42 +1000247 /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat
248 * the POSIX locale as a simple alias for the C locale, so
249 * we may also want to check for that explicitly.
250 */
Nick Coghlan6ea41862017-06-11 13:16:15 +1000251 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
252 return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
253#else
254 /* Windows uses code pages instead of locales, so no locale is legacy */
255 return 0;
256#endif
257}
258
Nick Coghlaneb817952017-06-18 12:29:42 +1000259static const char *_C_LOCALE_WARNING =
260 "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
261 "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
262 "C.utf8, or UTF-8 (if available) as alternative Unicode-compatible "
263 "locales is recommended.\n";
264
Nick Coghlaneb817952017-06-18 12:29:42 +1000265static void
Victor Stinner43125222019-04-24 18:23:53 +0200266emit_stderr_warning_for_legacy_locale(_PyRuntimeState *runtime)
Nick Coghlaneb817952017-06-18 12:29:42 +1000267{
Victor Stinner331a6a52019-05-27 16:39:22 +0200268 const PyPreConfig *preconfig = &runtime->preconfig;
Victor Stinner0f721472019-05-20 17:16:38 +0200269 if (preconfig->coerce_c_locale_warn && _Py_LegacyLocaleDetected(1)) {
Victor Stinnercf215042018-08-29 22:56:06 +0200270 PySys_FormatStderr("%s", _C_LOCALE_WARNING);
Nick Coghlaneb817952017-06-18 12:29:42 +1000271 }
272}
273
Nick Coghlan6ea41862017-06-11 13:16:15 +1000274typedef struct _CandidateLocale {
275 const char *locale_name; /* The locale to try as a coercion target */
276} _LocaleCoercionTarget;
277
278static _LocaleCoercionTarget _TARGET_LOCALES[] = {
279 {"C.UTF-8"},
280 {"C.utf8"},
Nick Coghlan18974c32017-06-30 00:48:14 +1000281 {"UTF-8"},
Nick Coghlan6ea41862017-06-11 13:16:15 +1000282 {NULL}
283};
284
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200285
286int
287_Py_IsLocaleCoercionTarget(const char *ctype_loc)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000288{
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200289 const _LocaleCoercionTarget *target = NULL;
290 for (target = _TARGET_LOCALES; target->locale_name; target++) {
291 if (strcmp(ctype_loc, target->locale_name) == 0) {
292 return 1;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000293 }
Victor Stinner124b9eb2018-08-29 01:29:06 +0200294 }
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200295 return 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000296}
297
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200298
Nick Coghlan6ea41862017-06-11 13:16:15 +1000299#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100300static const char C_LOCALE_COERCION_WARNING[] =
Nick Coghlan6ea41862017-06-11 13:16:15 +1000301 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale "
302 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n";
303
Victor Stinner0f721472019-05-20 17:16:38 +0200304static int
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200305_coerce_default_locale_settings(int warn, const _LocaleCoercionTarget *target)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000306{
307 const char *newloc = target->locale_name;
308
309 /* Reset locale back to currently configured defaults */
xdegaye1588be62017-11-12 12:45:59 +0100310 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000311
312 /* Set the relevant locale environment variable */
313 if (setenv("LC_CTYPE", newloc, 1)) {
314 fprintf(stderr,
315 "Error setting LC_CTYPE, skipping C locale coercion\n");
Victor Stinner0f721472019-05-20 17:16:38 +0200316 return 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000317 }
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200318 if (warn) {
Victor Stinner94540602017-12-16 04:54:22 +0100319 fprintf(stderr, C_LOCALE_COERCION_WARNING, newloc);
Nick Coghlaneb817952017-06-18 12:29:42 +1000320 }
Nick Coghlan6ea41862017-06-11 13:16:15 +1000321
322 /* Reconfigure with the overridden environment variables */
xdegaye1588be62017-11-12 12:45:59 +0100323 _Py_SetLocaleFromEnv(LC_ALL);
Victor Stinner0f721472019-05-20 17:16:38 +0200324 return 1;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000325}
326#endif
327
Victor Stinner0f721472019-05-20 17:16:38 +0200328int
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200329_Py_CoerceLegacyLocale(int warn)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000330{
Victor Stinner0f721472019-05-20 17:16:38 +0200331 int coerced = 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000332#ifdef PY_COERCE_C_LOCALE
Victor Stinner8ea09112018-09-03 17:05:18 +0200333 char *oldloc = NULL;
334
335 oldloc = _PyMem_RawStrdup(setlocale(LC_CTYPE, NULL));
336 if (oldloc == NULL) {
Victor Stinner0f721472019-05-20 17:16:38 +0200337 return coerced;
Victor Stinner8ea09112018-09-03 17:05:18 +0200338 }
339
Victor Stinner94540602017-12-16 04:54:22 +0100340 const char *locale_override = getenv("LC_ALL");
341 if (locale_override == NULL || *locale_override == '\0') {
342 /* LC_ALL is also not set (or is set to an empty string) */
343 const _LocaleCoercionTarget *target = NULL;
344 for (target = _TARGET_LOCALES; target->locale_name; target++) {
345 const char *new_locale = setlocale(LC_CTYPE,
346 target->locale_name);
347 if (new_locale != NULL) {
Victor Stinnere2510952019-05-02 11:28:57 -0400348#if !defined(_Py_FORCE_UTF8_LOCALE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94540602017-12-16 04:54:22 +0100349 /* Also ensure that nl_langinfo works in this locale */
350 char *codeset = nl_langinfo(CODESET);
351 if (!codeset || *codeset == '\0') {
352 /* CODESET is not set or empty, so skip coercion */
353 new_locale = NULL;
354 _Py_SetLocaleFromEnv(LC_CTYPE);
355 continue;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000356 }
Victor Stinner94540602017-12-16 04:54:22 +0100357#endif
358 /* Successfully configured locale, so make it the default */
Victor Stinner0f721472019-05-20 17:16:38 +0200359 coerced = _coerce_default_locale_settings(warn, target);
Victor Stinner8ea09112018-09-03 17:05:18 +0200360 goto done;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000361 }
362 }
363 }
364 /* No C locale warning here, as Py_Initialize will emit one later */
Victor Stinner8ea09112018-09-03 17:05:18 +0200365
366 setlocale(LC_CTYPE, oldloc);
367
368done:
369 PyMem_RawFree(oldloc);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000370#endif
Victor Stinner0f721472019-05-20 17:16:38 +0200371 return coerced;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000372}
373
xdegaye1588be62017-11-12 12:45:59 +0100374/* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to
375 * isolate the idiosyncrasies of different libc implementations. It reads the
376 * appropriate environment variable and uses its value to select the locale for
377 * 'category'. */
378char *
379_Py_SetLocaleFromEnv(int category)
380{
Victor Stinner353933e2018-11-23 13:08:26 +0100381 char *res;
xdegaye1588be62017-11-12 12:45:59 +0100382#ifdef __ANDROID__
383 const char *locale;
384 const char **pvar;
385#ifdef PY_COERCE_C_LOCALE
386 const char *coerce_c_locale;
387#endif
388 const char *utf8_locale = "C.UTF-8";
389 const char *env_var_set[] = {
390 "LC_ALL",
391 "LC_CTYPE",
392 "LANG",
393 NULL,
394 };
395
396 /* Android setlocale(category, "") doesn't check the environment variables
397 * and incorrectly sets the "C" locale at API 24 and older APIs. We only
398 * check the environment variables listed in env_var_set. */
399 for (pvar=env_var_set; *pvar; pvar++) {
400 locale = getenv(*pvar);
401 if (locale != NULL && *locale != '\0') {
402 if (strcmp(locale, utf8_locale) == 0 ||
403 strcmp(locale, "en_US.UTF-8") == 0) {
404 return setlocale(category, utf8_locale);
405 }
406 return setlocale(category, "C");
407 }
408 }
409
410 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
411 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
412 * Quote from POSIX section "8.2 Internationalization Variables":
413 * "4. If the LANG environment variable is not set or is set to the empty
414 * string, the implementation-defined default locale shall be used." */
415
416#ifdef PY_COERCE_C_LOCALE
417 coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
418 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
419 /* Some other ported code may check the environment variables (e.g. in
420 * extension modules), so we make sure that they match the locale
421 * configuration */
422 if (setenv("LC_CTYPE", utf8_locale, 1)) {
423 fprintf(stderr, "Warning: failed setting the LC_CTYPE "
424 "environment variable to %s\n", utf8_locale);
425 }
426 }
427#endif
Victor Stinner353933e2018-11-23 13:08:26 +0100428 res = setlocale(category, utf8_locale);
429#else /* !defined(__ANDROID__) */
430 res = setlocale(category, "");
431#endif
432 _Py_ResetForceASCII();
433 return res;
xdegaye1588be62017-11-12 12:45:59 +0100434}
435
Nick Coghlan6ea41862017-06-11 13:16:15 +1000436
Eric Snow1abcf672017-05-23 21:46:51 -0700437/* Global initializations. Can be undone by Py_Finalize(). Don't
438 call this twice without an intervening Py_Finalize() call.
439
Victor Stinner331a6a52019-05-27 16:39:22 +0200440 Every call to Py_InitializeFromConfig, Py_Initialize or Py_InitializeEx
Eric Snow1abcf672017-05-23 21:46:51 -0700441 must have a corresponding call to Py_Finalize.
442
443 Locking: you must hold the interpreter lock while calling these APIs.
444 (If the lock has not yet been initialized, that's equivalent to
445 having the lock, but you cannot use multiple threads.)
446
447*/
448
Victor Stinner331a6a52019-05-27 16:39:22 +0200449static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200450pyinit_core_reconfigure(_PyRuntimeState *runtime,
451 PyInterpreterState **interp_p,
Victor Stinner331a6a52019-05-27 16:39:22 +0200452 const PyConfig *config)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200453{
Victor Stinner331a6a52019-05-27 16:39:22 +0200454 PyStatus status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100455 PyThreadState *tstate = _PyThreadState_GET();
456 if (!tstate) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200457 return _PyStatus_ERR("failed to read thread state");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100458 }
459
460 PyInterpreterState *interp = tstate->interp;
461 if (interp == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200462 return _PyStatus_ERR("can't make main interpreter");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100463 }
464 *interp_p = interp;
465
Victor Stinner331a6a52019-05-27 16:39:22 +0200466 _PyConfig_Write(config, runtime);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200467
Victor Stinner331a6a52019-05-27 16:39:22 +0200468 status = _PyConfig_Copy(&interp->config, config);
469 if (_PyStatus_EXCEPTION(status)) {
470 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200471 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200472 config = &interp->config;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200473
Victor Stinner331a6a52019-05-27 16:39:22 +0200474 if (config->_install_importlib) {
Victor Stinner96c84752019-09-26 16:17:34 +0200475 status = _PyConfig_WritePathConfig(config);
Victor Stinner331a6a52019-05-27 16:39:22 +0200476 if (_PyStatus_EXCEPTION(status)) {
477 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200478 }
479 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200480 return _PyStatus_OK();
Victor Stinner1dc6e392018-07-25 02:49:17 +0200481}
482
483
Victor Stinner331a6a52019-05-27 16:39:22 +0200484static PyStatus
Victor Stinner43125222019-04-24 18:23:53 +0200485pycore_init_runtime(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200486 const PyConfig *config)
Nick Coghland6009512014-11-20 21:39:37 +1000487{
Victor Stinner43125222019-04-24 18:23:53 +0200488 if (runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200489 return _PyStatus_ERR("main interpreter already initialized");
Victor Stinner1dc6e392018-07-25 02:49:17 +0200490 }
Victor Stinnerda273412017-12-15 01:46:02 +0100491
Victor Stinner331a6a52019-05-27 16:39:22 +0200492 _PyConfig_Write(config, runtime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600493
Eric Snow1abcf672017-05-23 21:46:51 -0700494 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
495 * threads behave a little more gracefully at interpreter shutdown.
496 * We clobber it here so the new interpreter can start with a clean
497 * slate.
498 *
499 * However, this may still lead to misbehaviour if there are daemon
500 * threads still hanging around from a previous Py_Initialize/Finalize
501 * pair :(
502 */
Victor Stinner43125222019-04-24 18:23:53 +0200503 runtime->finalizing = NULL;
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600504
Victor Stinner331a6a52019-05-27 16:39:22 +0200505 PyStatus status = _Py_HashRandomization_Init(config);
506 if (_PyStatus_EXCEPTION(status)) {
507 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800508 }
509
Victor Stinner331a6a52019-05-27 16:39:22 +0200510 status = _PyInterpreterState_Enable(runtime);
511 if (_PyStatus_EXCEPTION(status)) {
512 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -0800513 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200514 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100515}
Victor Stinnera7368ac2017-11-15 18:11:45 -0800516
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100517
Victor Stinner331a6a52019-05-27 16:39:22 +0200518static PyStatus
Victor Stinner43125222019-04-24 18:23:53 +0200519pycore_create_interpreter(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200520 const PyConfig *config,
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100521 PyInterpreterState **interp_p)
522{
523 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnerda273412017-12-15 01:46:02 +0100524 if (interp == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200525 return _PyStatus_ERR("can't make main interpreter");
Victor Stinnerda273412017-12-15 01:46:02 +0100526 }
Victor Stinner1dc6e392018-07-25 02:49:17 +0200527 *interp_p = interp;
Victor Stinnerda273412017-12-15 01:46:02 +0100528
Victor Stinner331a6a52019-05-27 16:39:22 +0200529 PyStatus status = _PyConfig_Copy(&interp->config, config);
530 if (_PyStatus_EXCEPTION(status)) {
531 return status;
Victor Stinnerda273412017-12-15 01:46:02 +0100532 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200533 config = &interp->config;
Nick Coghland6009512014-11-20 21:39:37 +1000534
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200535 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +1000536 if (tstate == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +0200537 return _PyStatus_ERR("can't make first thread");
Nick Coghland6009512014-11-20 21:39:37 +1000538 (void) PyThreadState_Swap(tstate);
539
Victor Stinner99fcc612019-04-29 13:04:07 +0200540 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
541 destroying the GIL might fail when it is being referenced from
542 another running thread (see issue #9901).
Nick Coghland6009512014-11-20 21:39:37 +1000543 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000544 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Victor Stinner09532fe2019-05-10 23:39:09 +0200545 _PyEval_FiniThreads(&runtime->ceval);
Victor Stinner2914bb32018-01-29 11:57:45 +0100546
Nick Coghland6009512014-11-20 21:39:37 +1000547 /* Auto-thread-state API */
Victor Stinner0fd2c302019-06-04 03:15:09 +0200548 _PyGILState_Init(runtime, interp, tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000549
Victor Stinner2914bb32018-01-29 11:57:45 +0100550 /* Create the GIL */
551 PyEval_InitThreads();
552
Victor Stinner331a6a52019-05-27 16:39:22 +0200553 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100554}
Nick Coghland6009512014-11-20 21:39:37 +1000555
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100556
Victor Stinner331a6a52019-05-27 16:39:22 +0200557static PyStatus
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100558pycore_init_types(void)
559{
Victor Stinner331a6a52019-05-27 16:39:22 +0200560 PyStatus status = _PyTypes_Init();
561 if (_PyStatus_EXCEPTION(status)) {
562 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100563 }
564
Victor Stinner331a6a52019-05-27 16:39:22 +0200565 status = _PyUnicode_Init();
566 if (_PyStatus_EXCEPTION(status)) {
567 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100568 }
569
570 if (_PyStructSequence_Init() < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200571 return _PyStatus_ERR("can't initialize structseq");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100572 }
573
574 if (!_PyLong_Init()) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200575 return _PyStatus_ERR("can't init longs");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100576 }
Nick Coghland6009512014-11-20 21:39:37 +1000577
Victor Stinner331a6a52019-05-27 16:39:22 +0200578 status = _PyExc_Init();
579 if (_PyStatus_EXCEPTION(status)) {
580 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100581 }
582
583 if (!_PyFloat_Init()) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200584 return _PyStatus_ERR("can't init float");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100585 }
Nick Coghland6009512014-11-20 21:39:37 +1000586
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100587 if (!_PyContext_Init()) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200588 return _PyStatus_ERR("can't init context");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100589 }
Victor Stinneref9d9b62019-05-22 11:28:22 +0200590
Victor Stinner331a6a52019-05-27 16:39:22 +0200591 status = _PyErr_Init();
592 if (_PyStatus_EXCEPTION(status)) {
593 return status;
Victor Stinneref9d9b62019-05-22 11:28:22 +0200594 }
595
Victor Stinner331a6a52019-05-27 16:39:22 +0200596 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100597}
598
599
Victor Stinner331a6a52019-05-27 16:39:22 +0200600static PyStatus
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100601pycore_init_builtins(PyInterpreterState *interp)
602{
603 PyObject *bimod = _PyBuiltin_Init();
604 if (bimod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200605 return _PyStatus_ERR("can't initialize builtins modules");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100606 }
607 _PyImport_FixupBuiltin(bimod, "builtins", interp->modules);
608
609 interp->builtins = PyModule_GetDict(bimod);
610 if (interp->builtins == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200611 return _PyStatus_ERR("can't initialize builtins dict");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100612 }
613 Py_INCREF(interp->builtins);
614
Victor Stinner331a6a52019-05-27 16:39:22 +0200615 PyStatus status = _PyBuiltins_AddExceptions(bimod);
616 if (_PyStatus_EXCEPTION(status)) {
617 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100618 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200619 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100620}
621
622
Victor Stinner331a6a52019-05-27 16:39:22 +0200623static PyStatus
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100624pycore_init_import_warnings(PyInterpreterState *interp, PyObject *sysmod)
625{
Victor Stinner9f3dcf82019-09-21 02:13:14 +0200626 const PyConfig *config = &interp->config;
627
Victor Stinner331a6a52019-05-27 16:39:22 +0200628 PyStatus status = _PyImport_Init(interp);
629 if (_PyStatus_EXCEPTION(status)) {
630 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800631 }
Nick Coghland6009512014-11-20 21:39:37 +1000632
Victor Stinner331a6a52019-05-27 16:39:22 +0200633 status = _PyImportHooks_Init();
634 if (_PyStatus_EXCEPTION(status)) {
635 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800636 }
Nick Coghland6009512014-11-20 21:39:37 +1000637
638 /* Initialize _warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100639 if (_PyWarnings_Init() == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200640 return _PyStatus_ERR("can't initialize warnings");
Victor Stinner1f151112017-11-23 10:43:14 +0100641 }
Nick Coghland6009512014-11-20 21:39:37 +1000642
Victor Stinner9f3dcf82019-09-21 02:13:14 +0200643 if (config->_install_importlib) {
Victor Stinner96c84752019-09-26 16:17:34 +0200644 status = _PyConfig_WritePathConfig(config);
Victor Stinner331a6a52019-05-27 16:39:22 +0200645 if (_PyStatus_EXCEPTION(status)) {
646 return status;
Victor Stinnerb1147e42018-07-21 02:06:16 +0200647 }
648 }
649
Eric Snow1abcf672017-05-23 21:46:51 -0700650 /* This call sets up builtin and frozen import support */
Victor Stinner9f3dcf82019-09-21 02:13:14 +0200651 if (config->_install_importlib) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200652 status = init_importlib(interp, sysmod);
653 if (_PyStatus_EXCEPTION(status)) {
654 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800655 }
Eric Snow1abcf672017-05-23 21:46:51 -0700656 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200657 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100658}
659
660
Victor Stinner331a6a52019-05-27 16:39:22 +0200661static PyStatus
662pyinit_config(_PyRuntimeState *runtime,
663 PyInterpreterState **interp_p,
664 const PyConfig *config)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100665{
666 PyInterpreterState *interp;
667
Victor Stinner331a6a52019-05-27 16:39:22 +0200668 _PyConfig_Write(config, runtime);
Victor Stinner20004952019-03-26 02:31:11 +0100669
Victor Stinner331a6a52019-05-27 16:39:22 +0200670 PyStatus status = pycore_init_runtime(runtime, config);
671 if (_PyStatus_EXCEPTION(status)) {
672 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100673 }
674
Victor Stinner331a6a52019-05-27 16:39:22 +0200675 status = pycore_create_interpreter(runtime, config, &interp);
676 if (_PyStatus_EXCEPTION(status)) {
677 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100678 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200679 config = &interp->config;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100680 *interp_p = interp;
681
Victor Stinner331a6a52019-05-27 16:39:22 +0200682 status = pycore_init_types();
683 if (_PyStatus_EXCEPTION(status)) {
684 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100685 }
686
687 PyObject *sysmod;
Victor Stinner0fd2c302019-06-04 03:15:09 +0200688 status = _PySys_Create(runtime, interp, &sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200689 if (_PyStatus_EXCEPTION(status)) {
690 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100691 }
692
Victor Stinner331a6a52019-05-27 16:39:22 +0200693 status = pycore_init_builtins(interp);
694 if (_PyStatus_EXCEPTION(status)) {
695 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100696 }
697
Victor Stinner331a6a52019-05-27 16:39:22 +0200698 status = pycore_init_import_warnings(interp, sysmod);
699 if (_PyStatus_EXCEPTION(status)) {
700 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100701 }
Eric Snow1abcf672017-05-23 21:46:51 -0700702
703 /* Only when we get here is the runtime core fully initialized */
Victor Stinner43125222019-04-24 18:23:53 +0200704 runtime->core_initialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200705 return _PyStatus_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700706}
707
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100708
Victor Stinner331a6a52019-05-27 16:39:22 +0200709PyStatus
710_Py_PreInitializeFromPyArgv(const PyPreConfig *src_config, const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100711{
Victor Stinner331a6a52019-05-27 16:39:22 +0200712 PyStatus status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100713
Victor Stinner6d1c4672019-05-20 11:02:00 +0200714 if (src_config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200715 return _PyStatus_ERR("preinitialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +0200716 }
717
Victor Stinner331a6a52019-05-27 16:39:22 +0200718 status = _PyRuntime_Initialize();
719 if (_PyStatus_EXCEPTION(status)) {
720 return status;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100721 }
Victor Stinner43125222019-04-24 18:23:53 +0200722 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100723
Victor Stinner47bbab92019-09-18 14:10:16 +0200724 if (runtime->preinitialized) {
Victor Stinnerf72346c2019-03-25 17:54:58 +0100725 /* If it's already configured: ignored the new configuration */
Victor Stinner331a6a52019-05-27 16:39:22 +0200726 return _PyStatus_OK();
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100727 }
728
Victor Stinner47bbab92019-09-18 14:10:16 +0200729 /* Note: preinitialized remains 1 on error, it is only set to 0
730 at exit on success. */
731 runtime->preinitializing = 1;
732
Victor Stinner331a6a52019-05-27 16:39:22 +0200733 PyPreConfig config;
Victor Stinner6e128382019-09-28 04:50:43 +0200734
735 status = _PyPreConfig_InitFromPreConfig(&config, src_config);
736 if (_PyStatus_EXCEPTION(status)) {
737 return status;
738 }
Victor Stinnerf72346c2019-03-25 17:54:58 +0100739
Victor Stinner331a6a52019-05-27 16:39:22 +0200740 status = _PyPreConfig_Read(&config, args);
741 if (_PyStatus_EXCEPTION(status)) {
742 return status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100743 }
744
Victor Stinner331a6a52019-05-27 16:39:22 +0200745 status = _PyPreConfig_Write(&config);
746 if (_PyStatus_EXCEPTION(status)) {
747 return status;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100748 }
749
Victor Stinner47bbab92019-09-18 14:10:16 +0200750 runtime->preinitializing = 0;
751 runtime->preinitialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200752 return _PyStatus_OK();
Victor Stinnerf72346c2019-03-25 17:54:58 +0100753}
754
Victor Stinner70005ac2019-05-02 15:25:34 -0400755
Victor Stinner331a6a52019-05-27 16:39:22 +0200756PyStatus
757Py_PreInitializeFromBytesArgs(const PyPreConfig *src_config, Py_ssize_t argc, char **argv)
Victor Stinnerf72346c2019-03-25 17:54:58 +0100758{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100759 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400760 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100761}
762
763
Victor Stinner331a6a52019-05-27 16:39:22 +0200764PyStatus
765Py_PreInitializeFromArgs(const PyPreConfig *src_config, Py_ssize_t argc, wchar_t **argv)
Victor Stinner20004952019-03-26 02:31:11 +0100766{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100767 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400768 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinner20004952019-03-26 02:31:11 +0100769}
770
771
Victor Stinner331a6a52019-05-27 16:39:22 +0200772PyStatus
773Py_PreInitialize(const PyPreConfig *src_config)
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100774{
Victor Stinner70005ac2019-05-02 15:25:34 -0400775 return _Py_PreInitializeFromPyArgv(src_config, NULL);
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100776}
777
778
Victor Stinner331a6a52019-05-27 16:39:22 +0200779PyStatus
780_Py_PreInitializeFromConfig(const PyConfig *config,
781 const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100782{
Victor Stinner331a6a52019-05-27 16:39:22 +0200783 assert(config != NULL);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200784
Victor Stinner331a6a52019-05-27 16:39:22 +0200785 PyStatus status = _PyRuntime_Initialize();
786 if (_PyStatus_EXCEPTION(status)) {
787 return status;
Victor Stinner6d1c4672019-05-20 11:02:00 +0200788 }
789 _PyRuntimeState *runtime = &_PyRuntime;
790
Victor Stinner47bbab92019-09-18 14:10:16 +0200791 if (runtime->preinitialized) {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200792 /* Already initialized: do nothing */
Victor Stinner331a6a52019-05-27 16:39:22 +0200793 return _PyStatus_OK();
Victor Stinner70005ac2019-05-02 15:25:34 -0400794 }
Victor Stinnercab5d072019-05-17 19:01:14 +0200795
Victor Stinner331a6a52019-05-27 16:39:22 +0200796 PyPreConfig preconfig;
Victor Stinner6e128382019-09-28 04:50:43 +0200797
Victor Stinnerbdace212019-10-01 00:46:42 +0200798 _PyPreConfig_InitFromConfig(&preconfig, config);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200799
Victor Stinner331a6a52019-05-27 16:39:22 +0200800 if (!config->parse_argv) {
801 return Py_PreInitialize(&preconfig);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200802 }
803 else if (args == NULL) {
Victor Stinnercab5d072019-05-17 19:01:14 +0200804 _PyArgv config_args = {
805 .use_bytes_argv = 0,
Victor Stinner331a6a52019-05-27 16:39:22 +0200806 .argc = config->argv.length,
807 .wchar_argv = config->argv.items};
Victor Stinner6d1c4672019-05-20 11:02:00 +0200808 return _Py_PreInitializeFromPyArgv(&preconfig, &config_args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200809 }
810 else {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200811 return _Py_PreInitializeFromPyArgv(&preconfig, args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200812 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100813}
814
815
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100816/* Begin interpreter initialization
817 *
818 * On return, the first thread and interpreter state have been created,
819 * but the compiler, signal handling, multithreading and
820 * multiple interpreter support, and codec infrastructure are not yet
821 * available.
822 *
823 * The import system will support builtin and frozen modules only.
824 * The only supported io is writing to sys.stderr
825 *
826 * If any operation invoked by this function fails, a fatal error is
827 * issued and the function does not return.
828 *
829 * Any code invoked from this function should *not* assume it has access
830 * to the Python C API (unless the API is explicitly listed as being
831 * safe to call without calling Py_Initialize first)
832 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200833static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200834pyinit_core(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200835 const PyConfig *src_config,
Victor Stinner5edcf262019-05-23 00:57:57 +0200836 PyInterpreterState **interp_p)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200837{
Victor Stinner331a6a52019-05-27 16:39:22 +0200838 PyStatus status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200839
Victor Stinner331a6a52019-05-27 16:39:22 +0200840 status = _Py_PreInitializeFromConfig(src_config, NULL);
841 if (_PyStatus_EXCEPTION(status)) {
842 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200843 }
844
Victor Stinner331a6a52019-05-27 16:39:22 +0200845 PyConfig config;
Victor Stinner6e128382019-09-28 04:50:43 +0200846
847 status = _PyConfig_InitCompatConfig(&config);
848 if (_PyStatus_EXCEPTION(status)) {
849 goto done;
850 }
Victor Stinner5edcf262019-05-23 00:57:57 +0200851
Victor Stinner331a6a52019-05-27 16:39:22 +0200852 status = _PyConfig_Copy(&config, src_config);
853 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200854 goto done;
855 }
856
Victor Stinner331a6a52019-05-27 16:39:22 +0200857 status = PyConfig_Read(&config);
858 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200859 goto done;
860 }
861
862 if (!runtime->core_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200863 status = pyinit_config(runtime, interp_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200864 }
865 else {
Victor Stinner331a6a52019-05-27 16:39:22 +0200866 status = pyinit_core_reconfigure(runtime, interp_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200867 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200868 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200869 goto done;
870 }
871
872done:
Victor Stinner331a6a52019-05-27 16:39:22 +0200873 PyConfig_Clear(&config);
874 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200875}
876
Victor Stinner5ac27a52019-03-27 13:40:14 +0100877
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200878/* Py_Initialize() has already been called: update the main interpreter
879 configuration. Example of bpo-34008: Py_Main() called after
880 Py_Initialize(). */
Victor Stinner331a6a52019-05-27 16:39:22 +0200881static PyStatus
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100882_Py_ReconfigureMainInterpreter(PyInterpreterState *interp)
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200883{
Victor Stinner331a6a52019-05-27 16:39:22 +0200884 PyConfig *config = &interp->config;
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100885
Victor Stinner331a6a52019-05-27 16:39:22 +0200886 PyObject *argv = _PyWideStringList_AsList(&config->argv);
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100887 if (argv == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200888 return _PyStatus_NO_MEMORY(); \
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100889 }
890
891 int res = PyDict_SetItemString(interp->sysdict, "argv", argv);
892 Py_DECREF(argv);
893 if (res < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200894 return _PyStatus_ERR("fail to set sys.argv");
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200895 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200896 return _PyStatus_OK();
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200897}
898
Eric Snowc7ec9982017-05-23 23:00:52 -0700899/* Update interpreter state based on supplied configuration settings
900 *
901 * After calling this function, most of the restrictions on the interpreter
902 * are lifted. The only remaining incomplete settings are those related
903 * to the main module (sys.argv[0], __main__ metadata)
904 *
905 * Calling this when the interpreter is not initializing, is already
906 * initialized or without a valid current thread state is a fatal error.
907 * Other errors should be reported as normal Python exceptions with a
908 * non-zero return code.
909 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200910static PyStatus
Victor Stinner0fd2c302019-06-04 03:15:09 +0200911pyinit_main(_PyRuntimeState *runtime, PyInterpreterState *interp)
Eric Snow1abcf672017-05-23 21:46:51 -0700912{
Victor Stinner43125222019-04-24 18:23:53 +0200913 if (!runtime->core_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200914 return _PyStatus_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700915 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700916
Victor Stinner1dc6e392018-07-25 02:49:17 +0200917 /* Configure the main interpreter */
Victor Stinner331a6a52019-05-27 16:39:22 +0200918 PyConfig *config = &interp->config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700919
Victor Stinner43125222019-04-24 18:23:53 +0200920 if (runtime->initialized) {
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100921 return _Py_ReconfigureMainInterpreter(interp);
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200922 }
923
Victor Stinner331a6a52019-05-27 16:39:22 +0200924 if (!config->_install_importlib) {
Eric Snow1abcf672017-05-23 21:46:51 -0700925 /* Special mode for freeze_importlib: run with no import system
926 *
927 * This means anything which needs support from extension modules
928 * or pure Python code in the standard library won't work.
929 */
Victor Stinner43125222019-04-24 18:23:53 +0200930 runtime->initialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200931 return _PyStatus_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700932 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100933
Victor Stinner33c377e2017-12-05 15:12:41 +0100934 if (_PyTime_Init() < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200935 return _PyStatus_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100936 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200937
Victor Stinner0fd2c302019-06-04 03:15:09 +0200938 if (_PySys_InitMain(runtime, interp) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200939 return _PyStatus_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100940 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800941
Victor Stinner331a6a52019-05-27 16:39:22 +0200942 PyStatus status = init_importlib_external(interp);
943 if (_PyStatus_EXCEPTION(status)) {
944 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800945 }
Nick Coghland6009512014-11-20 21:39:37 +1000946
947 /* initialize the faulthandler module */
Victor Stinner331a6a52019-05-27 16:39:22 +0200948 status = _PyFaulthandler_Init(config->faulthandler);
949 if (_PyStatus_EXCEPTION(status)) {
950 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800951 }
Nick Coghland6009512014-11-20 21:39:37 +1000952
Victor Stinnerc5c64252019-09-23 15:59:00 +0200953 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
954 status = _PyUnicode_InitEncodings(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200955 if (_PyStatus_EXCEPTION(status)) {
956 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800957 }
Nick Coghland6009512014-11-20 21:39:37 +1000958
Victor Stinner331a6a52019-05-27 16:39:22 +0200959 if (config->install_signal_handlers) {
960 status = init_signals();
961 if (_PyStatus_EXCEPTION(status)) {
962 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800963 }
964 }
Nick Coghland6009512014-11-20 21:39:37 +1000965
Victor Stinner331a6a52019-05-27 16:39:22 +0200966 if (_PyTraceMalloc_Init(config->tracemalloc) < 0) {
967 return _PyStatus_ERR("can't initialize tracemalloc");
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200968 }
Nick Coghland6009512014-11-20 21:39:37 +1000969
Victor Stinner331a6a52019-05-27 16:39:22 +0200970 status = add_main_module(interp);
971 if (_PyStatus_EXCEPTION(status)) {
972 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800973 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800974
Victor Stinner331a6a52019-05-27 16:39:22 +0200975 status = init_sys_streams(interp);
976 if (_PyStatus_EXCEPTION(status)) {
977 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800978 }
Nick Coghland6009512014-11-20 21:39:37 +1000979
980 /* Initialize warnings. */
Victor Stinner37cd9822018-11-16 11:55:35 +0100981 PyObject *warnoptions = PySys_GetObject("warnoptions");
982 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
Victor Stinner5d862462017-12-19 11:35:58 +0100983 {
Nick Coghland6009512014-11-20 21:39:37 +1000984 PyObject *warnings_module = PyImport_ImportModule("warnings");
985 if (warnings_module == NULL) {
986 fprintf(stderr, "'import warnings' failed; traceback:\n");
987 PyErr_Print();
988 }
989 Py_XDECREF(warnings_module);
990 }
991
Victor Stinner43125222019-04-24 18:23:53 +0200992 runtime->initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700993
Victor Stinner331a6a52019-05-27 16:39:22 +0200994 if (config->site_import) {
995 status = init_import_size(); /* Module site */
996 if (_PyStatus_EXCEPTION(status)) {
997 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800998 }
999 }
Victor Stinnercf215042018-08-29 22:56:06 +02001000
1001#ifndef MS_WINDOWS
Victor Stinner43125222019-04-24 18:23:53 +02001002 emit_stderr_warning_for_legacy_locale(runtime);
Victor Stinnercf215042018-08-29 22:56:06 +02001003#endif
1004
Victor Stinner331a6a52019-05-27 16:39:22 +02001005 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001006}
1007
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001008
Victor Stinner331a6a52019-05-27 16:39:22 +02001009PyStatus
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001010_Py_InitializeMain(void)
1011{
Victor Stinner331a6a52019-05-27 16:39:22 +02001012 PyStatus status = _PyRuntime_Initialize();
1013 if (_PyStatus_EXCEPTION(status)) {
1014 return status;
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001015 }
1016 _PyRuntimeState *runtime = &_PyRuntime;
1017 PyInterpreterState *interp = _PyRuntimeState_GetThreadState(runtime)->interp;
1018
Victor Stinner0fd2c302019-06-04 03:15:09 +02001019 return pyinit_main(runtime, interp);
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001020}
1021
1022
Victor Stinner331a6a52019-05-27 16:39:22 +02001023PyStatus
1024Py_InitializeFromConfig(const PyConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -07001025{
Victor Stinner6d1c4672019-05-20 11:02:00 +02001026 if (config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001027 return _PyStatus_ERR("initialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +02001028 }
1029
Victor Stinner331a6a52019-05-27 16:39:22 +02001030 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001031
Victor Stinner331a6a52019-05-27 16:39:22 +02001032 status = _PyRuntime_Initialize();
1033 if (_PyStatus_EXCEPTION(status)) {
1034 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001035 }
1036 _PyRuntimeState *runtime = &_PyRuntime;
1037
1038 PyInterpreterState *interp = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001039 status = pyinit_core(runtime, config, &interp);
1040 if (_PyStatus_EXCEPTION(status)) {
1041 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001042 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001043 config = &interp->config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +01001044
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001045 if (config->_init_main) {
Victor Stinner0fd2c302019-06-04 03:15:09 +02001046 status = pyinit_main(runtime, interp);
Victor Stinner331a6a52019-05-27 16:39:22 +02001047 if (_PyStatus_EXCEPTION(status)) {
1048 return status;
Victor Stinner484f20d2019-03-27 02:04:16 +01001049 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001050 }
Victor Stinner484f20d2019-03-27 02:04:16 +01001051
Victor Stinner331a6a52019-05-27 16:39:22 +02001052 return _PyStatus_OK();
Victor Stinner5ac27a52019-03-27 13:40:14 +01001053}
1054
1055
Eric Snow1abcf672017-05-23 21:46:51 -07001056void
Nick Coghland6009512014-11-20 21:39:37 +10001057Py_InitializeEx(int install_sigs)
1058{
Victor Stinner331a6a52019-05-27 16:39:22 +02001059 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001060
Victor Stinner331a6a52019-05-27 16:39:22 +02001061 status = _PyRuntime_Initialize();
1062 if (_PyStatus_EXCEPTION(status)) {
1063 Py_ExitStatusException(status);
Victor Stinner43125222019-04-24 18:23:53 +02001064 }
1065 _PyRuntimeState *runtime = &_PyRuntime;
1066
1067 if (runtime->initialized) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001068 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
1069 return;
1070 }
1071
Victor Stinner331a6a52019-05-27 16:39:22 +02001072 PyConfig config;
Victor Stinner6e128382019-09-28 04:50:43 +02001073
1074 status = _PyConfig_InitCompatConfig(&config);
1075 if (_PyStatus_EXCEPTION(status)) {
1076 Py_ExitStatusException(status);
1077 }
1078
Victor Stinner1dc6e392018-07-25 02:49:17 +02001079 config.install_signal_handlers = install_sigs;
1080
Victor Stinner331a6a52019-05-27 16:39:22 +02001081 status = Py_InitializeFromConfig(&config);
1082 if (_PyStatus_EXCEPTION(status)) {
1083 Py_ExitStatusException(status);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001084 }
Nick Coghland6009512014-11-20 21:39:37 +10001085}
1086
1087void
1088Py_Initialize(void)
1089{
1090 Py_InitializeEx(1);
1091}
1092
1093
1094#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001095extern void _Py_dump_counts(FILE*);
Nick Coghland6009512014-11-20 21:39:37 +10001096#endif
1097
1098/* Flush stdout and stderr */
1099
1100static int
1101file_is_closed(PyObject *fobj)
1102{
1103 int r;
1104 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1105 if (tmp == NULL) {
1106 PyErr_Clear();
1107 return 0;
1108 }
1109 r = PyObject_IsTrue(tmp);
1110 Py_DECREF(tmp);
1111 if (r < 0)
1112 PyErr_Clear();
1113 return r > 0;
1114}
1115
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001116static int
Nick Coghland6009512014-11-20 21:39:37 +10001117flush_std_files(void)
1118{
1119 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1120 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1121 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001122 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001123
1124 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001125 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001126 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001127 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001128 status = -1;
1129 }
Nick Coghland6009512014-11-20 21:39:37 +10001130 else
1131 Py_DECREF(tmp);
1132 }
1133
1134 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001135 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001136 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001137 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001138 status = -1;
1139 }
Nick Coghland6009512014-11-20 21:39:37 +10001140 else
1141 Py_DECREF(tmp);
1142 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001143
1144 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001145}
1146
1147/* Undo the effect of Py_Initialize().
1148
1149 Beware: if multiple interpreter and/or thread states exist, these
1150 are not wiped out; only the current thread and interpreter state
1151 are deleted. But since everything else is deleted, those other
1152 interpreter and thread states should no longer be used.
1153
1154 (XXX We should do better, e.g. wipe out all interpreters and
1155 threads.)
1156
1157 Locking: as above.
1158
1159*/
1160
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001161int
1162Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001163{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001164 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001165
Victor Stinner8e91c242019-04-24 17:24:01 +02001166 _PyRuntimeState *runtime = &_PyRuntime;
1167 if (!runtime->initialized) {
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001168 return status;
Victor Stinner8e91c242019-04-24 17:24:01 +02001169 }
Nick Coghland6009512014-11-20 21:39:37 +10001170
Eric Snow842a2f02019-03-15 15:47:51 -06001171 // Wrap up existing "threading"-module-created, non-daemon threads.
Nick Coghland6009512014-11-20 21:39:37 +10001172 wait_for_thread_shutdown();
1173
Eric Snow842a2f02019-03-15 15:47:51 -06001174 // Make any remaining pending calls.
Victor Stinnere225beb2019-06-03 18:14:24 +02001175 _Py_FinishPendingCalls(runtime);
1176
1177 /* Get current thread state and interpreter pointer */
1178 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
1179 PyInterpreterState *interp = tstate->interp;
Victor Stinner8e91c242019-04-24 17:24:01 +02001180
Nick Coghland6009512014-11-20 21:39:37 +10001181 /* The interpreter is still entirely intact at this point, and the
1182 * exit funcs may be relying on that. In particular, if some thread
1183 * or exit func is still waiting to do an import, the import machinery
1184 * expects Py_IsInitialized() to return true. So don't say the
Eric Snow842a2f02019-03-15 15:47:51 -06001185 * runtime is uninitialized until after the exit funcs have run.
Nick Coghland6009512014-11-20 21:39:37 +10001186 * Note that Threading.py uses an exit func to do a join on all the
1187 * threads created thru it, so this also protects pending imports in
1188 * the threads created via Threading.
1189 */
Nick Coghland6009512014-11-20 21:39:37 +10001190
Marcel Plch776407f2017-12-20 11:17:58 +01001191 call_py_exitfuncs(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001192
Victor Stinnerda273412017-12-15 01:46:02 +01001193 /* Copy the core config, PyInterpreterState_Delete() free
1194 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001195#ifdef Py_REF_DEBUG
Victor Stinner331a6a52019-05-27 16:39:22 +02001196 int show_ref_count = interp->config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001197#endif
1198#ifdef Py_TRACE_REFS
Victor Stinner331a6a52019-05-27 16:39:22 +02001199 int dump_refs = interp->config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001200#endif
1201#ifdef WITH_PYMALLOC
Victor Stinner331a6a52019-05-27 16:39:22 +02001202 int malloc_stats = interp->config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001203#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001204
Nick Coghland6009512014-11-20 21:39:37 +10001205 /* Remaining threads (e.g. daemon threads) will automatically exit
1206 after taking the GIL (in PyEval_RestoreThread()). */
Victor Stinner8e91c242019-04-24 17:24:01 +02001207 runtime->finalizing = tstate;
1208 runtime->initialized = 0;
1209 runtime->core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001210
Victor Stinnere0deff32015-03-24 13:46:18 +01001211 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001212 if (flush_std_files() < 0) {
1213 status = -1;
1214 }
Nick Coghland6009512014-11-20 21:39:37 +10001215
1216 /* Disable signal handling */
1217 PyOS_FiniInterrupts();
1218
1219 /* Collect garbage. This may call finalizers; it's nice to call these
1220 * before all modules are destroyed.
1221 * XXX If a __del__ or weakref callback is triggered here, and tries to
1222 * XXX import a module, bad things can happen, because Python no
1223 * XXX longer believes it's initialized.
1224 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1225 * XXX is easy to provoke that way. I've also seen, e.g.,
1226 * XXX Exception exceptions.ImportError: 'No module named sha'
1227 * XXX in <function callback at 0x008F5718> ignored
1228 * XXX but I'm unclear on exactly how that one happens. In any case,
1229 * XXX I haven't seen a real-life report of either of these.
1230 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001231 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001232#ifdef COUNT_ALLOCS
1233 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1234 each collection might release some types from the type
1235 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001236 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001237 /* nothing */;
1238#endif
Eric Snowdae02762017-09-14 00:35:58 -07001239
Steve Dowerb82e17e2019-05-23 08:45:22 -07001240 /* Clear all loghooks */
1241 /* We want minimal exposure of this function, so define the extern
1242 * here. The linker should discover the correct function without
1243 * exporting a symbol. */
1244 extern void _PySys_ClearAuditHooks(void);
1245 _PySys_ClearAuditHooks();
1246
Nick Coghland6009512014-11-20 21:39:37 +10001247 /* Destroy all modules */
1248 PyImport_Cleanup();
1249
Inada Naoki91234a12019-06-03 21:30:58 +09001250 /* Print debug stats if any */
1251 _PyEval_Fini();
1252
Victor Stinnere0deff32015-03-24 13:46:18 +01001253 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001254 if (flush_std_files() < 0) {
1255 status = -1;
1256 }
Nick Coghland6009512014-11-20 21:39:37 +10001257
1258 /* Collect final garbage. This disposes of cycles created by
1259 * class definitions, for example.
1260 * XXX This is disabled because it caused too many problems. If
1261 * XXX a __del__ or weakref callback triggers here, Python code has
1262 * XXX a hard time running, because even the sys module has been
1263 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1264 * XXX One symptom is a sequence of information-free messages
1265 * XXX coming from threads (if a __del__ or callback is invoked,
1266 * XXX other threads can execute too, and any exception they encounter
1267 * XXX triggers a comedy of errors as subsystem after subsystem
1268 * XXX fails to find what it *expects* to find in sys to help report
1269 * XXX the exception and consequent unexpected failures). I've also
1270 * XXX seen segfaults then, after adding print statements to the
1271 * XXX Python code getting called.
1272 */
1273#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001274 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001275#endif
1276
1277 /* Disable tracemalloc after all Python objects have been destroyed,
1278 so it is possible to use tracemalloc in objects destructor. */
1279 _PyTraceMalloc_Fini();
1280
1281 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1282 _PyImport_Fini();
1283
1284 /* Cleanup typeobject.c's internal caches. */
1285 _PyType_Fini();
1286
1287 /* unload faulthandler module */
1288 _PyFaulthandler_Fini();
1289
1290 /* Debugging stuff */
1291#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001292 _Py_dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001293#endif
1294 /* dump hash stats */
1295 _PyHash_Fini();
1296
Eric Snowdae02762017-09-14 00:35:58 -07001297#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001298 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001299 _PyDebug_PrintTotalRefs();
1300 }
Eric Snowdae02762017-09-14 00:35:58 -07001301#endif
Nick Coghland6009512014-11-20 21:39:37 +10001302
1303#ifdef Py_TRACE_REFS
1304 /* Display all objects still alive -- this can invoke arbitrary
1305 * __repr__ overrides, so requires a mostly-intact interpreter.
1306 * Alas, a lot of stuff may still be alive now that will be cleaned
1307 * up later.
1308 */
Victor Stinnerda273412017-12-15 01:46:02 +01001309 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001310 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001311 }
Nick Coghland6009512014-11-20 21:39:37 +10001312#endif /* Py_TRACE_REFS */
1313
1314 /* Clear interpreter state and all thread states. */
1315 PyInterpreterState_Clear(interp);
1316
1317 /* Now we decref the exception classes. After this point nothing
1318 can raise an exception. That's okay, because each Fini() method
1319 below has been checked to make sure no exceptions are ever
1320 raised.
1321 */
1322
1323 _PyExc_Fini();
1324
1325 /* Sundry finalizers */
1326 PyMethod_Fini();
1327 PyFrame_Fini();
1328 PyCFunction_Fini();
1329 PyTuple_Fini();
1330 PyList_Fini();
1331 PySet_Fini();
1332 PyBytes_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001333 PyLong_Fini();
1334 PyFloat_Fini();
1335 PyDict_Fini();
1336 PySlice_Fini();
Victor Stinner8e91c242019-04-24 17:24:01 +02001337 _PyGC_Fini(runtime);
Eric Snow86ea5812019-05-10 13:29:55 -04001338 _PyWarnings_Fini(interp);
Eric Snow6b4be192017-05-22 21:36:03 -07001339 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001340 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001341 PyAsyncGen_Fini();
Yury Selivanovf23746a2018-01-22 19:11:18 -05001342 _PyContext_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001343
1344 /* Cleanup Unicode implementation */
1345 _PyUnicode_Fini();
1346
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001347 _Py_ClearFileSystemEncoding();
Nick Coghland6009512014-11-20 21:39:37 +10001348
1349 /* XXX Still allocated:
1350 - various static ad-hoc pointers to interned strings
1351 - int and float free list blocks
1352 - whatever various modules and libraries allocate
1353 */
1354
1355 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1356
1357 /* Cleanup auto-thread-state */
Victor Stinner8e91c242019-04-24 17:24:01 +02001358 _PyGILState_Fini(runtime);
Nick Coghland6009512014-11-20 21:39:37 +10001359
1360 /* Delete current thread. After this, many C API calls become crashy. */
1361 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001362
Nick Coghland6009512014-11-20 21:39:37 +10001363 PyInterpreterState_Delete(interp);
1364
1365#ifdef Py_TRACE_REFS
1366 /* Display addresses (& refcnts) of all objects still alive.
1367 * An address can be used to find the repr of the object, printed
1368 * above by _Py_PrintReferences.
1369 */
Victor Stinnerda273412017-12-15 01:46:02 +01001370 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001371 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001372 }
Nick Coghland6009512014-11-20 21:39:37 +10001373#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001374#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001375 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001376 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be8072016-03-14 12:04:26 +01001377 }
Nick Coghland6009512014-11-20 21:39:37 +10001378#endif
1379
Victor Stinner8e91c242019-04-24 17:24:01 +02001380 call_ll_exitfuncs(runtime);
Victor Stinner9316ee42017-11-25 03:17:57 +01001381
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001382 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001383 return status;
1384}
1385
1386void
1387Py_Finalize(void)
1388{
1389 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001390}
1391
1392/* Create and initialize a new interpreter and thread, and return the
1393 new thread. This requires that Py_Initialize() has been called
1394 first.
1395
1396 Unsuccessful initialization yields a NULL pointer. Note that *no*
1397 exception information is available even in this case -- the
1398 exception information is held in the thread, and there is no
1399 thread.
1400
1401 Locking: as above.
1402
1403*/
1404
Victor Stinner331a6a52019-05-27 16:39:22 +02001405static PyStatus
Victor Stinnera7368ac2017-11-15 18:11:45 -08001406new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001407{
Victor Stinner331a6a52019-05-27 16:39:22 +02001408 PyStatus status;
Nick Coghland6009512014-11-20 21:39:37 +10001409
Victor Stinner331a6a52019-05-27 16:39:22 +02001410 status = _PyRuntime_Initialize();
1411 if (_PyStatus_EXCEPTION(status)) {
1412 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001413 }
1414 _PyRuntimeState *runtime = &_PyRuntime;
1415
1416 if (!runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001417 return _PyStatus_ERR("Py_Initialize must be called first");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001418 }
Nick Coghland6009512014-11-20 21:39:37 +10001419
Victor Stinner8a1be612016-03-14 22:07:55 +01001420 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1421 interpreters: disable PyGILState_Check(). */
1422 _PyGILState_check_enabled = 0;
1423
Victor Stinner43125222019-04-24 18:23:53 +02001424 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001425 if (interp == NULL) {
1426 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001427 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001428 }
Nick Coghland6009512014-11-20 21:39:37 +10001429
Victor Stinner43125222019-04-24 18:23:53 +02001430 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001431 if (tstate == NULL) {
1432 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001433 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001434 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001435 }
1436
Victor Stinner43125222019-04-24 18:23:53 +02001437 PyThreadState *save_tstate = PyThreadState_Swap(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001438
Eric Snow1abcf672017-05-23 21:46:51 -07001439 /* Copy the current interpreter config into the new interpreter */
Victor Stinner331a6a52019-05-27 16:39:22 +02001440 PyConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001441 if (save_tstate != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001442 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001443 } else {
1444 /* No current thread state, copy from the main interpreter */
1445 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinner331a6a52019-05-27 16:39:22 +02001446 config = &main_interp->config;
Victor Stinnerda273412017-12-15 01:46:02 +01001447 }
1448
Victor Stinner331a6a52019-05-27 16:39:22 +02001449 status = _PyConfig_Copy(&interp->config, config);
1450 if (_PyStatus_EXCEPTION(status)) {
1451 return status;
Victor Stinnerda273412017-12-15 01:46:02 +01001452 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001453 config = &interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001454
Victor Stinner331a6a52019-05-27 16:39:22 +02001455 status = _PyExc_Init();
1456 if (_PyStatus_EXCEPTION(status)) {
1457 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001458 }
1459
Victor Stinner331a6a52019-05-27 16:39:22 +02001460 status = _PyErr_Init();
1461 if (_PyStatus_EXCEPTION(status)) {
1462 return status;
Victor Stinneref9d9b62019-05-22 11:28:22 +02001463 }
1464
1465
Nick Coghland6009512014-11-20 21:39:37 +10001466 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001467 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001468 if (modules == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001469 return _PyStatus_ERR("can't make modules dictionary");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001470 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001471 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001472
Victor Stinner43125222019-04-24 18:23:53 +02001473 PyObject *sysmod = _PyImport_FindBuiltin("sys", modules);
Eric Snowd393c1b2017-09-14 12:18:12 -06001474 if (sysmod != NULL) {
1475 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinner43125222019-04-24 18:23:53 +02001476 if (interp->sysdict == NULL) {
Eric Snowd393c1b2017-09-14 12:18:12 -06001477 goto handle_error;
Victor Stinner43125222019-04-24 18:23:53 +02001478 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001479 Py_INCREF(interp->sysdict);
1480 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner0fd2c302019-06-04 03:15:09 +02001481 if (_PySys_InitMain(runtime, interp) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001482 return _PyStatus_ERR("can't finish initializing sys");
Victor Stinnerab672812019-01-23 15:04:40 +01001483 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001484 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001485 else if (PyErr_Occurred()) {
1486 goto handle_error;
1487 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001488
Victor Stinner43125222019-04-24 18:23:53 +02001489 PyObject *bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001490 if (bimod != NULL) {
1491 interp->builtins = PyModule_GetDict(bimod);
1492 if (interp->builtins == NULL)
1493 goto handle_error;
1494 Py_INCREF(interp->builtins);
1495 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001496 else if (PyErr_Occurred()) {
1497 goto handle_error;
1498 }
Nick Coghland6009512014-11-20 21:39:37 +10001499
Nick Coghland6009512014-11-20 21:39:37 +10001500 if (bimod != NULL && sysmod != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001501 status = _PyBuiltins_AddExceptions(bimod);
1502 if (_PyStatus_EXCEPTION(status)) {
1503 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001504 }
Nick Coghland6009512014-11-20 21:39:37 +10001505
Victor Stinner331a6a52019-05-27 16:39:22 +02001506 status = _PySys_SetPreliminaryStderr(interp->sysdict);
1507 if (_PyStatus_EXCEPTION(status)) {
1508 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001509 }
Nick Coghland6009512014-11-20 21:39:37 +10001510
Victor Stinner331a6a52019-05-27 16:39:22 +02001511 status = _PyImportHooks_Init();
1512 if (_PyStatus_EXCEPTION(status)) {
1513 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001514 }
Nick Coghland6009512014-11-20 21:39:37 +10001515
Victor Stinner331a6a52019-05-27 16:39:22 +02001516 status = init_importlib(interp, sysmod);
1517 if (_PyStatus_EXCEPTION(status)) {
1518 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001519 }
Nick Coghland6009512014-11-20 21:39:37 +10001520
Victor Stinner331a6a52019-05-27 16:39:22 +02001521 status = init_importlib_external(interp);
1522 if (_PyStatus_EXCEPTION(status)) {
1523 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001524 }
Nick Coghland6009512014-11-20 21:39:37 +10001525
Victor Stinnerc5c64252019-09-23 15:59:00 +02001526 status = _PyUnicode_InitEncodings(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001527 if (_PyStatus_EXCEPTION(status)) {
1528 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001529 }
1530
Victor Stinner331a6a52019-05-27 16:39:22 +02001531 status = init_sys_streams(interp);
1532 if (_PyStatus_EXCEPTION(status)) {
1533 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001534 }
1535
Victor Stinner331a6a52019-05-27 16:39:22 +02001536 status = add_main_module(interp);
1537 if (_PyStatus_EXCEPTION(status)) {
1538 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001539 }
1540
Victor Stinner331a6a52019-05-27 16:39:22 +02001541 if (config->site_import) {
1542 status = init_import_size();
1543 if (_PyStatus_EXCEPTION(status)) {
1544 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001545 }
1546 }
Nick Coghland6009512014-11-20 21:39:37 +10001547 }
1548
Victor Stinnera7368ac2017-11-15 18:11:45 -08001549 if (PyErr_Occurred()) {
1550 goto handle_error;
1551 }
Nick Coghland6009512014-11-20 21:39:37 +10001552
Victor Stinnera7368ac2017-11-15 18:11:45 -08001553 *tstate_p = tstate;
Victor Stinner331a6a52019-05-27 16:39:22 +02001554 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001555
Nick Coghland6009512014-11-20 21:39:37 +10001556handle_error:
1557 /* Oops, it didn't work. Undo it all. */
1558
1559 PyErr_PrintEx(0);
1560 PyThreadState_Clear(tstate);
1561 PyThreadState_Swap(save_tstate);
1562 PyThreadState_Delete(tstate);
1563 PyInterpreterState_Delete(interp);
1564
Victor Stinnera7368ac2017-11-15 18:11:45 -08001565 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001566 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001567}
1568
1569PyThreadState *
1570Py_NewInterpreter(void)
1571{
Stéphane Wirtel9e06d2b2019-03-18 17:10:29 +01001572 PyThreadState *tstate = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001573 PyStatus status = new_interpreter(&tstate);
1574 if (_PyStatus_EXCEPTION(status)) {
1575 Py_ExitStatusException(status);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001576 }
1577 return tstate;
1578
Nick Coghland6009512014-11-20 21:39:37 +10001579}
1580
1581/* Delete an interpreter and its last thread. This requires that the
1582 given thread state is current, that the thread has no remaining
1583 frames, and that it is its interpreter's only remaining thread.
1584 It is a fatal error to violate these constraints.
1585
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001586 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001587 everything, regardless.)
1588
1589 Locking: as above.
1590
1591*/
1592
1593void
1594Py_EndInterpreter(PyThreadState *tstate)
1595{
1596 PyInterpreterState *interp = tstate->interp;
1597
Victor Stinner50b48572018-11-01 01:51:40 +01001598 if (tstate != _PyThreadState_GET())
Nick Coghland6009512014-11-20 21:39:37 +10001599 Py_FatalError("Py_EndInterpreter: thread is not current");
1600 if (tstate->frame != NULL)
1601 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Eric Snow5be45a62019-03-08 22:47:07 -07001602 interp->finalizing = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001603
Eric Snow842a2f02019-03-15 15:47:51 -06001604 // Wrap up existing "threading"-module-created, non-daemon threads.
Nick Coghland6009512014-11-20 21:39:37 +10001605 wait_for_thread_shutdown();
1606
Marcel Plch776407f2017-12-20 11:17:58 +01001607 call_py_exitfuncs(interp);
1608
Nick Coghland6009512014-11-20 21:39:37 +10001609 if (tstate != interp->tstate_head || tstate->next != NULL)
1610 Py_FatalError("Py_EndInterpreter: not the last thread");
1611
1612 PyImport_Cleanup();
1613 PyInterpreterState_Clear(interp);
1614 PyThreadState_Swap(NULL);
1615 PyInterpreterState_Delete(interp);
1616}
1617
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001618/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001619
Victor Stinner331a6a52019-05-27 16:39:22 +02001620static PyStatus
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001621add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001622{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001623 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001624 m = PyImport_AddModule("__main__");
1625 if (m == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +02001626 return _PyStatus_ERR("can't create __main__ module");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001627
Nick Coghland6009512014-11-20 21:39:37 +10001628 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001629 ann_dict = PyDict_New();
1630 if ((ann_dict == NULL) ||
1631 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001632 return _PyStatus_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001633 }
1634 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001635
Nick Coghland6009512014-11-20 21:39:37 +10001636 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1637 PyObject *bimod = PyImport_ImportModule("builtins");
1638 if (bimod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001639 return _PyStatus_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001640 }
1641 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001642 return _PyStatus_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001643 }
1644 Py_DECREF(bimod);
1645 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001646
Nick Coghland6009512014-11-20 21:39:37 +10001647 /* Main is a little special - imp.is_builtin("__main__") will return
1648 * False, but BuiltinImporter is still the most appropriate initial
1649 * setting for its __loader__ attribute. A more suitable value will
1650 * be set if __main__ gets further initialized later in the startup
1651 * process.
1652 */
1653 loader = PyDict_GetItemString(d, "__loader__");
1654 if (loader == NULL || loader == Py_None) {
1655 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1656 "BuiltinImporter");
1657 if (loader == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001658 return _PyStatus_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001659 }
1660 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001661 return _PyStatus_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001662 }
1663 Py_DECREF(loader);
1664 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001665 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001666}
1667
Nick Coghland6009512014-11-20 21:39:37 +10001668/* Import the site module (not into __main__ though) */
1669
Victor Stinner331a6a52019-05-27 16:39:22 +02001670static PyStatus
Victor Stinner43fc3bb2019-05-02 11:54:20 -04001671init_import_size(void)
Nick Coghland6009512014-11-20 21:39:37 +10001672{
1673 PyObject *m;
1674 m = PyImport_ImportModule("site");
1675 if (m == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001676 return _PyStatus_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001677 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001678 Py_DECREF(m);
Victor Stinner331a6a52019-05-27 16:39:22 +02001679 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001680}
1681
Victor Stinner874dbe82015-09-04 17:29:57 +02001682/* Check if a file descriptor is valid or not.
1683 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1684static int
1685is_valid_fd(int fd)
1686{
Victor Stinner3092d6b2019-04-17 18:09:12 +02001687/* dup() is faster than fstat(): fstat() can require input/output operations,
1688 whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python
1689 startup. Problem: dup() doesn't check if the file descriptor is valid on
1690 some platforms.
1691
1692 bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other
1693 side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with
1694 EBADF. FreeBSD has similar issue (bpo-32849).
1695
1696 Only use dup() on platforms where dup() is enough to detect invalid FD in
1697 corner cases: on Linux and Windows (bpo-32849). */
1698#if defined(__linux__) || defined(MS_WINDOWS)
1699 if (fd < 0) {
1700 return 0;
1701 }
1702 int fd2;
1703
1704 _Py_BEGIN_SUPPRESS_IPH
1705 fd2 = dup(fd);
1706 if (fd2 >= 0) {
1707 close(fd2);
1708 }
1709 _Py_END_SUPPRESS_IPH
1710
1711 return (fd2 >= 0);
1712#else
Victor Stinner1c4670e2017-05-04 00:45:56 +02001713 struct stat st;
1714 return (fstat(fd, &st) == 0);
Victor Stinner1c4670e2017-05-04 00:45:56 +02001715#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001716}
1717
1718/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001719static PyObject*
Victor Stinner331a6a52019-05-27 16:39:22 +02001720create_stdio(const PyConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001721 int fd, int write_mode, const char* name,
Victor Stinner709d23d2019-05-02 14:56:30 -04001722 const wchar_t* encoding, const wchar_t* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001723{
1724 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1725 const char* mode;
1726 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001727 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001728 int buffering, isatty;
1729 _Py_IDENTIFIER(open);
1730 _Py_IDENTIFIER(isatty);
1731 _Py_IDENTIFIER(TextIOWrapper);
1732 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001733 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001734
Victor Stinner874dbe82015-09-04 17:29:57 +02001735 if (!is_valid_fd(fd))
1736 Py_RETURN_NONE;
1737
Nick Coghland6009512014-11-20 21:39:37 +10001738 /* stdin is always opened in buffered mode, first because it shouldn't
1739 make a difference in common use cases, second because TextIOWrapper
1740 depends on the presence of a read1() method which only exists on
1741 buffered streams.
1742 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001743 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001744 buffering = 0;
1745 else
1746 buffering = -1;
1747 if (write_mode)
1748 mode = "wb";
1749 else
1750 mode = "rb";
1751 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1752 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001753 Py_None, Py_None, /* encoding, errors */
1754 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001755 if (buf == NULL)
1756 goto error;
1757
1758 if (buffering) {
1759 _Py_IDENTIFIER(raw);
1760 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1761 if (raw == NULL)
1762 goto error;
1763 }
1764 else {
1765 raw = buf;
1766 Py_INCREF(raw);
1767 }
1768
Steve Dower39294992016-08-30 21:22:36 -07001769#ifdef MS_WINDOWS
1770 /* Windows console IO is always UTF-8 encoded */
1771 if (PyWindowsConsoleIO_Check(raw))
Victor Stinner709d23d2019-05-02 14:56:30 -04001772 encoding = L"utf-8";
Steve Dower39294992016-08-30 21:22:36 -07001773#endif
1774
Nick Coghland6009512014-11-20 21:39:37 +10001775 text = PyUnicode_FromString(name);
1776 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1777 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001778 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001779 if (res == NULL)
1780 goto error;
1781 isatty = PyObject_IsTrue(res);
1782 Py_DECREF(res);
1783 if (isatty == -1)
1784 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001785 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001786 write_through = Py_True;
1787 else
1788 write_through = Py_False;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001789 if (isatty && buffered_stdio)
Nick Coghland6009512014-11-20 21:39:37 +10001790 line_buffering = Py_True;
1791 else
1792 line_buffering = Py_False;
1793
1794 Py_CLEAR(raw);
1795 Py_CLEAR(text);
1796
1797#ifdef MS_WINDOWS
1798 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1799 newlines to "\n".
1800 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1801 newline = NULL;
1802#else
1803 /* sys.stdin: split lines at "\n".
1804 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1805 newline = "\n";
1806#endif
1807
Victor Stinner709d23d2019-05-02 14:56:30 -04001808 PyObject *encoding_str = PyUnicode_FromWideChar(encoding, -1);
1809 if (encoding_str == NULL) {
1810 Py_CLEAR(buf);
1811 goto error;
1812 }
1813
1814 PyObject *errors_str = PyUnicode_FromWideChar(errors, -1);
1815 if (errors_str == NULL) {
1816 Py_CLEAR(buf);
1817 Py_CLEAR(encoding_str);
1818 goto error;
1819 }
1820
1821 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OOOsOO",
1822 buf, encoding_str, errors_str,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001823 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001824 Py_CLEAR(buf);
Victor Stinner709d23d2019-05-02 14:56:30 -04001825 Py_CLEAR(encoding_str);
1826 Py_CLEAR(errors_str);
Nick Coghland6009512014-11-20 21:39:37 +10001827 if (stream == NULL)
1828 goto error;
1829
1830 if (write_mode)
1831 mode = "w";
1832 else
1833 mode = "r";
1834 text = PyUnicode_FromString(mode);
1835 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1836 goto error;
1837 Py_CLEAR(text);
1838 return stream;
1839
1840error:
1841 Py_XDECREF(buf);
1842 Py_XDECREF(stream);
1843 Py_XDECREF(text);
1844 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001845
Victor Stinner874dbe82015-09-04 17:29:57 +02001846 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1847 /* Issue #24891: the file descriptor was closed after the first
1848 is_valid_fd() check was called. Ignore the OSError and set the
1849 stream to None. */
1850 PyErr_Clear();
1851 Py_RETURN_NONE;
1852 }
1853 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001854}
1855
1856/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinner331a6a52019-05-27 16:39:22 +02001857static PyStatus
Victor Stinner91106cd2017-12-13 12:29:09 +01001858init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001859{
1860 PyObject *iomod = NULL, *wrapper;
1861 PyObject *bimod = NULL;
1862 PyObject *m;
1863 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001864 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001865 PyObject * encoding_attr;
Victor Stinner331a6a52019-05-27 16:39:22 +02001866 PyStatus res = _PyStatus_OK();
1867 PyConfig *config = &interp->config;
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001868
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001869 /* Check that stdin is not a directory
1870 Using shell redirection, you can redirect stdin to a directory,
1871 crashing the Python interpreter. Catch this common mistake here
1872 and output a useful error message. Note that under MS Windows,
1873 the shell already prevents that. */
1874#ifndef MS_WINDOWS
1875 struct _Py_stat_struct sb;
1876 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1877 S_ISDIR(sb.st_mode)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001878 return _PyStatus_ERR("<stdin> is a directory, cannot continue");
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001879 }
1880#endif
1881
Nick Coghland6009512014-11-20 21:39:37 +10001882 /* Hack to avoid a nasty recursion issue when Python is invoked
1883 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1884 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1885 goto error;
1886 }
1887 Py_DECREF(m);
1888
1889 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1890 goto error;
1891 }
1892 Py_DECREF(m);
1893
1894 if (!(bimod = PyImport_ImportModule("builtins"))) {
1895 goto error;
1896 }
1897
1898 if (!(iomod = PyImport_ImportModule("io"))) {
1899 goto error;
1900 }
1901 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1902 goto error;
1903 }
1904
1905 /* Set builtins.open */
1906 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1907 Py_DECREF(wrapper);
1908 goto error;
1909 }
1910 Py_DECREF(wrapper);
1911
Nick Coghland6009512014-11-20 21:39:37 +10001912 /* Set sys.stdin */
1913 fd = fileno(stdin);
1914 /* Under some conditions stdin, stdout and stderr may not be connected
1915 * and fileno() may point to an invalid file descriptor. For example
1916 * GUI apps don't have valid standard streams by default.
1917 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001918 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001919 config->stdio_encoding,
1920 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001921 if (std == NULL)
1922 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001923 PySys_SetObject("__stdin__", std);
1924 _PySys_SetObjectId(&PyId_stdin, std);
1925 Py_DECREF(std);
1926
1927 /* Set sys.stdout */
1928 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001929 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001930 config->stdio_encoding,
1931 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001932 if (std == NULL)
1933 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001934 PySys_SetObject("__stdout__", std);
1935 _PySys_SetObjectId(&PyId_stdout, std);
1936 Py_DECREF(std);
1937
1938#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1939 /* Set sys.stderr, replaces the preliminary stderr */
1940 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001941 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001942 config->stdio_encoding,
Victor Stinner709d23d2019-05-02 14:56:30 -04001943 L"backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001944 if (std == NULL)
1945 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001946
1947 /* Same as hack above, pre-import stderr's codec to avoid recursion
1948 when import.c tries to write to stderr in verbose mode. */
1949 encoding_attr = PyObject_GetAttrString(std, "encoding");
1950 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001951 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001952 if (std_encoding != NULL) {
1953 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1954 Py_XDECREF(codec_info);
1955 }
1956 Py_DECREF(encoding_attr);
1957 }
1958 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1959
1960 if (PySys_SetObject("__stderr__", std) < 0) {
1961 Py_DECREF(std);
1962 goto error;
1963 }
1964 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1965 Py_DECREF(std);
1966 goto error;
1967 }
1968 Py_DECREF(std);
1969#endif
1970
Victor Stinnera7368ac2017-11-15 18:11:45 -08001971 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001972
Victor Stinnera7368ac2017-11-15 18:11:45 -08001973error:
Victor Stinner331a6a52019-05-27 16:39:22 +02001974 res = _PyStatus_ERR("can't initialize sys standard streams");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001975
1976done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02001977 _Py_ClearStandardStreamEncoding();
Victor Stinner31e99082017-12-20 23:41:38 +01001978
Nick Coghland6009512014-11-20 21:39:37 +10001979 Py_XDECREF(bimod);
1980 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001981 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001982}
1983
1984
Victor Stinner10dc4842015-03-24 12:01:30 +01001985static void
Victor Stinner47bbab92019-09-18 14:10:16 +02001986_Py_FatalError_DumpTracebacks(int fd, PyInterpreterState *interp,
1987 PyThreadState *tstate)
Victor Stinner10dc4842015-03-24 12:01:30 +01001988{
Victor Stinner10dc4842015-03-24 12:01:30 +01001989 fputc('\n', stderr);
1990 fflush(stderr);
1991
1992 /* display the current Python stack */
Victor Stinner47bbab92019-09-18 14:10:16 +02001993 _Py_DumpTracebackThreads(fd, interp, tstate);
Victor Stinner10dc4842015-03-24 12:01:30 +01001994}
Victor Stinner791da1c2016-03-14 16:53:12 +01001995
1996/* Print the current exception (if an exception is set) with its traceback,
1997 or display the current Python stack.
1998
1999 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
2000 called on catastrophic cases.
2001
2002 Return 1 if the traceback was displayed, 0 otherwise. */
2003
2004static int
2005_Py_FatalError_PrintExc(int fd)
2006{
2007 PyObject *ferr, *res;
2008 PyObject *exception, *v, *tb;
2009 int has_tb;
2010
Victor Stinner791da1c2016-03-14 16:53:12 +01002011 PyErr_Fetch(&exception, &v, &tb);
2012 if (exception == NULL) {
2013 /* No current exception */
2014 return 0;
2015 }
2016
2017 ferr = _PySys_GetObjectId(&PyId_stderr);
2018 if (ferr == NULL || ferr == Py_None) {
2019 /* sys.stderr is not set yet or set to None,
2020 no need to try to display the exception */
2021 return 0;
2022 }
2023
2024 PyErr_NormalizeException(&exception, &v, &tb);
2025 if (tb == NULL) {
2026 tb = Py_None;
2027 Py_INCREF(tb);
2028 }
2029 PyException_SetTraceback(v, tb);
2030 if (exception == NULL) {
2031 /* PyErr_NormalizeException() failed */
2032 return 0;
2033 }
2034
2035 has_tb = (tb != Py_None);
2036 PyErr_Display(exception, v, tb);
2037 Py_XDECREF(exception);
2038 Py_XDECREF(v);
2039 Py_XDECREF(tb);
2040
2041 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07002042 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01002043 if (res == NULL)
2044 PyErr_Clear();
2045 else
2046 Py_DECREF(res);
2047
2048 return has_tb;
2049}
2050
Nick Coghland6009512014-11-20 21:39:37 +10002051/* Print fatal error message and abort */
2052
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002053#ifdef MS_WINDOWS
2054static void
2055fatal_output_debug(const char *msg)
2056{
2057 /* buffer of 256 bytes allocated on the stack */
2058 WCHAR buffer[256 / sizeof(WCHAR)];
2059 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2060 size_t msglen;
2061
2062 OutputDebugStringW(L"Fatal Python error: ");
2063
2064 msglen = strlen(msg);
2065 while (msglen) {
2066 size_t i;
2067
2068 if (buflen > msglen) {
2069 buflen = msglen;
2070 }
2071
2072 /* Convert the message to wchar_t. This uses a simple one-to-one
2073 conversion, assuming that the this error message actually uses
2074 ASCII only. If this ceases to be true, we will have to convert. */
2075 for (i=0; i < buflen; ++i) {
2076 buffer[i] = msg[i];
2077 }
2078 buffer[i] = L'\0';
2079 OutputDebugStringW(buffer);
2080
2081 msg += buflen;
2082 msglen -= buflen;
2083 }
2084 OutputDebugStringW(L"\n");
2085}
2086#endif
2087
Victor Stinner47bbab92019-09-18 14:10:16 +02002088
2089static void
2090fatal_error_dump_runtime(FILE *stream, _PyRuntimeState *runtime)
2091{
2092 fprintf(stream, "Python runtime state: ");
2093 if (runtime->finalizing) {
2094 fprintf(stream, "finalizing (tstate=%p)", runtime->finalizing);
2095 }
2096 else if (runtime->initialized) {
2097 fprintf(stream, "initialized");
2098 }
2099 else if (runtime->core_initialized) {
2100 fprintf(stream, "core initialized");
2101 }
2102 else if (runtime->preinitialized) {
2103 fprintf(stream, "preinitialized");
2104 }
2105 else if (runtime->preinitializing) {
2106 fprintf(stream, "preinitializing");
2107 }
2108 else {
2109 fprintf(stream, "unknown");
2110 }
2111 fprintf(stream, "\n");
2112 fflush(stream);
2113}
2114
2115
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002116static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002117fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002118{
Victor Stinner47bbab92019-09-18 14:10:16 +02002119 FILE *stream = stderr;
2120 const int fd = fileno(stream);
Victor Stinner53345a42015-03-25 01:55:14 +01002121 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002122
2123 if (reentrant) {
2124 /* Py_FatalError() caused a second fatal error.
2125 Example: flush_std_files() raises a recursion error. */
2126 goto exit;
2127 }
2128 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002129
Victor Stinner47bbab92019-09-18 14:10:16 +02002130 fprintf(stream, "Fatal Python error: ");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002131 if (prefix) {
Victor Stinner47bbab92019-09-18 14:10:16 +02002132 fputs(prefix, stream);
2133 fputs(": ", stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002134 }
2135 if (msg) {
Victor Stinner47bbab92019-09-18 14:10:16 +02002136 fputs(msg, stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002137 }
2138 else {
Victor Stinner47bbab92019-09-18 14:10:16 +02002139 fprintf(stream, "<message not set>");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002140 }
Victor Stinner47bbab92019-09-18 14:10:16 +02002141 fputs("\n", stream);
2142 fflush(stream); /* it helps in Windows debug build */
2143
2144 _PyRuntimeState *runtime = &_PyRuntime;
2145 fatal_error_dump_runtime(stream, runtime);
2146
2147 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
2148 PyInterpreterState *interp = NULL;
2149 if (tstate != NULL) {
2150 interp = tstate->interp;
2151 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002152
Victor Stinner3a228ab2018-11-01 00:26:41 +01002153 /* Check if the current thread has a Python thread state
Victor Stinner47bbab92019-09-18 14:10:16 +02002154 and holds the GIL.
Victor Stinner3a228ab2018-11-01 00:26:41 +01002155
Victor Stinner47bbab92019-09-18 14:10:16 +02002156 tss_tstate is NULL if Py_FatalError() is called from a C thread which
2157 has no Python thread state.
2158
2159 tss_tstate != tstate if the current Python thread does not hold the GIL.
2160 */
2161 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2162 int has_tstate_and_gil = (tss_tstate != NULL && tss_tstate == tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002163 if (has_tstate_and_gil) {
2164 /* If an exception is set, print the exception with its traceback */
2165 if (!_Py_FatalError_PrintExc(fd)) {
2166 /* No exception is set, or an exception is set without traceback */
Victor Stinner47bbab92019-09-18 14:10:16 +02002167 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002168 }
2169 }
2170 else {
Victor Stinner47bbab92019-09-18 14:10:16 +02002171 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002172 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002173
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002174 /* The main purpose of faulthandler is to display the traceback.
2175 This function already did its best to display a traceback.
2176 Disable faulthandler to prevent writing a second traceback
2177 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002178 _PyFaulthandler_Fini();
2179
Victor Stinner791da1c2016-03-14 16:53:12 +01002180 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002181 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002182 /* Flush sys.stdout and sys.stderr */
2183 flush_std_files();
2184 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002185
Nick Coghland6009512014-11-20 21:39:37 +10002186#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002187 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002188#endif /* MS_WINDOWS */
2189
2190exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002191 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002192#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002193 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002194#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002195 abort();
2196 }
2197 else {
2198 exit(status);
2199 }
2200}
2201
Victor Stinner19760862017-12-20 01:41:59 +01002202void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002203Py_FatalError(const char *msg)
2204{
2205 fatal_error(NULL, msg, -1);
2206}
2207
Victor Stinner19760862017-12-20 01:41:59 +01002208void _Py_NO_RETURN
Victor Stinner331a6a52019-05-27 16:39:22 +02002209Py_ExitStatusException(PyStatus status)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002210{
Victor Stinner331a6a52019-05-27 16:39:22 +02002211 if (_PyStatus_IS_EXIT(status)) {
2212 exit(status.exitcode);
Victor Stinnerdbacfc22019-05-16 16:39:26 +02002213 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002214 else if (_PyStatus_IS_ERROR(status)) {
2215 fatal_error(status.func, status.err_msg, 1);
Victor Stinnerdfe88472019-03-01 12:14:41 +01002216 }
2217 else {
Victor Stinner331a6a52019-05-27 16:39:22 +02002218 Py_FatalError("Py_ExitStatusException() must not be called on success");
Victor Stinnerdfe88472019-03-01 12:14:41 +01002219 }
Nick Coghland6009512014-11-20 21:39:37 +10002220}
2221
2222/* Clean up and exit */
2223
Victor Stinnerd7292b52016-06-17 12:29:00 +02002224# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002225
Nick Coghland6009512014-11-20 21:39:37 +10002226/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002227void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002228{
Victor Stinnercaba55b2018-08-03 15:33:52 +02002229 PyInterpreterState *is = _PyInterpreterState_Get();
Marcel Plch776407f2017-12-20 11:17:58 +01002230
Antoine Pitroufc5db952017-12-13 02:29:07 +01002231 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002232 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2233
2234 is->pyexitfunc = func;
2235 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002236}
2237
2238static void
Marcel Plch776407f2017-12-20 11:17:58 +01002239call_py_exitfuncs(PyInterpreterState *istate)
Nick Coghland6009512014-11-20 21:39:37 +10002240{
Marcel Plch776407f2017-12-20 11:17:58 +01002241 if (istate->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002242 return;
2243
Marcel Plch776407f2017-12-20 11:17:58 +01002244 (*istate->pyexitfunc)(istate->pyexitmodule);
Nick Coghland6009512014-11-20 21:39:37 +10002245 PyErr_Clear();
2246}
2247
2248/* Wait until threading._shutdown completes, provided
2249 the threading module was imported in the first place.
2250 The shutdown routine will wait until all non-daemon
2251 "threading" threads have completed. */
2252static void
2253wait_for_thread_shutdown(void)
2254{
Nick Coghland6009512014-11-20 21:39:37 +10002255 _Py_IDENTIFIER(_shutdown);
2256 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002257 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002258 if (threading == NULL) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002259 if (PyErr_Occurred()) {
2260 PyErr_WriteUnraisable(NULL);
2261 }
2262 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002263 return;
2264 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002265 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002266 if (result == NULL) {
2267 PyErr_WriteUnraisable(threading);
2268 }
2269 else {
2270 Py_DECREF(result);
2271 }
2272 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002273}
2274
2275#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002276int Py_AtExit(void (*func)(void))
2277{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002278 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002279 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002280 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002281 return 0;
2282}
2283
2284static void
Victor Stinner8e91c242019-04-24 17:24:01 +02002285call_ll_exitfuncs(_PyRuntimeState *runtime)
Nick Coghland6009512014-11-20 21:39:37 +10002286{
Victor Stinner8e91c242019-04-24 17:24:01 +02002287 while (runtime->nexitfuncs > 0) {
Victor Stinner87d23a02019-04-26 05:49:26 +02002288 /* pop last function from the list */
2289 runtime->nexitfuncs--;
2290 void (*exitfunc)(void) = runtime->exitfuncs[runtime->nexitfuncs];
2291 runtime->exitfuncs[runtime->nexitfuncs] = NULL;
2292
2293 exitfunc();
Victor Stinner8e91c242019-04-24 17:24:01 +02002294 }
Nick Coghland6009512014-11-20 21:39:37 +10002295
2296 fflush(stdout);
2297 fflush(stderr);
2298}
2299
Victor Stinnercfc88312018-08-01 16:41:25 +02002300void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002301Py_Exit(int sts)
2302{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002303 if (Py_FinalizeEx() < 0) {
2304 sts = 120;
2305 }
Nick Coghland6009512014-11-20 21:39:37 +10002306
2307 exit(sts);
2308}
2309
Victor Stinner331a6a52019-05-27 16:39:22 +02002310static PyStatus
Victor Stinner43fc3bb2019-05-02 11:54:20 -04002311init_signals(void)
Nick Coghland6009512014-11-20 21:39:37 +10002312{
2313#ifdef SIGPIPE
2314 PyOS_setsig(SIGPIPE, SIG_IGN);
2315#endif
2316#ifdef SIGXFZ
2317 PyOS_setsig(SIGXFZ, SIG_IGN);
2318#endif
2319#ifdef SIGXFSZ
2320 PyOS_setsig(SIGXFSZ, SIG_IGN);
2321#endif
2322 PyOS_InitInterrupts(); /* May imply initsignal() */
2323 if (PyErr_Occurred()) {
Victor Stinner331a6a52019-05-27 16:39:22 +02002324 return _PyStatus_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002325 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002326 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002327}
2328
2329
2330/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2331 *
2332 * All of the code in this function must only use async-signal-safe functions,
2333 * listed at `man 7 signal` or
2334 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2335 */
2336void
2337_Py_RestoreSignals(void)
2338{
2339#ifdef SIGPIPE
2340 PyOS_setsig(SIGPIPE, SIG_DFL);
2341#endif
2342#ifdef SIGXFZ
2343 PyOS_setsig(SIGXFZ, SIG_DFL);
2344#endif
2345#ifdef SIGXFSZ
2346 PyOS_setsig(SIGXFSZ, SIG_DFL);
2347#endif
2348}
2349
2350
2351/*
2352 * The file descriptor fd is considered ``interactive'' if either
2353 * a) isatty(fd) is TRUE, or
2354 * b) the -i flag was given, and the filename associated with
2355 * the descriptor is NULL or "<stdin>" or "???".
2356 */
2357int
2358Py_FdIsInteractive(FILE *fp, const char *filename)
2359{
2360 if (isatty((int)fileno(fp)))
2361 return 1;
2362 if (!Py_InteractiveFlag)
2363 return 0;
2364 return (filename == NULL) ||
2365 (strcmp(filename, "<stdin>") == 0) ||
2366 (strcmp(filename, "???") == 0);
2367}
2368
2369
Nick Coghland6009512014-11-20 21:39:37 +10002370/* Wrappers around sigaction() or signal(). */
2371
2372PyOS_sighandler_t
2373PyOS_getsig(int sig)
2374{
2375#ifdef HAVE_SIGACTION
2376 struct sigaction context;
2377 if (sigaction(sig, NULL, &context) == -1)
2378 return SIG_ERR;
2379 return context.sa_handler;
2380#else
2381 PyOS_sighandler_t handler;
2382/* Special signal handling for the secure CRT in Visual Studio 2005 */
2383#if defined(_MSC_VER) && _MSC_VER >= 1400
2384 switch (sig) {
2385 /* Only these signals are valid */
2386 case SIGINT:
2387 case SIGILL:
2388 case SIGFPE:
2389 case SIGSEGV:
2390 case SIGTERM:
2391 case SIGBREAK:
2392 case SIGABRT:
2393 break;
2394 /* Don't call signal() with other values or it will assert */
2395 default:
2396 return SIG_ERR;
2397 }
2398#endif /* _MSC_VER && _MSC_VER >= 1400 */
2399 handler = signal(sig, SIG_IGN);
2400 if (handler != SIG_ERR)
2401 signal(sig, handler);
2402 return handler;
2403#endif
2404}
2405
2406/*
2407 * All of the code in this function must only use async-signal-safe functions,
2408 * listed at `man 7 signal` or
2409 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2410 */
2411PyOS_sighandler_t
2412PyOS_setsig(int sig, PyOS_sighandler_t handler)
2413{
2414#ifdef HAVE_SIGACTION
2415 /* Some code in Modules/signalmodule.c depends on sigaction() being
2416 * used here if HAVE_SIGACTION is defined. Fix that if this code
2417 * changes to invalidate that assumption.
2418 */
2419 struct sigaction context, ocontext;
2420 context.sa_handler = handler;
2421 sigemptyset(&context.sa_mask);
2422 context.sa_flags = 0;
2423 if (sigaction(sig, &context, &ocontext) == -1)
2424 return SIG_ERR;
2425 return ocontext.sa_handler;
2426#else
2427 PyOS_sighandler_t oldhandler;
2428 oldhandler = signal(sig, handler);
2429#ifdef HAVE_SIGINTERRUPT
2430 siginterrupt(sig, 1);
2431#endif
2432 return oldhandler;
2433#endif
2434}
2435
2436#ifdef __cplusplus
2437}
2438#endif