blob: 1084def9ce03fc90bc1d9936431cb2d61a2f5077 [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 Stinner09532fe2019-05-10 23:39:09 +02009#include "pycore_coreconfig.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 Stinnerf7e5b562017-11-15 15:48:08 -080063static _PyInitError add_main_module(PyInterpreterState *interp);
Victor Stinner43fc3bb2019-05-02 11:54:20 -040064static _PyInitError init_import_size(void);
Victor Stinner91106cd2017-12-13 12:29:09 +010065static _PyInitError init_sys_streams(PyInterpreterState *interp);
Victor Stinner43fc3bb2019-05-02 11:54:20 -040066static _PyInitError 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 Stinnerf7e5b562017-11-15 15:48:08 -080075_PyInitError
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 Stinnerf7e5b562017-11-15 15:48:08 -080085 return _Py_INIT_OK();
86 }
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 Stinnerf7e5b562017-11-15 15:48:08 -0800148static _PyInitError
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 Stinnerc96be812019-05-14 17:34:56 +0200154 int verbose = interp->core_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 Stinnerf7e5b562017-11-15 15:48:08 -0800158 return _Py_INIT_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 Stinnerf7e5b562017-11-15 15:48:08 -0800165 return _Py_INIT_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 Stinnerf7e5b562017-11-15 15:48:08 -0800172 return _Py_INIT_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 Stinnerf7e5b562017-11-15 15:48:08 -0800178 return _Py_INIT_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 Stinnerf7e5b562017-11-15 15:48:08 -0800184 return _Py_INIT_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 Stinnerf7e5b562017-11-15 15:48:08 -0800191 return _Py_INIT_ERR("importlib install failed");
Nick Coghland6009512014-11-20 21:39:37 +1000192 }
193 Py_DECREF(value);
194 Py_DECREF(impmod);
195
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800196 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000197}
198
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800199static _PyInitError
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 Stinnerf7e5b562017-11-15 15:48:08 -0800207 return _Py_INIT_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 Stinner43125222019-04-24 18:23:53 +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 Stinner484f20d2019-03-27 02:04:16 +0100440 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 Stinner1dc6e392018-07-25 02:49:17 +0200449static _PyInitError
Victor Stinner5edcf262019-05-23 00:57:57 +0200450pyinit_core_reconfigure(_PyRuntimeState *runtime,
451 PyInterpreterState **interp_p,
452 const _PyCoreConfig *core_config)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200453{
Victor Stinner1a9f0d82019-05-01 15:22:52 +0200454 _PyInitError err;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100455 PyThreadState *tstate = _PyThreadState_GET();
456 if (!tstate) {
457 return _Py_INIT_ERR("failed to read thread state");
458 }
459
460 PyInterpreterState *interp = tstate->interp;
461 if (interp == NULL) {
462 return _Py_INIT_ERR("can't make main interpreter");
463 }
464 *interp_p = interp;
465
Victor Stinner43125222019-04-24 18:23:53 +0200466 _PyCoreConfig_Write(core_config, runtime);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200467
Victor Stinner1a9f0d82019-05-01 15:22:52 +0200468 err = _PyCoreConfig_Copy(&interp->core_config, core_config);
469 if (_Py_INIT_FAILED(err)) {
470 return err;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200471 }
472 core_config = &interp->core_config;
473
474 if (core_config->_install_importlib) {
Victor Stinner1a9f0d82019-05-01 15:22:52 +0200475 err = _PyCoreConfig_SetPathConfig(core_config);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200476 if (_Py_INIT_FAILED(err)) {
477 return err;
478 }
479 }
480 return _Py_INIT_OK();
481}
482
483
Victor Stinner1dc6e392018-07-25 02:49:17 +0200484static _PyInitError
Victor Stinner43125222019-04-24 18:23:53 +0200485pycore_init_runtime(_PyRuntimeState *runtime,
486 const _PyCoreConfig *core_config)
Nick Coghland6009512014-11-20 21:39:37 +1000487{
Victor Stinner43125222019-04-24 18:23:53 +0200488 if (runtime->initialized) {
Victor Stinner1dc6e392018-07-25 02:49:17 +0200489 return _Py_INIT_ERR("main interpreter already initialized");
490 }
Victor Stinnerda273412017-12-15 01:46:02 +0100491
Victor Stinner43125222019-04-24 18:23:53 +0200492 _PyCoreConfig_Write(core_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 Stinner43125222019-04-24 18:23:53 +0200505 _PyInitError err = _Py_HashRandomization_Init(core_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800506 if (_Py_INIT_FAILED(err)) {
507 return err;
508 }
509
Victor Stinner43125222019-04-24 18:23:53 +0200510 err = _PyInterpreterState_Enable(runtime);
Victor Stinnera7368ac2017-11-15 18:11:45 -0800511 if (_Py_INIT_FAILED(err)) {
512 return err;
513 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100514 return _Py_INIT_OK();
515}
Victor Stinnera7368ac2017-11-15 18:11:45 -0800516
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100517
518static _PyInitError
Victor Stinner43125222019-04-24 18:23:53 +0200519pycore_create_interpreter(_PyRuntimeState *runtime,
520 const _PyCoreConfig *core_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 Stinnerf7e5b562017-11-15 15:48:08 -0800525 return _Py_INIT_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 Stinner1a9f0d82019-05-01 15:22:52 +0200529 _PyInitError err = _PyCoreConfig_Copy(&interp->core_config, core_config);
530 if (_Py_INIT_FAILED(err)) {
531 return err;
Victor Stinnerda273412017-12-15 01:46:02 +0100532 }
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200533 core_config = &interp->core_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 Stinnerf7e5b562017-11-15 15:48:08 -0800537 return _Py_INIT_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 Stinner43125222019-04-24 18:23:53 +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 Stinner6d43f6f2019-01-22 21:18:05 +0100553 return _Py_INIT_OK();
554}
Nick Coghland6009512014-11-20 21:39:37 +1000555
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100556
557static _PyInitError
558pycore_init_types(void)
559{
Victor Stinnerab672812019-01-23 15:04:40 +0100560 _PyInitError err = _PyTypes_Init();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100561 if (_Py_INIT_FAILED(err)) {
562 return err;
563 }
564
565 err = _PyUnicode_Init();
566 if (_Py_INIT_FAILED(err)) {
567 return err;
568 }
569
570 if (_PyStructSequence_Init() < 0) {
571 return _Py_INIT_ERR("can't initialize structseq");
572 }
573
574 if (!_PyLong_Init()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800575 return _Py_INIT_ERR("can't init longs");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100576 }
Nick Coghland6009512014-11-20 21:39:37 +1000577
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100578 err = _PyExc_Init();
579 if (_Py_INIT_FAILED(err)) {
580 return err;
581 }
582
583 if (!_PyFloat_Init()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800584 return _Py_INIT_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()) {
588 return _Py_INIT_ERR("can't init context");
589 }
Victor Stinneref9d9b62019-05-22 11:28:22 +0200590
591 err = _PyErr_Init();
592 if (_Py_INIT_FAILED(err)) {
593 return err;
594 }
595
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100596 return _Py_INIT_OK();
597}
598
599
600static _PyInitError
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100601pycore_init_builtins(PyInterpreterState *interp)
602{
603 PyObject *bimod = _PyBuiltin_Init();
604 if (bimod == NULL) {
605 return _Py_INIT_ERR("can't initialize builtins modules");
606 }
607 _PyImport_FixupBuiltin(bimod, "builtins", interp->modules);
608
609 interp->builtins = PyModule_GetDict(bimod);
610 if (interp->builtins == NULL) {
611 return _Py_INIT_ERR("can't initialize builtins dict");
612 }
613 Py_INCREF(interp->builtins);
614
615 _PyInitError err = _PyBuiltins_AddExceptions(bimod);
616 if (_Py_INIT_FAILED(err)) {
617 return err;
618 }
619 return _Py_INIT_OK();
620}
621
622
623static _PyInitError
624pycore_init_import_warnings(PyInterpreterState *interp, PyObject *sysmod)
625{
626 _PyInitError err = _PyImport_Init(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800627 if (_Py_INIT_FAILED(err)) {
628 return err;
629 }
Nick Coghland6009512014-11-20 21:39:37 +1000630
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800631 err = _PyImportHooks_Init();
632 if (_Py_INIT_FAILED(err)) {
633 return err;
634 }
Nick Coghland6009512014-11-20 21:39:37 +1000635
636 /* Initialize _warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100637 if (_PyWarnings_Init() == NULL) {
Victor Stinner1f151112017-11-23 10:43:14 +0100638 return _Py_INIT_ERR("can't initialize warnings");
639 }
Nick Coghland6009512014-11-20 21:39:37 +1000640
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100641 if (interp->core_config._install_importlib) {
642 err = _PyCoreConfig_SetPathConfig(&interp->core_config);
Victor Stinnerb1147e42018-07-21 02:06:16 +0200643 if (_Py_INIT_FAILED(err)) {
644 return err;
645 }
646 }
647
Eric Snow1abcf672017-05-23 21:46:51 -0700648 /* This call sets up builtin and frozen import support */
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100649 if (interp->core_config._install_importlib) {
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400650 err = init_importlib(interp, sysmod);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800651 if (_Py_INIT_FAILED(err)) {
652 return err;
653 }
Eric Snow1abcf672017-05-23 21:46:51 -0700654 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100655 return _Py_INIT_OK();
656}
657
658
659static _PyInitError
Victor Stinner5edcf262019-05-23 00:57:57 +0200660pyinit_core_config(_PyRuntimeState *runtime,
661 PyInterpreterState **interp_p,
662 const _PyCoreConfig *core_config)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100663{
664 PyInterpreterState *interp;
665
Victor Stinner43125222019-04-24 18:23:53 +0200666 _PyCoreConfig_Write(core_config, runtime);
Victor Stinner20004952019-03-26 02:31:11 +0100667
Victor Stinner43125222019-04-24 18:23:53 +0200668 _PyInitError err = pycore_init_runtime(runtime, core_config);
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100669 if (_Py_INIT_FAILED(err)) {
670 return err;
671 }
672
Victor Stinner43125222019-04-24 18:23:53 +0200673 err = pycore_create_interpreter(runtime, core_config, &interp);
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100674 if (_Py_INIT_FAILED(err)) {
675 return err;
676 }
677 core_config = &interp->core_config;
678 *interp_p = interp;
679
680 err = pycore_init_types();
681 if (_Py_INIT_FAILED(err)) {
682 return err;
683 }
684
685 PyObject *sysmod;
Victor Stinner43125222019-04-24 18:23:53 +0200686 err = _PySys_Create(runtime, interp, &sysmod);
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100687 if (_Py_INIT_FAILED(err)) {
688 return err;
689 }
690
691 err = pycore_init_builtins(interp);
692 if (_Py_INIT_FAILED(err)) {
693 return err;
694 }
695
696 err = pycore_init_import_warnings(interp, sysmod);
697 if (_Py_INIT_FAILED(err)) {
698 return err;
699 }
Eric Snow1abcf672017-05-23 21:46:51 -0700700
701 /* Only when we get here is the runtime core fully initialized */
Victor Stinner43125222019-04-24 18:23:53 +0200702 runtime->core_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800703 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700704}
705
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100706
Victor Stinner70005ac2019-05-02 15:25:34 -0400707_PyInitError
708_Py_PreInitializeFromPyArgv(const _PyPreConfig *src_config, const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100709{
710 _PyInitError err;
711
Victor Stinner6d1c4672019-05-20 11:02:00 +0200712 if (src_config == NULL) {
713 return _Py_INIT_ERR("preinitialization config is NULL");
714 }
715
Victor Stinnerf29084d2019-03-20 02:20:13 +0100716 err = _PyRuntime_Initialize();
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100717 if (_Py_INIT_FAILED(err)) {
Victor Stinner5ac27a52019-03-27 13:40:14 +0100718 return err;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100719 }
Victor Stinner43125222019-04-24 18:23:53 +0200720 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100721
Victor Stinner43125222019-04-24 18:23:53 +0200722 if (runtime->pre_initialized) {
Victor Stinnerf72346c2019-03-25 17:54:58 +0100723 /* If it's already configured: ignored the new configuration */
Victor Stinner5ac27a52019-03-27 13:40:14 +0100724 return _Py_INIT_OK();
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100725 }
726
Victor Stinnercab5d072019-05-17 19:01:14 +0200727 _PyPreConfig config;
Victor Stinner6d1c4672019-05-20 11:02:00 +0200728 _PyPreConfig_InitFromPreConfig(&config, src_config);
Victor Stinnerf72346c2019-03-25 17:54:58 +0100729
Victor Stinner5ac27a52019-03-27 13:40:14 +0100730 err = _PyPreConfig_Read(&config, args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100731 if (_Py_INIT_FAILED(err)) {
Victor Stinnerb16b4e42019-05-17 15:20:52 +0200732 return err;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100733 }
734
Victor Stinner5ac27a52019-03-27 13:40:14 +0100735 err = _PyPreConfig_Write(&config);
Victor Stinnerf72346c2019-03-25 17:54:58 +0100736 if (_Py_INIT_FAILED(err)) {
Victor Stinnerb16b4e42019-05-17 15:20:52 +0200737 return err;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100738 }
739
Victor Stinner43125222019-04-24 18:23:53 +0200740 runtime->pre_initialized = 1;
Victor Stinnerb16b4e42019-05-17 15:20:52 +0200741 return _Py_INIT_OK();
Victor Stinnerf72346c2019-03-25 17:54:58 +0100742}
743
Victor Stinner70005ac2019-05-02 15:25:34 -0400744
Victor Stinnerf72346c2019-03-25 17:54:58 +0100745_PyInitError
Victor Stinnerb5947842019-05-18 00:38:16 +0200746_Py_PreInitializeFromArgs(const _PyPreConfig *src_config, Py_ssize_t argc, char **argv)
Victor Stinnerf72346c2019-03-25 17:54:58 +0100747{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100748 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400749 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100750}
751
752
753_PyInitError
Victor Stinnerb5947842019-05-18 00:38:16 +0200754_Py_PreInitializeFromWideArgs(const _PyPreConfig *src_config, Py_ssize_t argc, wchar_t **argv)
Victor Stinner20004952019-03-26 02:31:11 +0100755{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100756 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400757 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinner20004952019-03-26 02:31:11 +0100758}
759
760
761_PyInitError
Victor Stinner5ac27a52019-03-27 13:40:14 +0100762_Py_PreInitialize(const _PyPreConfig *src_config)
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100763{
Victor Stinner70005ac2019-05-02 15:25:34 -0400764 return _Py_PreInitializeFromPyArgv(src_config, NULL);
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100765}
766
767
768_PyInitError
Victor Stinner70005ac2019-05-02 15:25:34 -0400769_Py_PreInitializeFromCoreConfig(const _PyCoreConfig *coreconfig,
770 const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100771{
Victor Stinner6d1c4672019-05-20 11:02:00 +0200772 assert(coreconfig != NULL);
773
774 _PyInitError err = _PyRuntime_Initialize();
775 if (_Py_INIT_FAILED(err)) {
776 return err;
777 }
778 _PyRuntimeState *runtime = &_PyRuntime;
779
780 if (runtime->pre_initialized) {
781 /* Already initialized: do nothing */
782 return _Py_INIT_OK();
Victor Stinner70005ac2019-05-02 15:25:34 -0400783 }
Victor Stinnercab5d072019-05-17 19:01:14 +0200784
Victor Stinner6d1c4672019-05-20 11:02:00 +0200785 _PyPreConfig preconfig;
786 _PyPreConfig_InitFromCoreConfig(&preconfig, coreconfig);
787
788 if (!coreconfig->parse_argv) {
789 return _Py_PreInitialize(&preconfig);
790 }
791 else if (args == NULL) {
Victor Stinnercab5d072019-05-17 19:01:14 +0200792 _PyArgv config_args = {
793 .use_bytes_argv = 0,
794 .argc = coreconfig->argv.length,
795 .wchar_argv = coreconfig->argv.items};
Victor Stinner6d1c4672019-05-20 11:02:00 +0200796 return _Py_PreInitializeFromPyArgv(&preconfig, &config_args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200797 }
798 else {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200799 return _Py_PreInitializeFromPyArgv(&preconfig, args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200800 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100801}
802
803
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100804/* Begin interpreter initialization
805 *
806 * On return, the first thread and interpreter state have been created,
807 * but the compiler, signal handling, multithreading and
808 * multiple interpreter support, and codec infrastructure are not yet
809 * available.
810 *
811 * The import system will support builtin and frozen modules only.
812 * The only supported io is writing to sys.stderr
813 *
814 * If any operation invoked by this function fails, a fatal error is
815 * issued and the function does not return.
816 *
817 * Any code invoked from this function should *not* assume it has access
818 * to the Python C API (unless the API is explicitly listed as being
819 * safe to call without calling Py_Initialize first)
820 */
Victor Stinner484f20d2019-03-27 02:04:16 +0100821static _PyInitError
Victor Stinner5edcf262019-05-23 00:57:57 +0200822pyinit_core(_PyRuntimeState *runtime,
823 const _PyCoreConfig *src_config,
824 const _PyArgv *args,
825 PyInterpreterState **interp_p)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200826{
Victor Stinnerd929f182019-03-27 18:28:46 +0100827 _PyInitError err;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200828
Victor Stinner70005ac2019-05-02 15:25:34 -0400829 err = _Py_PreInitializeFromCoreConfig(src_config, args);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200830 if (_Py_INIT_FAILED(err)) {
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100831 return err;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200832 }
833
Victor Stinner5edcf262019-05-23 00:57:57 +0200834 _PyCoreConfig config;
835 _PyCoreConfig_InitCompatConfig(&config);
836
837 err = _PyCoreConfig_Copy(&config, src_config);
838 if (_Py_INIT_FAILED(err)) {
839 goto done;
840 }
841
842 if (args) {
843 err = _PyCoreConfig_SetPyArgv(&config, args);
844 if (_Py_INIT_FAILED(err)) {
845 goto done;
846 }
847 }
848
849 err = _PyCoreConfig_Read(&config);
850 if (_Py_INIT_FAILED(err)) {
851 goto done;
852 }
853
854 if (!runtime->core_initialized) {
855 err = pyinit_core_config(runtime, interp_p, &config);
856 }
857 else {
858 err = pyinit_core_reconfigure(runtime, interp_p, &config);
859 }
860 if (_Py_INIT_FAILED(err)) {
861 goto done;
862 }
863
864done:
865 _PyCoreConfig_Clear(&config);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200866 return err;
867}
868
Victor Stinner5ac27a52019-03-27 13:40:14 +0100869
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200870/* Py_Initialize() has already been called: update the main interpreter
871 configuration. Example of bpo-34008: Py_Main() called after
872 Py_Initialize(). */
873static _PyInitError
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100874_Py_ReconfigureMainInterpreter(PyInterpreterState *interp)
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200875{
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100876 _PyCoreConfig *core_config = &interp->core_config;
877
878 PyObject *argv = _PyWstrList_AsList(&core_config->argv);
879 if (argv == NULL) {
880 return _Py_INIT_NO_MEMORY(); \
881 }
882
883 int res = PyDict_SetItemString(interp->sysdict, "argv", argv);
884 Py_DECREF(argv);
885 if (res < 0) {
886 return _Py_INIT_ERR("fail to set sys.argv");
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200887 }
888 return _Py_INIT_OK();
889}
890
Eric Snowc7ec9982017-05-23 23:00:52 -0700891/* Update interpreter state based on supplied configuration settings
892 *
893 * After calling this function, most of the restrictions on the interpreter
894 * are lifted. The only remaining incomplete settings are those related
895 * to the main module (sys.argv[0], __main__ metadata)
896 *
897 * Calling this when the interpreter is not initializing, is already
898 * initialized or without a valid current thread state is a fatal error.
899 * Other errors should be reported as normal Python exceptions with a
900 * non-zero return code.
901 */
Victor Stinner5ac27a52019-03-27 13:40:14 +0100902static _PyInitError
Victor Stinner5edcf262019-05-23 00:57:57 +0200903pyinit_main(_PyRuntimeState *runtime, PyInterpreterState *interp)
Eric Snow1abcf672017-05-23 21:46:51 -0700904{
Victor Stinner43125222019-04-24 18:23:53 +0200905 if (!runtime->core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800906 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700907 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700908
Victor Stinner1dc6e392018-07-25 02:49:17 +0200909 /* Configure the main interpreter */
Victor Stinner1dc6e392018-07-25 02:49:17 +0200910 _PyCoreConfig *core_config = &interp->core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700911
Victor Stinner43125222019-04-24 18:23:53 +0200912 if (runtime->initialized) {
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100913 return _Py_ReconfigureMainInterpreter(interp);
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200914 }
915
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200916 if (!core_config->_install_importlib) {
Eric Snow1abcf672017-05-23 21:46:51 -0700917 /* Special mode for freeze_importlib: run with no import system
918 *
919 * This means anything which needs support from extension modules
920 * or pure Python code in the standard library won't work.
921 */
Victor Stinner43125222019-04-24 18:23:53 +0200922 runtime->initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800923 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700924 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100925
Victor Stinner33c377e2017-12-05 15:12:41 +0100926 if (_PyTime_Init() < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800927 return _Py_INIT_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100928 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200929
Victor Stinner43125222019-04-24 18:23:53 +0200930 if (_PySys_InitMain(runtime, interp) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800931 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100932 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800933
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400934 _PyInitError err = init_importlib_external(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800935 if (_Py_INIT_FAILED(err)) {
936 return err;
937 }
Nick Coghland6009512014-11-20 21:39:37 +1000938
939 /* initialize the faulthandler module */
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200940 err = _PyFaulthandler_Init(core_config->faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800941 if (_Py_INIT_FAILED(err)) {
942 return err;
943 }
Nick Coghland6009512014-11-20 21:39:37 +1000944
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400945 err = _PyUnicode_InitEncodings(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800946 if (_Py_INIT_FAILED(err)) {
947 return err;
948 }
Nick Coghland6009512014-11-20 21:39:37 +1000949
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100950 if (core_config->install_signal_handlers) {
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400951 err = init_signals();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800952 if (_Py_INIT_FAILED(err)) {
953 return err;
954 }
955 }
Nick Coghland6009512014-11-20 21:39:37 +1000956
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200957 if (_PyTraceMalloc_Init(core_config->tracemalloc) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800958 return _Py_INIT_ERR("can't initialize tracemalloc");
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200959 }
Nick Coghland6009512014-11-20 21:39:37 +1000960
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800961 err = add_main_module(interp);
962 if (_Py_INIT_FAILED(err)) {
963 return err;
964 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800965
Victor Stinner91106cd2017-12-13 12:29:09 +0100966 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -0800967 if (_Py_INIT_FAILED(err)) {
968 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800969 }
Nick Coghland6009512014-11-20 21:39:37 +1000970
971 /* Initialize warnings. */
Victor Stinner37cd9822018-11-16 11:55:35 +0100972 PyObject *warnoptions = PySys_GetObject("warnoptions");
973 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
Victor Stinner5d862462017-12-19 11:35:58 +0100974 {
Nick Coghland6009512014-11-20 21:39:37 +1000975 PyObject *warnings_module = PyImport_ImportModule("warnings");
976 if (warnings_module == NULL) {
977 fprintf(stderr, "'import warnings' failed; traceback:\n");
978 PyErr_Print();
979 }
980 Py_XDECREF(warnings_module);
981 }
982
Victor Stinner43125222019-04-24 18:23:53 +0200983 runtime->initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700984
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200985 if (core_config->site_import) {
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400986 err = init_import_size(); /* Module site */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800987 if (_Py_INIT_FAILED(err)) {
988 return err;
989 }
990 }
Victor Stinnercf215042018-08-29 22:56:06 +0200991
992#ifndef MS_WINDOWS
Victor Stinner43125222019-04-24 18:23:53 +0200993 emit_stderr_warning_for_legacy_locale(runtime);
Victor Stinnercf215042018-08-29 22:56:06 +0200994#endif
995
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800996 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000997}
998
Victor Stinner9ef5dca2019-05-16 17:38:16 +0200999
1000_PyInitError
1001_Py_InitializeMain(void)
1002{
1003 _PyInitError err = _PyRuntime_Initialize();
1004 if (_Py_INIT_FAILED(err)) {
1005 return err;
1006 }
1007 _PyRuntimeState *runtime = &_PyRuntime;
1008 PyInterpreterState *interp = _PyRuntimeState_GetThreadState(runtime)->interp;
1009
Victor Stinner5edcf262019-05-23 00:57:57 +02001010 return pyinit_main(runtime, interp);
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001011}
1012
1013
Eric Snowc7ec9982017-05-23 23:00:52 -07001014#undef _INIT_DEBUG_PRINT
1015
Victor Stinner5ac27a52019-03-27 13:40:14 +01001016static _PyInitError
Victor Stinner5edcf262019-05-23 00:57:57 +02001017pyinit_python(const _PyCoreConfig *config, const _PyArgv *args)
Eric Snow1abcf672017-05-23 21:46:51 -07001018{
Victor Stinner6d1c4672019-05-20 11:02:00 +02001019 if (config == NULL) {
1020 return _Py_INIT_ERR("initialization config is NULL");
1021 }
1022
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001023 _PyInitError err;
Victor Stinner43125222019-04-24 18:23:53 +02001024
1025 err = _PyRuntime_Initialize();
1026 if (_Py_INIT_FAILED(err)) {
1027 return err;
1028 }
1029 _PyRuntimeState *runtime = &_PyRuntime;
1030
1031 PyInterpreterState *interp = NULL;
Victor Stinner5edcf262019-05-23 00:57:57 +02001032 err = pyinit_core(runtime, config, args, &interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001033 if (_Py_INIT_FAILED(err)) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001034 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001035 }
Victor Stinner1dc6e392018-07-25 02:49:17 +02001036 config = &interp->core_config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +01001037
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001038 if (config->_init_main) {
Victor Stinner5edcf262019-05-23 00:57:57 +02001039 err = pyinit_main(runtime, interp);
Victor Stinner484f20d2019-03-27 02:04:16 +01001040 if (_Py_INIT_FAILED(err)) {
1041 return err;
1042 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001043 }
Victor Stinner484f20d2019-03-27 02:04:16 +01001044
Victor Stinner1dc6e392018-07-25 02:49:17 +02001045 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -07001046}
1047
1048
Victor Stinner5ac27a52019-03-27 13:40:14 +01001049_PyInitError
Victor Stinner6d1c4672019-05-20 11:02:00 +02001050_Py_InitializeFromArgs(const _PyCoreConfig *config,
1051 Py_ssize_t argc, char * const *argv)
Victor Stinner5ac27a52019-03-27 13:40:14 +01001052{
1053 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
Victor Stinner5edcf262019-05-23 00:57:57 +02001054 return pyinit_python(config, &args);
Victor Stinner5ac27a52019-03-27 13:40:14 +01001055}
1056
1057
1058_PyInitError
Victor Stinner6d1c4672019-05-20 11:02:00 +02001059_Py_InitializeFromWideArgs(const _PyCoreConfig *config,
1060 Py_ssize_t argc, wchar_t * const *argv)
Victor Stinner5ac27a52019-03-27 13:40:14 +01001061{
1062 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
Victor Stinner5edcf262019-05-23 00:57:57 +02001063 return pyinit_python(config, &args);
Victor Stinner5ac27a52019-03-27 13:40:14 +01001064}
1065
1066
1067_PyInitError
1068_Py_InitializeFromConfig(const _PyCoreConfig *config)
1069{
Victor Stinner5edcf262019-05-23 00:57:57 +02001070 return pyinit_python(config, NULL);
Victor Stinner5ac27a52019-03-27 13:40:14 +01001071}
1072
1073
Eric Snow1abcf672017-05-23 21:46:51 -07001074void
Nick Coghland6009512014-11-20 21:39:37 +10001075Py_InitializeEx(int install_sigs)
1076{
Victor Stinner43125222019-04-24 18:23:53 +02001077 _PyInitError err;
1078
1079 err = _PyRuntime_Initialize();
1080 if (_Py_INIT_FAILED(err)) {
1081 _Py_ExitInitError(err);
1082 }
1083 _PyRuntimeState *runtime = &_PyRuntime;
1084
1085 if (runtime->initialized) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001086 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
1087 return;
1088 }
1089
Victor Stinnercab5d072019-05-17 19:01:14 +02001090 _PyCoreConfig config;
Victor Stinner022be022019-05-22 23:58:50 +02001091 _PyCoreConfig_InitCompatConfig(&config);
Victor Stinner1dc6e392018-07-25 02:49:17 +02001092 config.install_signal_handlers = install_sigs;
1093
Victor Stinner43125222019-04-24 18:23:53 +02001094 err = _Py_InitializeFromConfig(&config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001095 if (_Py_INIT_FAILED(err)) {
Victor Stinnerdfe88472019-03-01 12:14:41 +01001096 _Py_ExitInitError(err);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001097 }
Nick Coghland6009512014-11-20 21:39:37 +10001098}
1099
1100void
1101Py_Initialize(void)
1102{
1103 Py_InitializeEx(1);
1104}
1105
1106
1107#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001108extern void _Py_dump_counts(FILE*);
Nick Coghland6009512014-11-20 21:39:37 +10001109#endif
1110
1111/* Flush stdout and stderr */
1112
1113static int
1114file_is_closed(PyObject *fobj)
1115{
1116 int r;
1117 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1118 if (tmp == NULL) {
1119 PyErr_Clear();
1120 return 0;
1121 }
1122 r = PyObject_IsTrue(tmp);
1123 Py_DECREF(tmp);
1124 if (r < 0)
1125 PyErr_Clear();
1126 return r > 0;
1127}
1128
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001129static int
Nick Coghland6009512014-11-20 21:39:37 +10001130flush_std_files(void)
1131{
1132 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1133 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1134 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001135 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001136
1137 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001138 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001139 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001140 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001141 status = -1;
1142 }
Nick Coghland6009512014-11-20 21:39:37 +10001143 else
1144 Py_DECREF(tmp);
1145 }
1146
1147 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001148 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001149 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001150 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001151 status = -1;
1152 }
Nick Coghland6009512014-11-20 21:39:37 +10001153 else
1154 Py_DECREF(tmp);
1155 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001156
1157 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001158}
1159
1160/* Undo the effect of Py_Initialize().
1161
1162 Beware: if multiple interpreter and/or thread states exist, these
1163 are not wiped out; only the current thread and interpreter state
1164 are deleted. But since everything else is deleted, those other
1165 interpreter and thread states should no longer be used.
1166
1167 (XXX We should do better, e.g. wipe out all interpreters and
1168 threads.)
1169
1170 Locking: as above.
1171
1172*/
1173
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001174int
1175Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001176{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001177 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001178
Victor Stinner8e91c242019-04-24 17:24:01 +02001179 _PyRuntimeState *runtime = &_PyRuntime;
1180 if (!runtime->initialized) {
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001181 return status;
Victor Stinner8e91c242019-04-24 17:24:01 +02001182 }
Nick Coghland6009512014-11-20 21:39:37 +10001183
Eric Snow842a2f02019-03-15 15:47:51 -06001184 // Wrap up existing "threading"-module-created, non-daemon threads.
Nick Coghland6009512014-11-20 21:39:37 +10001185 wait_for_thread_shutdown();
1186
Eric Snow842a2f02019-03-15 15:47:51 -06001187 // Make any remaining pending calls.
Victor Stinner09532fe2019-05-10 23:39:09 +02001188 _Py_FinishPendingCalls(runtime);
Eric Snow842a2f02019-03-15 15:47:51 -06001189
Victor Stinner8e91c242019-04-24 17:24:01 +02001190 /* Get current thread state and interpreter pointer */
Victor Stinner09532fe2019-05-10 23:39:09 +02001191 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
Victor Stinner8e91c242019-04-24 17:24:01 +02001192 PyInterpreterState *interp = tstate->interp;
1193
Nick Coghland6009512014-11-20 21:39:37 +10001194 /* The interpreter is still entirely intact at this point, and the
1195 * exit funcs may be relying on that. In particular, if some thread
1196 * or exit func is still waiting to do an import, the import machinery
1197 * expects Py_IsInitialized() to return true. So don't say the
Eric Snow842a2f02019-03-15 15:47:51 -06001198 * runtime is uninitialized until after the exit funcs have run.
Nick Coghland6009512014-11-20 21:39:37 +10001199 * Note that Threading.py uses an exit func to do a join on all the
1200 * threads created thru it, so this also protects pending imports in
1201 * the threads created via Threading.
1202 */
Nick Coghland6009512014-11-20 21:39:37 +10001203
Marcel Plch776407f2017-12-20 11:17:58 +01001204 call_py_exitfuncs(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001205
Victor Stinnerda273412017-12-15 01:46:02 +01001206 /* Copy the core config, PyInterpreterState_Delete() free
1207 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001208#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001209 int show_ref_count = interp->core_config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001210#endif
1211#ifdef Py_TRACE_REFS
Victor Stinnerda273412017-12-15 01:46:02 +01001212 int dump_refs = interp->core_config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001213#endif
1214#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001215 int malloc_stats = interp->core_config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001216#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001217
Nick Coghland6009512014-11-20 21:39:37 +10001218 /* Remaining threads (e.g. daemon threads) will automatically exit
1219 after taking the GIL (in PyEval_RestoreThread()). */
Victor Stinner8e91c242019-04-24 17:24:01 +02001220 runtime->finalizing = tstate;
1221 runtime->initialized = 0;
1222 runtime->core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001223
Victor Stinnere0deff32015-03-24 13:46:18 +01001224 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001225 if (flush_std_files() < 0) {
1226 status = -1;
1227 }
Nick Coghland6009512014-11-20 21:39:37 +10001228
1229 /* Disable signal handling */
1230 PyOS_FiniInterrupts();
1231
1232 /* Collect garbage. This may call finalizers; it's nice to call these
1233 * before all modules are destroyed.
1234 * XXX If a __del__ or weakref callback is triggered here, and tries to
1235 * XXX import a module, bad things can happen, because Python no
1236 * XXX longer believes it's initialized.
1237 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1238 * XXX is easy to provoke that way. I've also seen, e.g.,
1239 * XXX Exception exceptions.ImportError: 'No module named sha'
1240 * XXX in <function callback at 0x008F5718> ignored
1241 * XXX but I'm unclear on exactly how that one happens. In any case,
1242 * XXX I haven't seen a real-life report of either of these.
1243 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001244 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001245#ifdef COUNT_ALLOCS
1246 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1247 each collection might release some types from the type
1248 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001249 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001250 /* nothing */;
1251#endif
Eric Snowdae02762017-09-14 00:35:58 -07001252
Nick Coghland6009512014-11-20 21:39:37 +10001253 /* Destroy all modules */
1254 PyImport_Cleanup();
1255
Victor Stinnere0deff32015-03-24 13:46:18 +01001256 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001257 if (flush_std_files() < 0) {
1258 status = -1;
1259 }
Nick Coghland6009512014-11-20 21:39:37 +10001260
1261 /* Collect final garbage. This disposes of cycles created by
1262 * class definitions, for example.
1263 * XXX This is disabled because it caused too many problems. If
1264 * XXX a __del__ or weakref callback triggers here, Python code has
1265 * XXX a hard time running, because even the sys module has been
1266 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1267 * XXX One symptom is a sequence of information-free messages
1268 * XXX coming from threads (if a __del__ or callback is invoked,
1269 * XXX other threads can execute too, and any exception they encounter
1270 * XXX triggers a comedy of errors as subsystem after subsystem
1271 * XXX fails to find what it *expects* to find in sys to help report
1272 * XXX the exception and consequent unexpected failures). I've also
1273 * XXX seen segfaults then, after adding print statements to the
1274 * XXX Python code getting called.
1275 */
1276#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001277 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001278#endif
1279
1280 /* Disable tracemalloc after all Python objects have been destroyed,
1281 so it is possible to use tracemalloc in objects destructor. */
1282 _PyTraceMalloc_Fini();
1283
1284 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1285 _PyImport_Fini();
1286
1287 /* Cleanup typeobject.c's internal caches. */
1288 _PyType_Fini();
1289
1290 /* unload faulthandler module */
1291 _PyFaulthandler_Fini();
1292
1293 /* Debugging stuff */
1294#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001295 _Py_dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001296#endif
1297 /* dump hash stats */
1298 _PyHash_Fini();
1299
Eric Snowdae02762017-09-14 00:35:58 -07001300#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001301 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001302 _PyDebug_PrintTotalRefs();
1303 }
Eric Snowdae02762017-09-14 00:35:58 -07001304#endif
Nick Coghland6009512014-11-20 21:39:37 +10001305
1306#ifdef Py_TRACE_REFS
1307 /* Display all objects still alive -- this can invoke arbitrary
1308 * __repr__ overrides, so requires a mostly-intact interpreter.
1309 * Alas, a lot of stuff may still be alive now that will be cleaned
1310 * up later.
1311 */
Victor Stinnerda273412017-12-15 01:46:02 +01001312 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001313 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001314 }
Nick Coghland6009512014-11-20 21:39:37 +10001315#endif /* Py_TRACE_REFS */
1316
1317 /* Clear interpreter state and all thread states. */
1318 PyInterpreterState_Clear(interp);
1319
1320 /* Now we decref the exception classes. After this point nothing
1321 can raise an exception. That's okay, because each Fini() method
1322 below has been checked to make sure no exceptions are ever
1323 raised.
1324 */
1325
1326 _PyExc_Fini();
1327
1328 /* Sundry finalizers */
1329 PyMethod_Fini();
1330 PyFrame_Fini();
1331 PyCFunction_Fini();
1332 PyTuple_Fini();
1333 PyList_Fini();
1334 PySet_Fini();
1335 PyBytes_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001336 PyLong_Fini();
1337 PyFloat_Fini();
1338 PyDict_Fini();
1339 PySlice_Fini();
Victor Stinner8e91c242019-04-24 17:24:01 +02001340 _PyGC_Fini(runtime);
Eric Snow86ea5812019-05-10 13:29:55 -04001341 _PyWarnings_Fini(interp);
Eric Snow6b4be192017-05-22 21:36:03 -07001342 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001343 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001344 PyAsyncGen_Fini();
Yury Selivanovf23746a2018-01-22 19:11:18 -05001345 _PyContext_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001346
1347 /* Cleanup Unicode implementation */
1348 _PyUnicode_Fini();
1349
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001350 _Py_ClearFileSystemEncoding();
Nick Coghland6009512014-11-20 21:39:37 +10001351
1352 /* XXX Still allocated:
1353 - various static ad-hoc pointers to interned strings
1354 - int and float free list blocks
1355 - whatever various modules and libraries allocate
1356 */
1357
1358 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1359
1360 /* Cleanup auto-thread-state */
Victor Stinner8e91c242019-04-24 17:24:01 +02001361 _PyGILState_Fini(runtime);
Nick Coghland6009512014-11-20 21:39:37 +10001362
1363 /* Delete current thread. After this, many C API calls become crashy. */
1364 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001365
Nick Coghland6009512014-11-20 21:39:37 +10001366 PyInterpreterState_Delete(interp);
1367
1368#ifdef Py_TRACE_REFS
1369 /* Display addresses (& refcnts) of all objects still alive.
1370 * An address can be used to find the repr of the object, printed
1371 * above by _Py_PrintReferences.
1372 */
Victor Stinnerda273412017-12-15 01:46:02 +01001373 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001374 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001375 }
Nick Coghland6009512014-11-20 21:39:37 +10001376#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001377#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001378 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001379 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be8072016-03-14 12:04:26 +01001380 }
Nick Coghland6009512014-11-20 21:39:37 +10001381#endif
1382
Victor Stinner8e91c242019-04-24 17:24:01 +02001383 call_ll_exitfuncs(runtime);
Victor Stinner9316ee42017-11-25 03:17:57 +01001384
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001385 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001386 return status;
1387}
1388
1389void
1390Py_Finalize(void)
1391{
1392 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001393}
1394
1395/* Create and initialize a new interpreter and thread, and return the
1396 new thread. This requires that Py_Initialize() has been called
1397 first.
1398
1399 Unsuccessful initialization yields a NULL pointer. Note that *no*
1400 exception information is available even in this case -- the
1401 exception information is held in the thread, and there is no
1402 thread.
1403
1404 Locking: as above.
1405
1406*/
1407
Victor Stinnera7368ac2017-11-15 18:11:45 -08001408static _PyInitError
1409new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001410{
Victor Stinner9316ee42017-11-25 03:17:57 +01001411 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001412
Victor Stinner43125222019-04-24 18:23:53 +02001413 err = _PyRuntime_Initialize();
1414 if (_Py_INIT_FAILED(err)) {
1415 return err;
1416 }
1417 _PyRuntimeState *runtime = &_PyRuntime;
1418
1419 if (!runtime->initialized) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001420 return _Py_INIT_ERR("Py_Initialize must be called first");
1421 }
Nick Coghland6009512014-11-20 21:39:37 +10001422
Victor Stinner8a1be612016-03-14 22:07:55 +01001423 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1424 interpreters: disable PyGILState_Check(). */
1425 _PyGILState_check_enabled = 0;
1426
Victor Stinner43125222019-04-24 18:23:53 +02001427 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001428 if (interp == NULL) {
1429 *tstate_p = NULL;
1430 return _Py_INIT_OK();
1431 }
Nick Coghland6009512014-11-20 21:39:37 +10001432
Victor Stinner43125222019-04-24 18:23:53 +02001433 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001434 if (tstate == NULL) {
1435 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001436 *tstate_p = NULL;
1437 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001438 }
1439
Victor Stinner43125222019-04-24 18:23:53 +02001440 PyThreadState *save_tstate = PyThreadState_Swap(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001441
Eric Snow1abcf672017-05-23 21:46:51 -07001442 /* Copy the current interpreter config into the new interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +01001443 _PyCoreConfig *core_config;
Eric Snow1abcf672017-05-23 21:46:51 -07001444 if (save_tstate != NULL) {
Victor Stinnerda273412017-12-15 01:46:02 +01001445 core_config = &save_tstate->interp->core_config;
Eric Snow1abcf672017-05-23 21:46:51 -07001446 } else {
1447 /* No current thread state, copy from the main interpreter */
1448 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinnerda273412017-12-15 01:46:02 +01001449 core_config = &main_interp->core_config;
Victor Stinnerda273412017-12-15 01:46:02 +01001450 }
1451
Victor Stinner1a9f0d82019-05-01 15:22:52 +02001452 err = _PyCoreConfig_Copy(&interp->core_config, core_config);
1453 if (_Py_INIT_FAILED(err)) {
1454 return err;
Victor Stinnerda273412017-12-15 01:46:02 +01001455 }
Victor Stinnerd19d8d52018-07-24 13:55:48 +02001456 core_config = &interp->core_config;
Eric Snow1abcf672017-05-23 21:46:51 -07001457
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001458 err = _PyExc_Init();
1459 if (_Py_INIT_FAILED(err)) {
1460 return err;
1461 }
1462
Victor Stinneref9d9b62019-05-22 11:28:22 +02001463 err = _PyErr_Init();
1464 if (_Py_INIT_FAILED(err)) {
1465 return err;
1466 }
1467
1468
Nick Coghland6009512014-11-20 21:39:37 +10001469 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001470 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001471 if (modules == NULL) {
1472 return _Py_INIT_ERR("can't make modules dictionary");
1473 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001474 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001475
Victor Stinner43125222019-04-24 18:23:53 +02001476 PyObject *sysmod = _PyImport_FindBuiltin("sys", modules);
Eric Snowd393c1b2017-09-14 12:18:12 -06001477 if (sysmod != NULL) {
1478 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinner43125222019-04-24 18:23:53 +02001479 if (interp->sysdict == NULL) {
Eric Snowd393c1b2017-09-14 12:18:12 -06001480 goto handle_error;
Victor Stinner43125222019-04-24 18:23:53 +02001481 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001482 Py_INCREF(interp->sysdict);
1483 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner43125222019-04-24 18:23:53 +02001484 if (_PySys_InitMain(runtime, interp) < 0) {
Victor Stinnerab672812019-01-23 15:04:40 +01001485 return _Py_INIT_ERR("can't finish initializing sys");
1486 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001487 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001488 else if (PyErr_Occurred()) {
1489 goto handle_error;
1490 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001491
Victor Stinner43125222019-04-24 18:23:53 +02001492 PyObject *bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001493 if (bimod != NULL) {
1494 interp->builtins = PyModule_GetDict(bimod);
1495 if (interp->builtins == NULL)
1496 goto handle_error;
1497 Py_INCREF(interp->builtins);
1498 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001499 else if (PyErr_Occurred()) {
1500 goto handle_error;
1501 }
Nick Coghland6009512014-11-20 21:39:37 +10001502
Nick Coghland6009512014-11-20 21:39:37 +10001503 if (bimod != NULL && sysmod != NULL) {
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001504 err = _PyBuiltins_AddExceptions(bimod);
1505 if (_Py_INIT_FAILED(err)) {
1506 return err;
1507 }
Nick Coghland6009512014-11-20 21:39:37 +10001508
Victor Stinnerab672812019-01-23 15:04:40 +01001509 err = _PySys_SetPreliminaryStderr(interp->sysdict);
1510 if (_Py_INIT_FAILED(err)) {
1511 return err;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001512 }
Nick Coghland6009512014-11-20 21:39:37 +10001513
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001514 err = _PyImportHooks_Init();
1515 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001516 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001517 }
Nick Coghland6009512014-11-20 21:39:37 +10001518
Victor Stinner43fc3bb2019-05-02 11:54:20 -04001519 err = init_importlib(interp, sysmod);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001520 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001521 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001522 }
Nick Coghland6009512014-11-20 21:39:37 +10001523
Victor Stinner43fc3bb2019-05-02 11:54:20 -04001524 err = init_importlib_external(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001525 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001526 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001527 }
Nick Coghland6009512014-11-20 21:39:37 +10001528
Victor Stinner43fc3bb2019-05-02 11:54:20 -04001529 err = _PyUnicode_InitEncodings(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001530 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001531 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001532 }
1533
Victor Stinner91106cd2017-12-13 12:29:09 +01001534 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001535 if (_Py_INIT_FAILED(err)) {
1536 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001537 }
1538
1539 err = add_main_module(interp);
1540 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001541 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001542 }
1543
Victor Stinnerd19d8d52018-07-24 13:55:48 +02001544 if (core_config->site_import) {
Victor Stinner43fc3bb2019-05-02 11:54:20 -04001545 err = init_import_size();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001546 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001547 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001548 }
1549 }
Nick Coghland6009512014-11-20 21:39:37 +10001550 }
1551
Victor Stinnera7368ac2017-11-15 18:11:45 -08001552 if (PyErr_Occurred()) {
1553 goto handle_error;
1554 }
Nick Coghland6009512014-11-20 21:39:37 +10001555
Victor Stinnera7368ac2017-11-15 18:11:45 -08001556 *tstate_p = tstate;
1557 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001558
Nick Coghland6009512014-11-20 21:39:37 +10001559handle_error:
1560 /* Oops, it didn't work. Undo it all. */
1561
1562 PyErr_PrintEx(0);
1563 PyThreadState_Clear(tstate);
1564 PyThreadState_Swap(save_tstate);
1565 PyThreadState_Delete(tstate);
1566 PyInterpreterState_Delete(interp);
1567
Victor Stinnera7368ac2017-11-15 18:11:45 -08001568 *tstate_p = NULL;
1569 return _Py_INIT_OK();
1570}
1571
1572PyThreadState *
1573Py_NewInterpreter(void)
1574{
Stéphane Wirtel9e06d2b2019-03-18 17:10:29 +01001575 PyThreadState *tstate = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001576 _PyInitError err = new_interpreter(&tstate);
1577 if (_Py_INIT_FAILED(err)) {
Victor Stinnerdfe88472019-03-01 12:14:41 +01001578 _Py_ExitInitError(err);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001579 }
1580 return tstate;
1581
Nick Coghland6009512014-11-20 21:39:37 +10001582}
1583
1584/* Delete an interpreter and its last thread. This requires that the
1585 given thread state is current, that the thread has no remaining
1586 frames, and that it is its interpreter's only remaining thread.
1587 It is a fatal error to violate these constraints.
1588
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001589 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001590 everything, regardless.)
1591
1592 Locking: as above.
1593
1594*/
1595
1596void
1597Py_EndInterpreter(PyThreadState *tstate)
1598{
1599 PyInterpreterState *interp = tstate->interp;
1600
Victor Stinner50b48572018-11-01 01:51:40 +01001601 if (tstate != _PyThreadState_GET())
Nick Coghland6009512014-11-20 21:39:37 +10001602 Py_FatalError("Py_EndInterpreter: thread is not current");
1603 if (tstate->frame != NULL)
1604 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Eric Snow5be45a62019-03-08 22:47:07 -07001605 interp->finalizing = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001606
Eric Snow842a2f02019-03-15 15:47:51 -06001607 // Wrap up existing "threading"-module-created, non-daemon threads.
Nick Coghland6009512014-11-20 21:39:37 +10001608 wait_for_thread_shutdown();
1609
Marcel Plch776407f2017-12-20 11:17:58 +01001610 call_py_exitfuncs(interp);
1611
Nick Coghland6009512014-11-20 21:39:37 +10001612 if (tstate != interp->tstate_head || tstate->next != NULL)
1613 Py_FatalError("Py_EndInterpreter: not the last thread");
1614
1615 PyImport_Cleanup();
1616 PyInterpreterState_Clear(interp);
1617 PyThreadState_Swap(NULL);
1618 PyInterpreterState_Delete(interp);
1619}
1620
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001621/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001622
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001623static _PyInitError
1624add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001625{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001626 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001627 m = PyImport_AddModule("__main__");
1628 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001629 return _Py_INIT_ERR("can't create __main__ module");
1630
Nick Coghland6009512014-11-20 21:39:37 +10001631 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001632 ann_dict = PyDict_New();
1633 if ((ann_dict == NULL) ||
1634 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001635 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001636 }
1637 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001638
Nick Coghland6009512014-11-20 21:39:37 +10001639 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1640 PyObject *bimod = PyImport_ImportModule("builtins");
1641 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001642 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001643 }
1644 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001645 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001646 }
1647 Py_DECREF(bimod);
1648 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001649
Nick Coghland6009512014-11-20 21:39:37 +10001650 /* Main is a little special - imp.is_builtin("__main__") will return
1651 * False, but BuiltinImporter is still the most appropriate initial
1652 * setting for its __loader__ attribute. A more suitable value will
1653 * be set if __main__ gets further initialized later in the startup
1654 * process.
1655 */
1656 loader = PyDict_GetItemString(d, "__loader__");
1657 if (loader == NULL || loader == Py_None) {
1658 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1659 "BuiltinImporter");
1660 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001661 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001662 }
1663 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001664 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001665 }
1666 Py_DECREF(loader);
1667 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001668 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001669}
1670
Nick Coghland6009512014-11-20 21:39:37 +10001671/* Import the site module (not into __main__ though) */
1672
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001673static _PyInitError
Victor Stinner43fc3bb2019-05-02 11:54:20 -04001674init_import_size(void)
Nick Coghland6009512014-11-20 21:39:37 +10001675{
1676 PyObject *m;
1677 m = PyImport_ImportModule("site");
1678 if (m == NULL) {
Victor Stinnerdb719752019-05-01 05:35:33 +02001679 return _Py_INIT_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001680 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001681 Py_DECREF(m);
1682 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001683}
1684
Victor Stinner874dbe82015-09-04 17:29:57 +02001685/* Check if a file descriptor is valid or not.
1686 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1687static int
1688is_valid_fd(int fd)
1689{
Victor Stinner3092d6b2019-04-17 18:09:12 +02001690/* dup() is faster than fstat(): fstat() can require input/output operations,
1691 whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python
1692 startup. Problem: dup() doesn't check if the file descriptor is valid on
1693 some platforms.
1694
1695 bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other
1696 side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with
1697 EBADF. FreeBSD has similar issue (bpo-32849).
1698
1699 Only use dup() on platforms where dup() is enough to detect invalid FD in
1700 corner cases: on Linux and Windows (bpo-32849). */
1701#if defined(__linux__) || defined(MS_WINDOWS)
1702 if (fd < 0) {
1703 return 0;
1704 }
1705 int fd2;
1706
1707 _Py_BEGIN_SUPPRESS_IPH
1708 fd2 = dup(fd);
1709 if (fd2 >= 0) {
1710 close(fd2);
1711 }
1712 _Py_END_SUPPRESS_IPH
1713
1714 return (fd2 >= 0);
1715#else
Victor Stinner1c4670e2017-05-04 00:45:56 +02001716 struct stat st;
1717 return (fstat(fd, &st) == 0);
Victor Stinner1c4670e2017-05-04 00:45:56 +02001718#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001719}
1720
1721/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001722static PyObject*
Victor Stinnerfbca9082018-08-30 00:50:45 +02001723create_stdio(const _PyCoreConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001724 int fd, int write_mode, const char* name,
Victor Stinner709d23d2019-05-02 14:56:30 -04001725 const wchar_t* encoding, const wchar_t* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001726{
1727 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1728 const char* mode;
1729 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001730 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001731 int buffering, isatty;
1732 _Py_IDENTIFIER(open);
1733 _Py_IDENTIFIER(isatty);
1734 _Py_IDENTIFIER(TextIOWrapper);
1735 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001736 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001737
Victor Stinner874dbe82015-09-04 17:29:57 +02001738 if (!is_valid_fd(fd))
1739 Py_RETURN_NONE;
1740
Nick Coghland6009512014-11-20 21:39:37 +10001741 /* stdin is always opened in buffered mode, first because it shouldn't
1742 make a difference in common use cases, second because TextIOWrapper
1743 depends on the presence of a read1() method which only exists on
1744 buffered streams.
1745 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001746 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001747 buffering = 0;
1748 else
1749 buffering = -1;
1750 if (write_mode)
1751 mode = "wb";
1752 else
1753 mode = "rb";
1754 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1755 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001756 Py_None, Py_None, /* encoding, errors */
1757 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001758 if (buf == NULL)
1759 goto error;
1760
1761 if (buffering) {
1762 _Py_IDENTIFIER(raw);
1763 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1764 if (raw == NULL)
1765 goto error;
1766 }
1767 else {
1768 raw = buf;
1769 Py_INCREF(raw);
1770 }
1771
Steve Dower39294992016-08-30 21:22:36 -07001772#ifdef MS_WINDOWS
1773 /* Windows console IO is always UTF-8 encoded */
1774 if (PyWindowsConsoleIO_Check(raw))
Victor Stinner709d23d2019-05-02 14:56:30 -04001775 encoding = L"utf-8";
Steve Dower39294992016-08-30 21:22:36 -07001776#endif
1777
Nick Coghland6009512014-11-20 21:39:37 +10001778 text = PyUnicode_FromString(name);
1779 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1780 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001781 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001782 if (res == NULL)
1783 goto error;
1784 isatty = PyObject_IsTrue(res);
1785 Py_DECREF(res);
1786 if (isatty == -1)
1787 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001788 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001789 write_through = Py_True;
1790 else
1791 write_through = Py_False;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001792 if (isatty && buffered_stdio)
Nick Coghland6009512014-11-20 21:39:37 +10001793 line_buffering = Py_True;
1794 else
1795 line_buffering = Py_False;
1796
1797 Py_CLEAR(raw);
1798 Py_CLEAR(text);
1799
1800#ifdef MS_WINDOWS
1801 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1802 newlines to "\n".
1803 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1804 newline = NULL;
1805#else
1806 /* sys.stdin: split lines at "\n".
1807 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1808 newline = "\n";
1809#endif
1810
Victor Stinner709d23d2019-05-02 14:56:30 -04001811 PyObject *encoding_str = PyUnicode_FromWideChar(encoding, -1);
1812 if (encoding_str == NULL) {
1813 Py_CLEAR(buf);
1814 goto error;
1815 }
1816
1817 PyObject *errors_str = PyUnicode_FromWideChar(errors, -1);
1818 if (errors_str == NULL) {
1819 Py_CLEAR(buf);
1820 Py_CLEAR(encoding_str);
1821 goto error;
1822 }
1823
1824 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OOOsOO",
1825 buf, encoding_str, errors_str,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001826 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001827 Py_CLEAR(buf);
Victor Stinner709d23d2019-05-02 14:56:30 -04001828 Py_CLEAR(encoding_str);
1829 Py_CLEAR(errors_str);
Nick Coghland6009512014-11-20 21:39:37 +10001830 if (stream == NULL)
1831 goto error;
1832
1833 if (write_mode)
1834 mode = "w";
1835 else
1836 mode = "r";
1837 text = PyUnicode_FromString(mode);
1838 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1839 goto error;
1840 Py_CLEAR(text);
1841 return stream;
1842
1843error:
1844 Py_XDECREF(buf);
1845 Py_XDECREF(stream);
1846 Py_XDECREF(text);
1847 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001848
Victor Stinner874dbe82015-09-04 17:29:57 +02001849 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1850 /* Issue #24891: the file descriptor was closed after the first
1851 is_valid_fd() check was called. Ignore the OSError and set the
1852 stream to None. */
1853 PyErr_Clear();
1854 Py_RETURN_NONE;
1855 }
1856 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001857}
1858
1859/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001860static _PyInitError
Victor Stinner91106cd2017-12-13 12:29:09 +01001861init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001862{
1863 PyObject *iomod = NULL, *wrapper;
1864 PyObject *bimod = NULL;
1865 PyObject *m;
1866 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001867 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001868 PyObject * encoding_attr;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001869 _PyInitError res = _Py_INIT_OK();
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001870 _PyCoreConfig *config = &interp->core_config;
1871
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001872 /* Check that stdin is not a directory
1873 Using shell redirection, you can redirect stdin to a directory,
1874 crashing the Python interpreter. Catch this common mistake here
1875 and output a useful error message. Note that under MS Windows,
1876 the shell already prevents that. */
1877#ifndef MS_WINDOWS
1878 struct _Py_stat_struct sb;
1879 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1880 S_ISDIR(sb.st_mode)) {
Victor Stinnerdb719752019-05-01 05:35:33 +02001881 return _Py_INIT_ERR("<stdin> is a directory, cannot continue");
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001882 }
1883#endif
1884
Nick Coghland6009512014-11-20 21:39:37 +10001885 /* Hack to avoid a nasty recursion issue when Python is invoked
1886 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1887 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1888 goto error;
1889 }
1890 Py_DECREF(m);
1891
1892 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1893 goto error;
1894 }
1895 Py_DECREF(m);
1896
1897 if (!(bimod = PyImport_ImportModule("builtins"))) {
1898 goto error;
1899 }
1900
1901 if (!(iomod = PyImport_ImportModule("io"))) {
1902 goto error;
1903 }
1904 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1905 goto error;
1906 }
1907
1908 /* Set builtins.open */
1909 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1910 Py_DECREF(wrapper);
1911 goto error;
1912 }
1913 Py_DECREF(wrapper);
1914
Nick Coghland6009512014-11-20 21:39:37 +10001915 /* Set sys.stdin */
1916 fd = fileno(stdin);
1917 /* Under some conditions stdin, stdout and stderr may not be connected
1918 * and fileno() may point to an invalid file descriptor. For example
1919 * GUI apps don't have valid standard streams by default.
1920 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001921 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001922 config->stdio_encoding,
1923 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001924 if (std == NULL)
1925 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001926 PySys_SetObject("__stdin__", std);
1927 _PySys_SetObjectId(&PyId_stdin, std);
1928 Py_DECREF(std);
1929
1930 /* Set sys.stdout */
1931 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001932 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001933 config->stdio_encoding,
1934 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001935 if (std == NULL)
1936 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001937 PySys_SetObject("__stdout__", std);
1938 _PySys_SetObjectId(&PyId_stdout, std);
1939 Py_DECREF(std);
1940
1941#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1942 /* Set sys.stderr, replaces the preliminary stderr */
1943 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001944 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001945 config->stdio_encoding,
Victor Stinner709d23d2019-05-02 14:56:30 -04001946 L"backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001947 if (std == NULL)
1948 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001949
1950 /* Same as hack above, pre-import stderr's codec to avoid recursion
1951 when import.c tries to write to stderr in verbose mode. */
1952 encoding_attr = PyObject_GetAttrString(std, "encoding");
1953 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001954 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001955 if (std_encoding != NULL) {
1956 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1957 Py_XDECREF(codec_info);
1958 }
1959 Py_DECREF(encoding_attr);
1960 }
1961 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1962
1963 if (PySys_SetObject("__stderr__", std) < 0) {
1964 Py_DECREF(std);
1965 goto error;
1966 }
1967 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1968 Py_DECREF(std);
1969 goto error;
1970 }
1971 Py_DECREF(std);
1972#endif
1973
Victor Stinnera7368ac2017-11-15 18:11:45 -08001974 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001975
Victor Stinnera7368ac2017-11-15 18:11:45 -08001976error:
1977 res = _Py_INIT_ERR("can't initialize sys standard streams");
1978
1979done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02001980 _Py_ClearStandardStreamEncoding();
Victor Stinner31e99082017-12-20 23:41:38 +01001981
Nick Coghland6009512014-11-20 21:39:37 +10001982 Py_XDECREF(bimod);
1983 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001984 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001985}
1986
1987
Victor Stinner10dc4842015-03-24 12:01:30 +01001988static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001989_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001990{
Victor Stinner10dc4842015-03-24 12:01:30 +01001991 fputc('\n', stderr);
1992 fflush(stderr);
1993
1994 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001995 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001996}
Victor Stinner791da1c2016-03-14 16:53:12 +01001997
1998/* Print the current exception (if an exception is set) with its traceback,
1999 or display the current Python stack.
2000
2001 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
2002 called on catastrophic cases.
2003
2004 Return 1 if the traceback was displayed, 0 otherwise. */
2005
2006static int
2007_Py_FatalError_PrintExc(int fd)
2008{
2009 PyObject *ferr, *res;
2010 PyObject *exception, *v, *tb;
2011 int has_tb;
2012
Victor Stinner791da1c2016-03-14 16:53:12 +01002013 PyErr_Fetch(&exception, &v, &tb);
2014 if (exception == NULL) {
2015 /* No current exception */
2016 return 0;
2017 }
2018
2019 ferr = _PySys_GetObjectId(&PyId_stderr);
2020 if (ferr == NULL || ferr == Py_None) {
2021 /* sys.stderr is not set yet or set to None,
2022 no need to try to display the exception */
2023 return 0;
2024 }
2025
2026 PyErr_NormalizeException(&exception, &v, &tb);
2027 if (tb == NULL) {
2028 tb = Py_None;
2029 Py_INCREF(tb);
2030 }
2031 PyException_SetTraceback(v, tb);
2032 if (exception == NULL) {
2033 /* PyErr_NormalizeException() failed */
2034 return 0;
2035 }
2036
2037 has_tb = (tb != Py_None);
2038 PyErr_Display(exception, v, tb);
2039 Py_XDECREF(exception);
2040 Py_XDECREF(v);
2041 Py_XDECREF(tb);
2042
2043 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07002044 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01002045 if (res == NULL)
2046 PyErr_Clear();
2047 else
2048 Py_DECREF(res);
2049
2050 return has_tb;
2051}
2052
Nick Coghland6009512014-11-20 21:39:37 +10002053/* Print fatal error message and abort */
2054
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002055#ifdef MS_WINDOWS
2056static void
2057fatal_output_debug(const char *msg)
2058{
2059 /* buffer of 256 bytes allocated on the stack */
2060 WCHAR buffer[256 / sizeof(WCHAR)];
2061 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2062 size_t msglen;
2063
2064 OutputDebugStringW(L"Fatal Python error: ");
2065
2066 msglen = strlen(msg);
2067 while (msglen) {
2068 size_t i;
2069
2070 if (buflen > msglen) {
2071 buflen = msglen;
2072 }
2073
2074 /* Convert the message to wchar_t. This uses a simple one-to-one
2075 conversion, assuming that the this error message actually uses
2076 ASCII only. If this ceases to be true, we will have to convert. */
2077 for (i=0; i < buflen; ++i) {
2078 buffer[i] = msg[i];
2079 }
2080 buffer[i] = L'\0';
2081 OutputDebugStringW(buffer);
2082
2083 msg += buflen;
2084 msglen -= buflen;
2085 }
2086 OutputDebugStringW(L"\n");
2087}
2088#endif
2089
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002090static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002091fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002092{
2093 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01002094 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002095
2096 if (reentrant) {
2097 /* Py_FatalError() caused a second fatal error.
2098 Example: flush_std_files() raises a recursion error. */
2099 goto exit;
2100 }
2101 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002102
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002103 fprintf(stderr, "Fatal Python error: ");
2104 if (prefix) {
2105 fputs(prefix, stderr);
2106 fputs(": ", stderr);
2107 }
2108 if (msg) {
2109 fputs(msg, stderr);
2110 }
2111 else {
2112 fprintf(stderr, "<message not set>");
2113 }
2114 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10002115 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01002116
Victor Stinner3a228ab2018-11-01 00:26:41 +01002117 /* Check if the current thread has a Python thread state
2118 and holds the GIL */
2119 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2120 if (tss_tstate != NULL) {
Victor Stinner50b48572018-11-01 01:51:40 +01002121 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner3a228ab2018-11-01 00:26:41 +01002122 if (tss_tstate != tstate) {
2123 /* The Python thread does not hold the GIL */
2124 tss_tstate = NULL;
2125 }
2126 }
2127 else {
2128 /* Py_FatalError() has been called from a C thread
2129 which has no Python thread state. */
2130 }
2131 int has_tstate_and_gil = (tss_tstate != NULL);
2132
2133 if (has_tstate_and_gil) {
2134 /* If an exception is set, print the exception with its traceback */
2135 if (!_Py_FatalError_PrintExc(fd)) {
2136 /* No exception is set, or an exception is set without traceback */
2137 _Py_FatalError_DumpTracebacks(fd);
2138 }
2139 }
2140 else {
Victor Stinner791da1c2016-03-14 16:53:12 +01002141 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002142 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002143
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002144 /* The main purpose of faulthandler is to display the traceback.
2145 This function already did its best to display a traceback.
2146 Disable faulthandler to prevent writing a second traceback
2147 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002148 _PyFaulthandler_Fini();
2149
Victor Stinner791da1c2016-03-14 16:53:12 +01002150 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002151 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002152 /* Flush sys.stdout and sys.stderr */
2153 flush_std_files();
2154 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002155
Nick Coghland6009512014-11-20 21:39:37 +10002156#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002157 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002158#endif /* MS_WINDOWS */
2159
2160exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002161 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002162#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002163 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002164#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002165 abort();
2166 }
2167 else {
2168 exit(status);
2169 }
2170}
2171
Victor Stinner19760862017-12-20 01:41:59 +01002172void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002173Py_FatalError(const char *msg)
2174{
2175 fatal_error(NULL, msg, -1);
2176}
2177
Victor Stinner19760862017-12-20 01:41:59 +01002178void _Py_NO_RETURN
Victor Stinnerdfe88472019-03-01 12:14:41 +01002179_Py_ExitInitError(_PyInitError err)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002180{
Victor Stinnerdb719752019-05-01 05:35:33 +02002181 if (_Py_INIT_IS_EXIT(err)) {
Victor Stinnerdfe88472019-03-01 12:14:41 +01002182 exit(err.exitcode);
Victor Stinnerdbacfc22019-05-16 16:39:26 +02002183 }
2184 else if (_Py_INIT_IS_ERROR(err)) {
2185 fatal_error(err._func, err.err_msg, 1);
Victor Stinnerdfe88472019-03-01 12:14:41 +01002186 }
2187 else {
Victor Stinnerdbacfc22019-05-16 16:39:26 +02002188 Py_FatalError("_Py_ExitInitError() must not be called on success");
Victor Stinnerdfe88472019-03-01 12:14:41 +01002189 }
Nick Coghland6009512014-11-20 21:39:37 +10002190}
2191
2192/* Clean up and exit */
2193
Victor Stinnerd7292b52016-06-17 12:29:00 +02002194# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002195
Nick Coghland6009512014-11-20 21:39:37 +10002196/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002197void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002198{
Victor Stinnercaba55b2018-08-03 15:33:52 +02002199 PyInterpreterState *is = _PyInterpreterState_Get();
Marcel Plch776407f2017-12-20 11:17:58 +01002200
Antoine Pitroufc5db952017-12-13 02:29:07 +01002201 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002202 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2203
2204 is->pyexitfunc = func;
2205 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002206}
2207
2208static void
Marcel Plch776407f2017-12-20 11:17:58 +01002209call_py_exitfuncs(PyInterpreterState *istate)
Nick Coghland6009512014-11-20 21:39:37 +10002210{
Marcel Plch776407f2017-12-20 11:17:58 +01002211 if (istate->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002212 return;
2213
Marcel Plch776407f2017-12-20 11:17:58 +01002214 (*istate->pyexitfunc)(istate->pyexitmodule);
Nick Coghland6009512014-11-20 21:39:37 +10002215 PyErr_Clear();
2216}
2217
2218/* Wait until threading._shutdown completes, provided
2219 the threading module was imported in the first place.
2220 The shutdown routine will wait until all non-daemon
2221 "threading" threads have completed. */
2222static void
2223wait_for_thread_shutdown(void)
2224{
Nick Coghland6009512014-11-20 21:39:37 +10002225 _Py_IDENTIFIER(_shutdown);
2226 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002227 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002228 if (threading == NULL) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002229 if (PyErr_Occurred()) {
2230 PyErr_WriteUnraisable(NULL);
2231 }
2232 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002233 return;
2234 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002235 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002236 if (result == NULL) {
2237 PyErr_WriteUnraisable(threading);
2238 }
2239 else {
2240 Py_DECREF(result);
2241 }
2242 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002243}
2244
2245#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002246int Py_AtExit(void (*func)(void))
2247{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002248 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002249 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002250 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002251 return 0;
2252}
2253
2254static void
Victor Stinner8e91c242019-04-24 17:24:01 +02002255call_ll_exitfuncs(_PyRuntimeState *runtime)
Nick Coghland6009512014-11-20 21:39:37 +10002256{
Victor Stinner8e91c242019-04-24 17:24:01 +02002257 while (runtime->nexitfuncs > 0) {
Victor Stinner87d23a02019-04-26 05:49:26 +02002258 /* pop last function from the list */
2259 runtime->nexitfuncs--;
2260 void (*exitfunc)(void) = runtime->exitfuncs[runtime->nexitfuncs];
2261 runtime->exitfuncs[runtime->nexitfuncs] = NULL;
2262
2263 exitfunc();
Victor Stinner8e91c242019-04-24 17:24:01 +02002264 }
Nick Coghland6009512014-11-20 21:39:37 +10002265
2266 fflush(stdout);
2267 fflush(stderr);
2268}
2269
Victor Stinnercfc88312018-08-01 16:41:25 +02002270void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002271Py_Exit(int sts)
2272{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002273 if (Py_FinalizeEx() < 0) {
2274 sts = 120;
2275 }
Nick Coghland6009512014-11-20 21:39:37 +10002276
2277 exit(sts);
2278}
2279
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002280static _PyInitError
Victor Stinner43fc3bb2019-05-02 11:54:20 -04002281init_signals(void)
Nick Coghland6009512014-11-20 21:39:37 +10002282{
2283#ifdef SIGPIPE
2284 PyOS_setsig(SIGPIPE, SIG_IGN);
2285#endif
2286#ifdef SIGXFZ
2287 PyOS_setsig(SIGXFZ, SIG_IGN);
2288#endif
2289#ifdef SIGXFSZ
2290 PyOS_setsig(SIGXFSZ, SIG_IGN);
2291#endif
2292 PyOS_InitInterrupts(); /* May imply initsignal() */
2293 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002294 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002295 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002296 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002297}
2298
2299
2300/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2301 *
2302 * All of the code in this function must only use async-signal-safe functions,
2303 * listed at `man 7 signal` or
2304 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2305 */
2306void
2307_Py_RestoreSignals(void)
2308{
2309#ifdef SIGPIPE
2310 PyOS_setsig(SIGPIPE, SIG_DFL);
2311#endif
2312#ifdef SIGXFZ
2313 PyOS_setsig(SIGXFZ, SIG_DFL);
2314#endif
2315#ifdef SIGXFSZ
2316 PyOS_setsig(SIGXFSZ, SIG_DFL);
2317#endif
2318}
2319
2320
2321/*
2322 * The file descriptor fd is considered ``interactive'' if either
2323 * a) isatty(fd) is TRUE, or
2324 * b) the -i flag was given, and the filename associated with
2325 * the descriptor is NULL or "<stdin>" or "???".
2326 */
2327int
2328Py_FdIsInteractive(FILE *fp, const char *filename)
2329{
2330 if (isatty((int)fileno(fp)))
2331 return 1;
2332 if (!Py_InteractiveFlag)
2333 return 0;
2334 return (filename == NULL) ||
2335 (strcmp(filename, "<stdin>") == 0) ||
2336 (strcmp(filename, "???") == 0);
2337}
2338
2339
Nick Coghland6009512014-11-20 21:39:37 +10002340/* Wrappers around sigaction() or signal(). */
2341
2342PyOS_sighandler_t
2343PyOS_getsig(int sig)
2344{
2345#ifdef HAVE_SIGACTION
2346 struct sigaction context;
2347 if (sigaction(sig, NULL, &context) == -1)
2348 return SIG_ERR;
2349 return context.sa_handler;
2350#else
2351 PyOS_sighandler_t handler;
2352/* Special signal handling for the secure CRT in Visual Studio 2005 */
2353#if defined(_MSC_VER) && _MSC_VER >= 1400
2354 switch (sig) {
2355 /* Only these signals are valid */
2356 case SIGINT:
2357 case SIGILL:
2358 case SIGFPE:
2359 case SIGSEGV:
2360 case SIGTERM:
2361 case SIGBREAK:
2362 case SIGABRT:
2363 break;
2364 /* Don't call signal() with other values or it will assert */
2365 default:
2366 return SIG_ERR;
2367 }
2368#endif /* _MSC_VER && _MSC_VER >= 1400 */
2369 handler = signal(sig, SIG_IGN);
2370 if (handler != SIG_ERR)
2371 signal(sig, handler);
2372 return handler;
2373#endif
2374}
2375
2376/*
2377 * All of the code in this function must only use async-signal-safe functions,
2378 * listed at `man 7 signal` or
2379 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2380 */
2381PyOS_sighandler_t
2382PyOS_setsig(int sig, PyOS_sighandler_t handler)
2383{
2384#ifdef HAVE_SIGACTION
2385 /* Some code in Modules/signalmodule.c depends on sigaction() being
2386 * used here if HAVE_SIGACTION is defined. Fix that if this code
2387 * changes to invalidate that assumption.
2388 */
2389 struct sigaction context, ocontext;
2390 context.sa_handler = handler;
2391 sigemptyset(&context.sa_mask);
2392 context.sa_flags = 0;
2393 if (sigaction(sig, &context, &ocontext) == -1)
2394 return SIG_ERR;
2395 return ocontext.sa_handler;
2396#else
2397 PyOS_sighandler_t oldhandler;
2398 oldhandler = signal(sig, handler);
2399#ifdef HAVE_SIGINTERRUPT
2400 siginterrupt(sig, 1);
2401#endif
2402 return oldhandler;
2403#endif
2404}
2405
2406#ifdef __cplusplus
2407}
2408#endif