blob: cce4783bc12c31bab7b3012601923ec14f3e622e [file] [log] [blame]
Nick Coghland6009512014-11-20 21:39:37 +10001/* Python interpreter top-level routines, including init/exit */
2
3#include "Python.h"
4
5#include "Python-ast.h"
Victor Stinner3bb183d2018-11-22 18:38:38 +01006#undef Yield /* undefine macro conflicting with <winbase.h> */
Victor Stinner09532fe2019-05-10 23:39:09 +02007#include "pycore_ceval.h"
Victor Stinner99fcc612019-04-29 13:04:07 +02008#include "pycore_context.h"
Victor Stinner0a28f8d2019-06-19 02:54:39 +02009#include "pycore_import.h" /* _PyImport_FindBuiltin */
Victor Stinner331a6a52019-05-27 16:39:22 +020010#include "pycore_initconfig.h"
Victor Stinner353933e2018-11-23 13:08:26 +010011#include "pycore_fileutils.h"
Victor Stinner27e2d1f2018-11-01 00:52:28 +010012#include "pycore_hamt.h"
Victor Stinnera1c249c2018-11-01 03:15:58 +010013#include "pycore_pathconfig.h"
Victor Stinnerb45d2592019-06-20 00:05:23 +020014#include "pycore_pyerrors.h"
Victor Stinner621cebe2018-11-12 16:53:38 +010015#include "pycore_pylifecycle.h"
16#include "pycore_pymem.h"
17#include "pycore_pystate.h"
Victor Stinnered488662019-05-20 00:14:57 +020018#include "pycore_traceback.h"
Nick Coghland6009512014-11-20 21:39:37 +100019#include "grammar.h"
20#include "node.h"
21#include "token.h"
22#include "parsetok.h"
23#include "errcode.h"
24#include "code.h"
25#include "symtable.h"
26#include "ast.h"
27#include "marshal.h"
28#include "osdefs.h"
29#include <locale.h>
30
31#ifdef HAVE_SIGNAL_H
32#include <signal.h>
33#endif
34
35#ifdef MS_WINDOWS
36#include "malloc.h" /* for alloca */
37#endif
38
39#ifdef HAVE_LANGINFO_H
40#include <langinfo.h>
41#endif
42
43#ifdef MS_WINDOWS
44#undef BYTE
45#include "windows.h"
Steve Dower39294992016-08-30 21:22:36 -070046
47extern PyTypeObject PyWindowsConsoleIO_Type;
48#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
Nick Coghland6009512014-11-20 21:39:37 +100049#endif
50
51_Py_IDENTIFIER(flush);
52_Py_IDENTIFIER(name);
53_Py_IDENTIFIER(stdin);
54_Py_IDENTIFIER(stdout);
55_Py_IDENTIFIER(stderr);
Eric Snow3f9eee62017-09-15 16:35:20 -060056_Py_IDENTIFIER(threading);
Nick Coghland6009512014-11-20 21:39:37 +100057
58#ifdef __cplusplus
59extern "C" {
60#endif
61
Nick Coghland6009512014-11-20 21:39:37 +100062extern grammar _PyParser_Grammar; /* From graminit.c */
63
Victor Stinnerb45d2592019-06-20 00:05:23 +020064/* Forward declarations */
Victor Stinner331a6a52019-05-27 16:39:22 +020065static PyStatus add_main_module(PyInterpreterState *interp);
Victor Stinnerb45d2592019-06-20 00:05:23 +020066static PyStatus init_import_site(void);
Victor Stinnere0c9ab82019-11-22 16:19:14 +010067static PyStatus init_set_builtins_open(PyThreadState *tstate);
Victor Stinnerb45d2592019-06-20 00:05:23 +020068static PyStatus init_sys_streams(PyThreadState *tstate);
69static PyStatus init_signals(PyThreadState *tstate);
70static void call_py_exitfuncs(PyThreadState *tstate);
71static void wait_for_thread_shutdown(PyThreadState *tstate);
Victor Stinner8e91c242019-04-24 17:24:01 +020072static void call_ll_exitfuncs(_PyRuntimeState *runtime);
Nick Coghland6009512014-11-20 21:39:37 +100073
Gregory P. Smith38f11cc2019-02-16 12:57:40 -080074int _Py_UnhandledKeyboardInterrupt = 0;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080075_PyRuntimeState _PyRuntime = _PyRuntimeState_INIT;
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010076static int runtime_initialized = 0;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060077
Victor Stinner331a6a52019-05-27 16:39:22 +020078PyStatus
Eric Snow2ebc5ce2017-09-07 23:51:28 -060079_PyRuntime_Initialize(void)
80{
81 /* XXX We only initialize once in the process, which aligns with
82 the static initialization of the former globals now found in
83 _PyRuntime. However, _PyRuntime *should* be initialized with
84 every Py_Initialize() call, but doing so breaks the runtime.
85 This is because the runtime state is not properly finalized
86 currently. */
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010087 if (runtime_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +020088 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -080089 }
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010090 runtime_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080091
92 return _PyRuntimeState_Init(&_PyRuntime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -060093}
94
95void
96_PyRuntime_Finalize(void)
97{
98 _PyRuntimeState_Fini(&_PyRuntime);
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010099 runtime_initialized = 0;
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600100}
101
102int
103_Py_IsFinalizing(void)
104{
105 return _PyRuntime.finalizing != NULL;
106}
107
Nick Coghland6009512014-11-20 21:39:37 +1000108/* Hack to force loading of object files */
109int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
110 PyOS_mystrnicmp; /* Python/pystrcmp.o */
111
112/* PyModule_GetWarningsModule is no longer necessary as of 2.6
113since _warnings is builtin. This API should not be used. */
114PyObject *
115PyModule_GetWarningsModule(void)
116{
117 return PyImport_ImportModule("warnings");
118}
119
Eric Snowc7ec9982017-05-23 23:00:52 -0700120
Eric Snow1abcf672017-05-23 21:46:51 -0700121/* APIs to access the initialization flags
122 *
123 * Can be called prior to Py_Initialize.
124 */
Nick Coghland6009512014-11-20 21:39:37 +1000125
Eric Snow1abcf672017-05-23 21:46:51 -0700126int
127_Py_IsCoreInitialized(void)
128{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600129 return _PyRuntime.core_initialized;
Eric Snow1abcf672017-05-23 21:46:51 -0700130}
Nick Coghland6009512014-11-20 21:39:37 +1000131
132int
133Py_IsInitialized(void)
134{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600135 return _PyRuntime.initialized;
Nick Coghland6009512014-11-20 21:39:37 +1000136}
137
Nick Coghlan6ea41862017-06-11 13:16:15 +1000138
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000139/* Global initializations. Can be undone by Py_FinalizeEx(). Don't
140 call this twice without an intervening Py_FinalizeEx() call. When
Nick Coghland6009512014-11-20 21:39:37 +1000141 initializations fail, a fatal error is issued and the function does
142 not return. On return, the first thread and interpreter state have
143 been created.
144
145 Locking: you must hold the interpreter lock while calling this.
146 (If the lock has not yet been initialized, that's equivalent to
147 having the lock, but you cannot use multiple threads.)
148
149*/
150
Victor Stinner331a6a52019-05-27 16:39:22 +0200151static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200152init_importlib(PyThreadState *tstate, PyObject *sysmod)
Nick Coghland6009512014-11-20 21:39:37 +1000153{
154 PyObject *importlib;
155 PyObject *impmod;
Nick Coghland6009512014-11-20 21:39:37 +1000156 PyObject *value;
Victor Stinnerb45d2592019-06-20 00:05:23 +0200157 PyInterpreterState *interp = tstate->interp;
Victor Stinner331a6a52019-05-27 16:39:22 +0200158 int verbose = interp->config.verbose;
Nick Coghland6009512014-11-20 21:39:37 +1000159
160 /* Import _importlib through its frozen version, _frozen_importlib. */
161 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200162 return _PyStatus_ERR("can't import _frozen_importlib");
Nick Coghland6009512014-11-20 21:39:37 +1000163 }
Victor Stinnerc96be812019-05-14 17:34:56 +0200164 else if (verbose) {
Nick Coghland6009512014-11-20 21:39:37 +1000165 PySys_FormatStderr("import _frozen_importlib # frozen\n");
166 }
167 importlib = PyImport_AddModule("_frozen_importlib");
168 if (importlib == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200169 return _PyStatus_ERR("couldn't get _frozen_importlib from sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000170 }
171 interp->importlib = importlib;
172 Py_INCREF(interp->importlib);
173
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300174 interp->import_func = PyDict_GetItemString(interp->builtins, "__import__");
175 if (interp->import_func == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +0200176 return _PyStatus_ERR("__import__ not found");
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300177 Py_INCREF(interp->import_func);
178
Victor Stinnercd6e6942015-09-18 09:11:57 +0200179 /* Import the _imp module */
Benjamin Petersonc65ef772018-01-29 11:33:57 -0800180 impmod = PyInit__imp();
Nick Coghland6009512014-11-20 21:39:37 +1000181 if (impmod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200182 return _PyStatus_ERR("can't import _imp");
Nick Coghland6009512014-11-20 21:39:37 +1000183 }
Victor Stinnerc96be812019-05-14 17:34:56 +0200184 else if (verbose) {
Victor Stinnercd6e6942015-09-18 09:11:57 +0200185 PySys_FormatStderr("import _imp # builtin\n");
Nick Coghland6009512014-11-20 21:39:37 +1000186 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600187 if (_PyImport_SetModuleString("_imp", impmod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200188 return _PyStatus_ERR("can't save _imp to sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000189 }
190
Victor Stinnercd6e6942015-09-18 09:11:57 +0200191 /* Install importlib as the implementation of import */
Nick Coghland6009512014-11-20 21:39:37 +1000192 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
193 if (value == NULL) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200194 _PyErr_Print(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200195 return _PyStatus_ERR("importlib install failed");
Nick Coghland6009512014-11-20 21:39:37 +1000196 }
197 Py_DECREF(value);
198 Py_DECREF(impmod);
199
Victor Stinner331a6a52019-05-27 16:39:22 +0200200 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000201}
202
Victor Stinner331a6a52019-05-27 16:39:22 +0200203static PyStatus
Victor Stinner0a28f8d2019-06-19 02:54:39 +0200204init_importlib_external(PyThreadState *tstate)
Eric Snow1abcf672017-05-23 21:46:51 -0700205{
206 PyObject *value;
Victor Stinner0a28f8d2019-06-19 02:54:39 +0200207 value = PyObject_CallMethod(tstate->interp->importlib,
Eric Snow1abcf672017-05-23 21:46:51 -0700208 "_install_external_importers", "");
209 if (value == NULL) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200210 _PyErr_Print(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200211 return _PyStatus_ERR("external importer setup failed");
Eric Snow1abcf672017-05-23 21:46:51 -0700212 }
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200213 Py_DECREF(value);
Victor Stinner0a28f8d2019-06-19 02:54:39 +0200214 return _PyImportZip_Init(tstate);
Eric Snow1abcf672017-05-23 21:46:51 -0700215}
Nick Coghland6009512014-11-20 21:39:37 +1000216
Nick Coghlan6ea41862017-06-11 13:16:15 +1000217/* Helper functions to better handle the legacy C locale
218 *
219 * The legacy C locale assumes ASCII as the default text encoding, which
220 * causes problems not only for the CPython runtime, but also other
221 * components like GNU readline.
222 *
223 * Accordingly, when the CLI detects it, it attempts to coerce it to a
224 * more capable UTF-8 based alternative as follows:
225 *
226 * if (_Py_LegacyLocaleDetected()) {
227 * _Py_CoerceLegacyLocale();
228 * }
229 *
230 * See the documentation of the PYTHONCOERCECLOCALE setting for more details.
231 *
232 * Locale coercion also impacts the default error handler for the standard
233 * streams: while the usual default is "strict", the default for the legacy
234 * C locale and for any of the coercion target locales is "surrogateescape".
235 */
236
237int
Victor Stinner0f721472019-05-20 17:16:38 +0200238_Py_LegacyLocaleDetected(int warn)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000239{
240#ifndef MS_WINDOWS
Victor Stinner0f721472019-05-20 17:16:38 +0200241 if (!warn) {
242 const char *locale_override = getenv("LC_ALL");
243 if (locale_override != NULL && *locale_override != '\0') {
244 /* Don't coerce C locale if the LC_ALL environment variable
245 is set */
246 return 0;
247 }
248 }
249
Nick Coghlan6ea41862017-06-11 13:16:15 +1000250 /* On non-Windows systems, the C locale is considered a legacy locale */
Nick Coghlaneb817952017-06-18 12:29:42 +1000251 /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat
252 * the POSIX locale as a simple alias for the C locale, so
253 * we may also want to check for that explicitly.
254 */
Nick Coghlan6ea41862017-06-11 13:16:15 +1000255 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
256 return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
257#else
258 /* Windows uses code pages instead of locales, so no locale is legacy */
259 return 0;
260#endif
261}
262
Victor Stinnerb0051362019-11-22 17:52:42 +0100263#ifndef MS_WINDOWS
Nick Coghlaneb817952017-06-18 12:29:42 +1000264static const char *_C_LOCALE_WARNING =
265 "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
266 "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
267 "C.utf8, or UTF-8 (if available) as alternative Unicode-compatible "
268 "locales is recommended.\n";
269
Nick Coghlaneb817952017-06-18 12:29:42 +1000270static void
Victor Stinner43125222019-04-24 18:23:53 +0200271emit_stderr_warning_for_legacy_locale(_PyRuntimeState *runtime)
Nick Coghlaneb817952017-06-18 12:29:42 +1000272{
Victor Stinner331a6a52019-05-27 16:39:22 +0200273 const PyPreConfig *preconfig = &runtime->preconfig;
Victor Stinner0f721472019-05-20 17:16:38 +0200274 if (preconfig->coerce_c_locale_warn && _Py_LegacyLocaleDetected(1)) {
Victor Stinnercf215042018-08-29 22:56:06 +0200275 PySys_FormatStderr("%s", _C_LOCALE_WARNING);
Nick Coghlaneb817952017-06-18 12:29:42 +1000276 }
277}
Victor Stinnerb0051362019-11-22 17:52:42 +0100278#endif /* !defined(MS_WINDOWS) */
Nick Coghlaneb817952017-06-18 12:29:42 +1000279
Nick Coghlan6ea41862017-06-11 13:16:15 +1000280typedef struct _CandidateLocale {
281 const char *locale_name; /* The locale to try as a coercion target */
282} _LocaleCoercionTarget;
283
284static _LocaleCoercionTarget _TARGET_LOCALES[] = {
285 {"C.UTF-8"},
286 {"C.utf8"},
Nick Coghlan18974c32017-06-30 00:48:14 +1000287 {"UTF-8"},
Nick Coghlan6ea41862017-06-11 13:16:15 +1000288 {NULL}
289};
290
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200291
292int
293_Py_IsLocaleCoercionTarget(const char *ctype_loc)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000294{
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200295 const _LocaleCoercionTarget *target = NULL;
296 for (target = _TARGET_LOCALES; target->locale_name; target++) {
297 if (strcmp(ctype_loc, target->locale_name) == 0) {
298 return 1;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000299 }
Victor Stinner124b9eb2018-08-29 01:29:06 +0200300 }
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200301 return 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000302}
303
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200304
Nick Coghlan6ea41862017-06-11 13:16:15 +1000305#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100306static const char C_LOCALE_COERCION_WARNING[] =
Nick Coghlan6ea41862017-06-11 13:16:15 +1000307 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale "
308 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n";
309
Victor Stinner0f721472019-05-20 17:16:38 +0200310static int
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200311_coerce_default_locale_settings(int warn, const _LocaleCoercionTarget *target)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000312{
313 const char *newloc = target->locale_name;
314
315 /* Reset locale back to currently configured defaults */
xdegaye1588be62017-11-12 12:45:59 +0100316 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000317
318 /* Set the relevant locale environment variable */
319 if (setenv("LC_CTYPE", newloc, 1)) {
320 fprintf(stderr,
321 "Error setting LC_CTYPE, skipping C locale coercion\n");
Victor Stinner0f721472019-05-20 17:16:38 +0200322 return 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000323 }
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200324 if (warn) {
Victor Stinner94540602017-12-16 04:54:22 +0100325 fprintf(stderr, C_LOCALE_COERCION_WARNING, newloc);
Nick Coghlaneb817952017-06-18 12:29:42 +1000326 }
Nick Coghlan6ea41862017-06-11 13:16:15 +1000327
328 /* Reconfigure with the overridden environment variables */
xdegaye1588be62017-11-12 12:45:59 +0100329 _Py_SetLocaleFromEnv(LC_ALL);
Victor Stinner0f721472019-05-20 17:16:38 +0200330 return 1;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000331}
332#endif
333
Victor Stinner0f721472019-05-20 17:16:38 +0200334int
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200335_Py_CoerceLegacyLocale(int warn)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000336{
Victor Stinner0f721472019-05-20 17:16:38 +0200337 int coerced = 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000338#ifdef PY_COERCE_C_LOCALE
Victor Stinner8ea09112018-09-03 17:05:18 +0200339 char *oldloc = NULL;
340
341 oldloc = _PyMem_RawStrdup(setlocale(LC_CTYPE, NULL));
342 if (oldloc == NULL) {
Victor Stinner0f721472019-05-20 17:16:38 +0200343 return coerced;
Victor Stinner8ea09112018-09-03 17:05:18 +0200344 }
345
Victor Stinner94540602017-12-16 04:54:22 +0100346 const char *locale_override = getenv("LC_ALL");
347 if (locale_override == NULL || *locale_override == '\0') {
348 /* LC_ALL is also not set (or is set to an empty string) */
349 const _LocaleCoercionTarget *target = NULL;
350 for (target = _TARGET_LOCALES; target->locale_name; target++) {
351 const char *new_locale = setlocale(LC_CTYPE,
352 target->locale_name);
353 if (new_locale != NULL) {
Victor Stinnere2510952019-05-02 11:28:57 -0400354#if !defined(_Py_FORCE_UTF8_LOCALE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94540602017-12-16 04:54:22 +0100355 /* Also ensure that nl_langinfo works in this locale */
356 char *codeset = nl_langinfo(CODESET);
357 if (!codeset || *codeset == '\0') {
358 /* CODESET is not set or empty, so skip coercion */
359 new_locale = NULL;
360 _Py_SetLocaleFromEnv(LC_CTYPE);
361 continue;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000362 }
Victor Stinner94540602017-12-16 04:54:22 +0100363#endif
364 /* Successfully configured locale, so make it the default */
Victor Stinner0f721472019-05-20 17:16:38 +0200365 coerced = _coerce_default_locale_settings(warn, target);
Victor Stinner8ea09112018-09-03 17:05:18 +0200366 goto done;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000367 }
368 }
369 }
370 /* No C locale warning here, as Py_Initialize will emit one later */
Victor Stinner8ea09112018-09-03 17:05:18 +0200371
372 setlocale(LC_CTYPE, oldloc);
373
374done:
375 PyMem_RawFree(oldloc);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000376#endif
Victor Stinner0f721472019-05-20 17:16:38 +0200377 return coerced;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000378}
379
xdegaye1588be62017-11-12 12:45:59 +0100380/* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to
381 * isolate the idiosyncrasies of different libc implementations. It reads the
382 * appropriate environment variable and uses its value to select the locale for
383 * 'category'. */
384char *
385_Py_SetLocaleFromEnv(int category)
386{
Victor Stinner353933e2018-11-23 13:08:26 +0100387 char *res;
xdegaye1588be62017-11-12 12:45:59 +0100388#ifdef __ANDROID__
389 const char *locale;
390 const char **pvar;
391#ifdef PY_COERCE_C_LOCALE
392 const char *coerce_c_locale;
393#endif
394 const char *utf8_locale = "C.UTF-8";
395 const char *env_var_set[] = {
396 "LC_ALL",
397 "LC_CTYPE",
398 "LANG",
399 NULL,
400 };
401
402 /* Android setlocale(category, "") doesn't check the environment variables
403 * and incorrectly sets the "C" locale at API 24 and older APIs. We only
404 * check the environment variables listed in env_var_set. */
405 for (pvar=env_var_set; *pvar; pvar++) {
406 locale = getenv(*pvar);
407 if (locale != NULL && *locale != '\0') {
408 if (strcmp(locale, utf8_locale) == 0 ||
409 strcmp(locale, "en_US.UTF-8") == 0) {
410 return setlocale(category, utf8_locale);
411 }
412 return setlocale(category, "C");
413 }
414 }
415
416 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
417 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
418 * Quote from POSIX section "8.2 Internationalization Variables":
419 * "4. If the LANG environment variable is not set or is set to the empty
420 * string, the implementation-defined default locale shall be used." */
421
422#ifdef PY_COERCE_C_LOCALE
423 coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
424 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
425 /* Some other ported code may check the environment variables (e.g. in
426 * extension modules), so we make sure that they match the locale
427 * configuration */
428 if (setenv("LC_CTYPE", utf8_locale, 1)) {
429 fprintf(stderr, "Warning: failed setting the LC_CTYPE "
430 "environment variable to %s\n", utf8_locale);
431 }
432 }
433#endif
Victor Stinner353933e2018-11-23 13:08:26 +0100434 res = setlocale(category, utf8_locale);
435#else /* !defined(__ANDROID__) */
436 res = setlocale(category, "");
437#endif
438 _Py_ResetForceASCII();
439 return res;
xdegaye1588be62017-11-12 12:45:59 +0100440}
441
Nick Coghlan6ea41862017-06-11 13:16:15 +1000442
Eric Snow1abcf672017-05-23 21:46:51 -0700443/* Global initializations. Can be undone by Py_Finalize(). Don't
444 call this twice without an intervening Py_Finalize() call.
445
Victor Stinner331a6a52019-05-27 16:39:22 +0200446 Every call to Py_InitializeFromConfig, Py_Initialize or Py_InitializeEx
Eric Snow1abcf672017-05-23 21:46:51 -0700447 must have a corresponding call to Py_Finalize.
448
449 Locking: you must hold the interpreter lock while calling these APIs.
450 (If the lock has not yet been initialized, that's equivalent to
451 having the lock, but you cannot use multiple threads.)
452
453*/
454
Victor Stinner331a6a52019-05-27 16:39:22 +0200455static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200456pyinit_core_reconfigure(_PyRuntimeState *runtime,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200457 PyThreadState **tstate_p,
Victor Stinner331a6a52019-05-27 16:39:22 +0200458 const PyConfig *config)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200459{
Victor Stinner331a6a52019-05-27 16:39:22 +0200460 PyStatus status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100461 PyThreadState *tstate = _PyThreadState_GET();
462 if (!tstate) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200463 return _PyStatus_ERR("failed to read thread state");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100464 }
Victor Stinnerb45d2592019-06-20 00:05:23 +0200465 *tstate_p = tstate;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100466
467 PyInterpreterState *interp = tstate->interp;
468 if (interp == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200469 return _PyStatus_ERR("can't make main interpreter");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100470 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100471
Victor Stinner331a6a52019-05-27 16:39:22 +0200472 _PyConfig_Write(config, runtime);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200473
Victor Stinner331a6a52019-05-27 16:39:22 +0200474 status = _PyConfig_Copy(&interp->config, config);
475 if (_PyStatus_EXCEPTION(status)) {
476 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200477 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200478 config = &interp->config;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200479
Victor Stinner331a6a52019-05-27 16:39:22 +0200480 if (config->_install_importlib) {
Victor Stinner12f2f172019-09-26 15:51:50 +0200481 status = _PyConfig_WritePathConfig(config);
Victor Stinner331a6a52019-05-27 16:39:22 +0200482 if (_PyStatus_EXCEPTION(status)) {
483 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200484 }
485 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200486 return _PyStatus_OK();
Victor Stinner1dc6e392018-07-25 02:49:17 +0200487}
488
489
Victor Stinner331a6a52019-05-27 16:39:22 +0200490static PyStatus
Victor Stinner43125222019-04-24 18:23:53 +0200491pycore_init_runtime(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200492 const PyConfig *config)
Nick Coghland6009512014-11-20 21:39:37 +1000493{
Victor Stinner43125222019-04-24 18:23:53 +0200494 if (runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200495 return _PyStatus_ERR("main interpreter already initialized");
Victor Stinner1dc6e392018-07-25 02:49:17 +0200496 }
Victor Stinnerda273412017-12-15 01:46:02 +0100497
Victor Stinner331a6a52019-05-27 16:39:22 +0200498 _PyConfig_Write(config, runtime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600499
Eric Snow1abcf672017-05-23 21:46:51 -0700500 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
501 * threads behave a little more gracefully at interpreter shutdown.
502 * We clobber it here so the new interpreter can start with a clean
503 * slate.
504 *
505 * However, this may still lead to misbehaviour if there are daemon
506 * threads still hanging around from a previous Py_Initialize/Finalize
507 * pair :(
508 */
Victor Stinner43125222019-04-24 18:23:53 +0200509 runtime->finalizing = NULL;
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600510
Victor Stinner331a6a52019-05-27 16:39:22 +0200511 PyStatus status = _Py_HashRandomization_Init(config);
512 if (_PyStatus_EXCEPTION(status)) {
513 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800514 }
515
Victor Stinner331a6a52019-05-27 16:39:22 +0200516 status = _PyInterpreterState_Enable(runtime);
517 if (_PyStatus_EXCEPTION(status)) {
518 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -0800519 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200520 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100521}
Victor Stinnera7368ac2017-11-15 18:11:45 -0800522
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100523
Victor Stinner331a6a52019-05-27 16:39:22 +0200524static PyStatus
Victor Stinner43125222019-04-24 18:23:53 +0200525pycore_create_interpreter(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200526 const PyConfig *config,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200527 PyThreadState **tstate_p)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100528{
529 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnerda273412017-12-15 01:46:02 +0100530 if (interp == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200531 return _PyStatus_ERR("can't make main interpreter");
Victor Stinnerda273412017-12-15 01:46:02 +0100532 }
533
Victor Stinner331a6a52019-05-27 16:39:22 +0200534 PyStatus status = _PyConfig_Copy(&interp->config, config);
535 if (_PyStatus_EXCEPTION(status)) {
536 return status;
Victor Stinnerda273412017-12-15 01:46:02 +0100537 }
Nick Coghland6009512014-11-20 21:39:37 +1000538
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200539 PyThreadState *tstate = PyThreadState_New(interp);
Victor Stinnerb45d2592019-06-20 00:05:23 +0200540 if (tstate == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200541 return _PyStatus_ERR("can't make first thread");
Victor Stinnerb45d2592019-06-20 00:05:23 +0200542 }
Nick Coghland6009512014-11-20 21:39:37 +1000543 (void) PyThreadState_Swap(tstate);
544
Victor Stinner99fcc612019-04-29 13:04:07 +0200545 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
546 destroying the GIL might fail when it is being referenced from
547 another running thread (see issue #9901).
Nick Coghland6009512014-11-20 21:39:37 +1000548 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000549 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Victor Stinner09532fe2019-05-10 23:39:09 +0200550 _PyEval_FiniThreads(&runtime->ceval);
Victor Stinner2914bb32018-01-29 11:57:45 +0100551
Nick Coghland6009512014-11-20 21:39:37 +1000552 /* Auto-thread-state API */
Victor Stinner01b1cc12019-11-20 02:27:56 +0100553 _PyGILState_Init(tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000554
Victor Stinner2914bb32018-01-29 11:57:45 +0100555 /* Create the GIL */
556 PyEval_InitThreads();
557
Victor Stinnerb45d2592019-06-20 00:05:23 +0200558 *tstate_p = tstate;
Victor Stinner331a6a52019-05-27 16:39:22 +0200559 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100560}
Nick Coghland6009512014-11-20 21:39:37 +1000561
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100562
Victor Stinner331a6a52019-05-27 16:39:22 +0200563static PyStatus
Victor Stinnerb93f31f2019-11-20 18:39:12 +0100564pycore_init_types(PyThreadState *tstate)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100565{
Victor Stinner444b39b2019-11-20 01:18:11 +0100566 PyStatus status;
Victor Stinnerb93f31f2019-11-20 18:39:12 +0100567 int is_main_interp = _Py_IsMainInterpreter(tstate);
Victor Stinner444b39b2019-11-20 01:18:11 +0100568
Victor Stinner01b1cc12019-11-20 02:27:56 +0100569 status = _PyGC_Init(tstate);
Victor Stinner444b39b2019-11-20 01:18:11 +0100570 if (_PyStatus_EXCEPTION(status)) {
571 return status;
572 }
573
Victor Stinnere7e699e2019-11-20 12:08:13 +0100574 if (is_main_interp) {
575 status = _PyTypes_Init();
576 if (_PyStatus_EXCEPTION(status)) {
577 return status;
578 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100579
Victor Stinnere7e699e2019-11-20 12:08:13 +0100580 if (!_PyLong_Init()) {
581 return _PyStatus_ERR("can't init longs");
582 }
Victor Stinnerb93f31f2019-11-20 18:39:12 +0100583 }
Victor Stinneref5aa9a2019-11-20 00:38:03 +0100584
Victor Stinnerb93f31f2019-11-20 18:39:12 +0100585 if (is_main_interp) {
Victor Stinnere7e699e2019-11-20 12:08:13 +0100586 status = _PyUnicode_Init();
587 if (_PyStatus_EXCEPTION(status)) {
588 return status;
589 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100590 }
591
Victor Stinner331a6a52019-05-27 16:39:22 +0200592 status = _PyExc_Init();
593 if (_PyStatus_EXCEPTION(status)) {
594 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100595 }
596
Victor Stinnere7e699e2019-11-20 12:08:13 +0100597 if (is_main_interp) {
598 if (!_PyFloat_Init()) {
599 return _PyStatus_ERR("can't init float");
600 }
Nick Coghland6009512014-11-20 21:39:37 +1000601
Victor Stinnere7e699e2019-11-20 12:08:13 +0100602 if (_PyStructSequence_Init() < 0) {
603 return _PyStatus_ERR("can't initialize structseq");
604 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100605 }
Victor Stinneref9d9b62019-05-22 11:28:22 +0200606
Victor Stinner331a6a52019-05-27 16:39:22 +0200607 status = _PyErr_Init();
608 if (_PyStatus_EXCEPTION(status)) {
609 return status;
Victor Stinneref9d9b62019-05-22 11:28:22 +0200610 }
611
Victor Stinnere7e699e2019-11-20 12:08:13 +0100612 if (is_main_interp) {
613 if (!_PyContext_Init()) {
614 return _PyStatus_ERR("can't init context");
615 }
Victor Stinneref5aa9a2019-11-20 00:38:03 +0100616 }
617
Victor Stinner331a6a52019-05-27 16:39:22 +0200618 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100619}
620
621
Victor Stinner331a6a52019-05-27 16:39:22 +0200622static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200623pycore_init_builtins(PyThreadState *tstate)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100624{
Victor Stinnerb45d2592019-06-20 00:05:23 +0200625 PyObject *bimod = _PyBuiltin_Init(tstate);
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100626 if (bimod == NULL) {
Victor Stinner2582d462019-11-22 19:24:49 +0100627 goto error;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100628 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100629
Victor Stinner2582d462019-11-22 19:24:49 +0100630 PyInterpreterState *interp = tstate->interp;
631 if (_PyImport_FixupBuiltin(bimod, "builtins", interp->modules) < 0) {
632 goto error;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100633 }
Victor Stinner2582d462019-11-22 19:24:49 +0100634
635 PyObject *builtins_dict = PyModule_GetDict(bimod);
636 if (builtins_dict == NULL) {
637 goto error;
638 }
639 Py_INCREF(builtins_dict);
640 interp->builtins = builtins_dict;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100641
Victor Stinner331a6a52019-05-27 16:39:22 +0200642 PyStatus status = _PyBuiltins_AddExceptions(bimod);
643 if (_PyStatus_EXCEPTION(status)) {
644 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100645 }
Victor Stinner2582d462019-11-22 19:24:49 +0100646
647 interp->builtins_copy = PyDict_Copy(interp->builtins);
648 if (interp->builtins_copy == NULL) {
649 goto error;
650 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200651 return _PyStatus_OK();
Victor Stinner2582d462019-11-22 19:24:49 +0100652
653error:
654 return _PyStatus_ERR("can't initialize builtins module");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100655}
656
657
Victor Stinner331a6a52019-05-27 16:39:22 +0200658static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +0200659pycore_init_import_warnings(PyThreadState *tstate, PyObject *sysmod)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100660{
Victor Stinnerb45d2592019-06-20 00:05:23 +0200661 const PyConfig *config = &tstate->interp->config;
662
Victor Stinner2582d462019-11-22 19:24:49 +0100663 PyStatus status = _PyImportHooks_Init(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200664 if (_PyStatus_EXCEPTION(status)) {
665 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800666 }
Nick Coghland6009512014-11-20 21:39:37 +1000667
Victor Stinner2ec1a1b2019-11-22 21:54:33 +0100668 if (_Py_IsMainInterpreter(tstate)) {
669 /* Initialize _warnings. */
670 if (_PyWarnings_Init() == NULL) {
671 return _PyStatus_ERR("can't initialize warnings");
672 }
Nick Coghland6009512014-11-20 21:39:37 +1000673
Victor Stinner2ec1a1b2019-11-22 21:54:33 +0100674 if (config->_install_importlib) {
675 status = _PyConfig_WritePathConfig(config);
676 if (_PyStatus_EXCEPTION(status)) {
677 return status;
678 }
Victor Stinnerb1147e42018-07-21 02:06:16 +0200679 }
680 }
681
Eric Snow1abcf672017-05-23 21:46:51 -0700682 /* This call sets up builtin and frozen import support */
Victor Stinnerb45d2592019-06-20 00:05:23 +0200683 if (config->_install_importlib) {
684 status = init_importlib(tstate, sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200685 if (_PyStatus_EXCEPTION(status)) {
686 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800687 }
Eric Snow1abcf672017-05-23 21:46:51 -0700688 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200689 return _PyStatus_OK();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100690}
691
692
Victor Stinner331a6a52019-05-27 16:39:22 +0200693static PyStatus
694pyinit_config(_PyRuntimeState *runtime,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200695 PyThreadState **tstate_p,
Victor Stinner331a6a52019-05-27 16:39:22 +0200696 const PyConfig *config)
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100697{
Victor Stinner331a6a52019-05-27 16:39:22 +0200698 _PyConfig_Write(config, runtime);
Victor Stinner20004952019-03-26 02:31:11 +0100699
Victor Stinner331a6a52019-05-27 16:39:22 +0200700 PyStatus status = pycore_init_runtime(runtime, config);
701 if (_PyStatus_EXCEPTION(status)) {
702 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100703 }
704
Victor Stinnerb45d2592019-06-20 00:05:23 +0200705 PyThreadState *tstate;
706 status = pycore_create_interpreter(runtime, config, &tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200707 if (_PyStatus_EXCEPTION(status)) {
708 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100709 }
Victor Stinnerb45d2592019-06-20 00:05:23 +0200710 config = &tstate->interp->config;
711 *tstate_p = tstate;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100712
Victor Stinnerb93f31f2019-11-20 18:39:12 +0100713 status = pycore_init_types(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200714 if (_PyStatus_EXCEPTION(status)) {
715 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100716 }
717
718 PyObject *sysmod;
Victor Stinner01b1cc12019-11-20 02:27:56 +0100719 status = _PySys_Create(tstate, &sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200720 if (_PyStatus_EXCEPTION(status)) {
721 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100722 }
723
Victor Stinnerb45d2592019-06-20 00:05:23 +0200724 status = pycore_init_builtins(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +0200725 if (_PyStatus_EXCEPTION(status)) {
726 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100727 }
728
Victor Stinnerb45d2592019-06-20 00:05:23 +0200729 status = pycore_init_import_warnings(tstate, sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +0200730 if (_PyStatus_EXCEPTION(status)) {
731 return status;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100732 }
Eric Snow1abcf672017-05-23 21:46:51 -0700733
734 /* Only when we get here is the runtime core fully initialized */
Victor Stinner43125222019-04-24 18:23:53 +0200735 runtime->core_initialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200736 return _PyStatus_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700737}
738
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100739
Victor Stinner331a6a52019-05-27 16:39:22 +0200740PyStatus
741_Py_PreInitializeFromPyArgv(const PyPreConfig *src_config, const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100742{
Victor Stinner331a6a52019-05-27 16:39:22 +0200743 PyStatus status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100744
Victor Stinner6d1c4672019-05-20 11:02:00 +0200745 if (src_config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200746 return _PyStatus_ERR("preinitialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +0200747 }
748
Victor Stinner331a6a52019-05-27 16:39:22 +0200749 status = _PyRuntime_Initialize();
750 if (_PyStatus_EXCEPTION(status)) {
751 return status;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100752 }
Victor Stinner43125222019-04-24 18:23:53 +0200753 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100754
Victor Stinnerd3b90412019-09-17 23:59:51 +0200755 if (runtime->preinitialized) {
Victor Stinnerf72346c2019-03-25 17:54:58 +0100756 /* If it's already configured: ignored the new configuration */
Victor Stinner331a6a52019-05-27 16:39:22 +0200757 return _PyStatus_OK();
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100758 }
759
Victor Stinnerd3b90412019-09-17 23:59:51 +0200760 /* Note: preinitialized remains 1 on error, it is only set to 0
761 at exit on success. */
762 runtime->preinitializing = 1;
763
Victor Stinner331a6a52019-05-27 16:39:22 +0200764 PyPreConfig config;
Victor Stinner441b10c2019-09-28 04:28:35 +0200765
766 status = _PyPreConfig_InitFromPreConfig(&config, src_config);
767 if (_PyStatus_EXCEPTION(status)) {
768 return status;
769 }
Victor Stinnerf72346c2019-03-25 17:54:58 +0100770
Victor Stinner331a6a52019-05-27 16:39:22 +0200771 status = _PyPreConfig_Read(&config, args);
772 if (_PyStatus_EXCEPTION(status)) {
773 return status;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100774 }
775
Victor Stinner331a6a52019-05-27 16:39:22 +0200776 status = _PyPreConfig_Write(&config);
777 if (_PyStatus_EXCEPTION(status)) {
778 return status;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100779 }
780
Victor Stinnerd3b90412019-09-17 23:59:51 +0200781 runtime->preinitializing = 0;
782 runtime->preinitialized = 1;
Victor Stinner331a6a52019-05-27 16:39:22 +0200783 return _PyStatus_OK();
Victor Stinnerf72346c2019-03-25 17:54:58 +0100784}
785
Victor Stinner70005ac2019-05-02 15:25:34 -0400786
Victor Stinner331a6a52019-05-27 16:39:22 +0200787PyStatus
788Py_PreInitializeFromBytesArgs(const PyPreConfig *src_config, Py_ssize_t argc, char **argv)
Victor Stinnerf72346c2019-03-25 17:54:58 +0100789{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100790 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400791 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100792}
793
794
Victor Stinner331a6a52019-05-27 16:39:22 +0200795PyStatus
796Py_PreInitializeFromArgs(const PyPreConfig *src_config, Py_ssize_t argc, wchar_t **argv)
Victor Stinner20004952019-03-26 02:31:11 +0100797{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100798 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400799 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinner20004952019-03-26 02:31:11 +0100800}
801
802
Victor Stinner331a6a52019-05-27 16:39:22 +0200803PyStatus
804Py_PreInitialize(const PyPreConfig *src_config)
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100805{
Victor Stinner70005ac2019-05-02 15:25:34 -0400806 return _Py_PreInitializeFromPyArgv(src_config, NULL);
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100807}
808
809
Victor Stinner331a6a52019-05-27 16:39:22 +0200810PyStatus
811_Py_PreInitializeFromConfig(const PyConfig *config,
812 const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100813{
Victor Stinner331a6a52019-05-27 16:39:22 +0200814 assert(config != NULL);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200815
Victor Stinner331a6a52019-05-27 16:39:22 +0200816 PyStatus status = _PyRuntime_Initialize();
817 if (_PyStatus_EXCEPTION(status)) {
818 return status;
Victor Stinner6d1c4672019-05-20 11:02:00 +0200819 }
820 _PyRuntimeState *runtime = &_PyRuntime;
821
Victor Stinnerd3b90412019-09-17 23:59:51 +0200822 if (runtime->preinitialized) {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200823 /* Already initialized: do nothing */
Victor Stinner331a6a52019-05-27 16:39:22 +0200824 return _PyStatus_OK();
Victor Stinner70005ac2019-05-02 15:25:34 -0400825 }
Victor Stinnercab5d072019-05-17 19:01:14 +0200826
Victor Stinner331a6a52019-05-27 16:39:22 +0200827 PyPreConfig preconfig;
Victor Stinner441b10c2019-09-28 04:28:35 +0200828
Victor Stinner3c30a762019-10-01 10:56:37 +0200829 _PyPreConfig_InitFromConfig(&preconfig, config);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200830
Victor Stinner331a6a52019-05-27 16:39:22 +0200831 if (!config->parse_argv) {
832 return Py_PreInitialize(&preconfig);
Victor Stinner6d1c4672019-05-20 11:02:00 +0200833 }
834 else if (args == NULL) {
Victor Stinnercab5d072019-05-17 19:01:14 +0200835 _PyArgv config_args = {
836 .use_bytes_argv = 0,
Victor Stinner331a6a52019-05-27 16:39:22 +0200837 .argc = config->argv.length,
838 .wchar_argv = config->argv.items};
Victor Stinner6d1c4672019-05-20 11:02:00 +0200839 return _Py_PreInitializeFromPyArgv(&preconfig, &config_args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200840 }
841 else {
Victor Stinner6d1c4672019-05-20 11:02:00 +0200842 return _Py_PreInitializeFromPyArgv(&preconfig, args);
Victor Stinnercab5d072019-05-17 19:01:14 +0200843 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100844}
845
846
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100847/* Begin interpreter initialization
848 *
849 * On return, the first thread and interpreter state have been created,
850 * but the compiler, signal handling, multithreading and
851 * multiple interpreter support, and codec infrastructure are not yet
852 * available.
853 *
854 * The import system will support builtin and frozen modules only.
855 * The only supported io is writing to sys.stderr
856 *
857 * If any operation invoked by this function fails, a fatal error is
858 * issued and the function does not return.
859 *
860 * Any code invoked from this function should *not* assume it has access
861 * to the Python C API (unless the API is explicitly listed as being
862 * safe to call without calling Py_Initialize first)
863 */
Victor Stinner331a6a52019-05-27 16:39:22 +0200864static PyStatus
Victor Stinner5edcf262019-05-23 00:57:57 +0200865pyinit_core(_PyRuntimeState *runtime,
Victor Stinner331a6a52019-05-27 16:39:22 +0200866 const PyConfig *src_config,
Victor Stinnerb45d2592019-06-20 00:05:23 +0200867 PyThreadState **tstate_p)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200868{
Victor Stinner331a6a52019-05-27 16:39:22 +0200869 PyStatus status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200870
Victor Stinner331a6a52019-05-27 16:39:22 +0200871 status = _Py_PreInitializeFromConfig(src_config, NULL);
872 if (_PyStatus_EXCEPTION(status)) {
873 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200874 }
875
Victor Stinner331a6a52019-05-27 16:39:22 +0200876 PyConfig config;
Victor Stinner8462a492019-10-01 12:06:16 +0200877 _PyConfig_InitCompatConfig(&config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200878
Victor Stinner331a6a52019-05-27 16:39:22 +0200879 status = _PyConfig_Copy(&config, src_config);
880 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200881 goto done;
882 }
883
Victor Stinner331a6a52019-05-27 16:39:22 +0200884 status = PyConfig_Read(&config);
885 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200886 goto done;
887 }
888
889 if (!runtime->core_initialized) {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200890 status = pyinit_config(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200891 }
892 else {
Victor Stinnerb45d2592019-06-20 00:05:23 +0200893 status = pyinit_core_reconfigure(runtime, tstate_p, &config);
Victor Stinner5edcf262019-05-23 00:57:57 +0200894 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200895 if (_PyStatus_EXCEPTION(status)) {
Victor Stinner5edcf262019-05-23 00:57:57 +0200896 goto done;
897 }
898
899done:
Victor Stinner331a6a52019-05-27 16:39:22 +0200900 PyConfig_Clear(&config);
901 return status;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200902}
903
Victor Stinner5ac27a52019-03-27 13:40:14 +0100904
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200905/* Py_Initialize() has already been called: update the main interpreter
906 configuration. Example of bpo-34008: Py_Main() called after
907 Py_Initialize(). */
Victor Stinner331a6a52019-05-27 16:39:22 +0200908static PyStatus
Victor Stinnerb0051362019-11-22 17:52:42 +0100909_Py_ReconfigureMainInterpreter(PyThreadState *tstate)
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200910{
Victor Stinnerb0051362019-11-22 17:52:42 +0100911 PyConfig *config = &tstate->interp->config;
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100912
Victor Stinner331a6a52019-05-27 16:39:22 +0200913 PyObject *argv = _PyWideStringList_AsList(&config->argv);
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100914 if (argv == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200915 return _PyStatus_NO_MEMORY(); \
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100916 }
917
Victor Stinnerb0051362019-11-22 17:52:42 +0100918 int res = PyDict_SetItemString(tstate->interp->sysdict, "argv", argv);
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100919 Py_DECREF(argv);
920 if (res < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +0200921 return _PyStatus_ERR("fail to set sys.argv");
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200922 }
Victor Stinner331a6a52019-05-27 16:39:22 +0200923 return _PyStatus_OK();
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200924}
925
Victor Stinnerb0051362019-11-22 17:52:42 +0100926
927static PyStatus
928init_interp_main(PyThreadState *tstate)
929{
930 PyStatus status;
931 int is_main_interp = _Py_IsMainInterpreter(tstate);
932 PyInterpreterState *interp = tstate->interp;
933 PyConfig *config = &interp->config;
934
935 if (!config->_install_importlib) {
936 /* Special mode for freeze_importlib: run with no import system
937 *
938 * This means anything which needs support from extension modules
939 * or pure Python code in the standard library won't work.
940 */
941 if (is_main_interp) {
942 interp->runtime->initialized = 1;
943 }
944 return _PyStatus_OK();
945 }
946
947 if (is_main_interp) {
948 if (_PyTime_Init() < 0) {
949 return _PyStatus_ERR("can't initialize time");
950 }
951
952 if (_PySys_InitMain(tstate) < 0) {
953 return _PyStatus_ERR("can't finish initializing sys");
954 }
955 }
956
957 status = init_importlib_external(tstate);
958 if (_PyStatus_EXCEPTION(status)) {
959 return status;
960 }
961
962 if (is_main_interp) {
963 /* initialize the faulthandler module */
964 status = _PyFaulthandler_Init(config->faulthandler);
965 if (_PyStatus_EXCEPTION(status)) {
966 return status;
967 }
968 }
969
970 status = _PyUnicode_InitEncodings(tstate);
971 if (_PyStatus_EXCEPTION(status)) {
972 return status;
973 }
974
975 if (is_main_interp) {
976 if (config->install_signal_handlers) {
977 status = init_signals(tstate);
978 if (_PyStatus_EXCEPTION(status)) {
979 return status;
980 }
981 }
982
983 if (_PyTraceMalloc_Init(config->tracemalloc) < 0) {
984 return _PyStatus_ERR("can't initialize tracemalloc");
985 }
986 }
987
988 status = init_sys_streams(tstate);
989 if (_PyStatus_EXCEPTION(status)) {
990 return status;
991 }
992
993 status = init_set_builtins_open(tstate);
994 if (_PyStatus_EXCEPTION(status)) {
995 return status;
996 }
997
998 status = add_main_module(interp);
999 if (_PyStatus_EXCEPTION(status)) {
1000 return status;
1001 }
1002
1003 if (is_main_interp) {
1004 /* Initialize warnings. */
1005 PyObject *warnoptions = PySys_GetObject("warnoptions");
1006 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
1007 {
1008 PyObject *warnings_module = PyImport_ImportModule("warnings");
1009 if (warnings_module == NULL) {
1010 fprintf(stderr, "'import warnings' failed; traceback:\n");
1011 _PyErr_Print(tstate);
1012 }
1013 Py_XDECREF(warnings_module);
1014 }
1015
1016 interp->runtime->initialized = 1;
1017 }
1018
1019 if (config->site_import) {
1020 status = init_import_site();
1021 if (_PyStatus_EXCEPTION(status)) {
1022 return status;
1023 }
1024 }
1025
1026 if (is_main_interp) {
1027#ifndef MS_WINDOWS
1028 emit_stderr_warning_for_legacy_locale(interp->runtime);
1029#endif
1030 }
1031
1032 return _PyStatus_OK();
1033}
1034
1035
Eric Snowc7ec9982017-05-23 23:00:52 -07001036/* Update interpreter state based on supplied configuration settings
1037 *
1038 * After calling this function, most of the restrictions on the interpreter
1039 * are lifted. The only remaining incomplete settings are those related
1040 * to the main module (sys.argv[0], __main__ metadata)
1041 *
1042 * Calling this when the interpreter is not initializing, is already
1043 * initialized or without a valid current thread state is a fatal error.
1044 * Other errors should be reported as normal Python exceptions with a
1045 * non-zero return code.
1046 */
Victor Stinner331a6a52019-05-27 16:39:22 +02001047static PyStatus
Victor Stinner01b1cc12019-11-20 02:27:56 +01001048pyinit_main(PyThreadState *tstate)
Eric Snow1abcf672017-05-23 21:46:51 -07001049{
Victor Stinnerb0051362019-11-22 17:52:42 +01001050 PyInterpreterState *interp = tstate->interp;
1051 if (!interp->runtime->core_initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001052 return _PyStatus_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -07001053 }
Eric Snowc7ec9982017-05-23 23:00:52 -07001054
Victor Stinnerb0051362019-11-22 17:52:42 +01001055 if (interp->runtime->initialized) {
1056 return _Py_ReconfigureMainInterpreter(tstate);
Victor Stinnerfb47bca2018-07-20 17:34:23 +02001057 }
1058
Victor Stinnerb0051362019-11-22 17:52:42 +01001059 PyStatus status = init_interp_main(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001060 if (_PyStatus_EXCEPTION(status)) {
1061 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001062 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001063 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001064}
1065
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001066
Victor Stinner331a6a52019-05-27 16:39:22 +02001067PyStatus
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001068_Py_InitializeMain(void)
1069{
Victor Stinner331a6a52019-05-27 16:39:22 +02001070 PyStatus status = _PyRuntime_Initialize();
1071 if (_PyStatus_EXCEPTION(status)) {
1072 return status;
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001073 }
1074 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinnerb45d2592019-06-20 00:05:23 +02001075 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
Victor Stinner01b1cc12019-11-20 02:27:56 +01001076 return pyinit_main(tstate);
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001077}
1078
1079
Victor Stinner331a6a52019-05-27 16:39:22 +02001080PyStatus
1081Py_InitializeFromConfig(const PyConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -07001082{
Victor Stinner6d1c4672019-05-20 11:02:00 +02001083 if (config == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001084 return _PyStatus_ERR("initialization config is NULL");
Victor Stinner6d1c4672019-05-20 11:02:00 +02001085 }
1086
Victor Stinner331a6a52019-05-27 16:39:22 +02001087 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001088
Victor Stinner331a6a52019-05-27 16:39:22 +02001089 status = _PyRuntime_Initialize();
1090 if (_PyStatus_EXCEPTION(status)) {
1091 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001092 }
1093 _PyRuntimeState *runtime = &_PyRuntime;
1094
Victor Stinnerb45d2592019-06-20 00:05:23 +02001095 PyThreadState *tstate = NULL;
1096 status = pyinit_core(runtime, config, &tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001097 if (_PyStatus_EXCEPTION(status)) {
1098 return status;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001099 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001100 config = &tstate->interp->config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +01001101
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001102 if (config->_init_main) {
Victor Stinner01b1cc12019-11-20 02:27:56 +01001103 status = pyinit_main(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001104 if (_PyStatus_EXCEPTION(status)) {
1105 return status;
Victor Stinner484f20d2019-03-27 02:04:16 +01001106 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001107 }
Victor Stinner484f20d2019-03-27 02:04:16 +01001108
Victor Stinner331a6a52019-05-27 16:39:22 +02001109 return _PyStatus_OK();
Victor Stinner5ac27a52019-03-27 13:40:14 +01001110}
1111
1112
Eric Snow1abcf672017-05-23 21:46:51 -07001113void
Nick Coghland6009512014-11-20 21:39:37 +10001114Py_InitializeEx(int install_sigs)
1115{
Victor Stinner331a6a52019-05-27 16:39:22 +02001116 PyStatus status;
Victor Stinner43125222019-04-24 18:23:53 +02001117
Victor Stinner331a6a52019-05-27 16:39:22 +02001118 status = _PyRuntime_Initialize();
1119 if (_PyStatus_EXCEPTION(status)) {
1120 Py_ExitStatusException(status);
Victor Stinner43125222019-04-24 18:23:53 +02001121 }
1122 _PyRuntimeState *runtime = &_PyRuntime;
1123
1124 if (runtime->initialized) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001125 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
1126 return;
1127 }
1128
Victor Stinner331a6a52019-05-27 16:39:22 +02001129 PyConfig config;
Victor Stinner8462a492019-10-01 12:06:16 +02001130 _PyConfig_InitCompatConfig(&config);
Victor Stinner441b10c2019-09-28 04:28:35 +02001131
Victor Stinner1dc6e392018-07-25 02:49:17 +02001132 config.install_signal_handlers = install_sigs;
1133
Victor Stinner331a6a52019-05-27 16:39:22 +02001134 status = Py_InitializeFromConfig(&config);
1135 if (_PyStatus_EXCEPTION(status)) {
1136 Py_ExitStatusException(status);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001137 }
Nick Coghland6009512014-11-20 21:39:37 +10001138}
1139
1140void
1141Py_Initialize(void)
1142{
1143 Py_InitializeEx(1);
1144}
1145
1146
1147#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001148extern void _Py_dump_counts(FILE*);
Nick Coghland6009512014-11-20 21:39:37 +10001149#endif
1150
1151/* Flush stdout and stderr */
1152
1153static int
1154file_is_closed(PyObject *fobj)
1155{
1156 int r;
1157 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1158 if (tmp == NULL) {
1159 PyErr_Clear();
1160 return 0;
1161 }
1162 r = PyObject_IsTrue(tmp);
1163 Py_DECREF(tmp);
1164 if (r < 0)
1165 PyErr_Clear();
1166 return r > 0;
1167}
1168
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001169static int
Nick Coghland6009512014-11-20 21:39:37 +10001170flush_std_files(void)
1171{
1172 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1173 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1174 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001175 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001176
1177 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001178 tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001179 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001180 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001181 status = -1;
1182 }
Nick Coghland6009512014-11-20 21:39:37 +10001183 else
1184 Py_DECREF(tmp);
1185 }
1186
1187 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001188 tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001189 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001190 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001191 status = -1;
1192 }
Nick Coghland6009512014-11-20 21:39:37 +10001193 else
1194 Py_DECREF(tmp);
1195 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001196
1197 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001198}
1199
1200/* Undo the effect of Py_Initialize().
1201
1202 Beware: if multiple interpreter and/or thread states exist, these
1203 are not wiped out; only the current thread and interpreter state
1204 are deleted. But since everything else is deleted, those other
1205 interpreter and thread states should no longer be used.
1206
1207 (XXX We should do better, e.g. wipe out all interpreters and
1208 threads.)
1209
1210 Locking: as above.
1211
1212*/
1213
Victor Stinner7eee5be2019-11-20 10:38:34 +01001214
1215static void
1216finalize_interp_types(PyThreadState *tstate, int is_main_interp)
1217{
1218 if (is_main_interp) {
1219 /* Sundry finalizers */
Victor Stinner7eee5be2019-11-20 10:38:34 +01001220 _PyFrame_Fini();
Victor Stinner7eee5be2019-11-20 10:38:34 +01001221 _PyTuple_Fini();
1222 _PyList_Fini();
1223 _PySet_Fini();
1224 _PyBytes_Fini();
1225 _PyLong_Fini();
1226 _PyFloat_Fini();
1227 _PyDict_Fini();
1228 _PySlice_Fini();
1229 }
1230
1231 _PyWarnings_Fini(tstate->interp);
1232
1233 if (is_main_interp) {
1234 _Py_HashRandomization_Fini();
1235 _PyArg_Fini();
1236 _PyAsyncGen_Fini();
1237 _PyContext_Fini();
Victor Stinner3d483342019-11-22 12:27:50 +01001238 }
Victor Stinner7eee5be2019-11-20 10:38:34 +01001239
Victor Stinner3d483342019-11-22 12:27:50 +01001240 /* Cleanup Unicode implementation */
1241 _PyUnicode_Fini(tstate);
1242
1243 if (is_main_interp) {
Victor Stinner7eee5be2019-11-20 10:38:34 +01001244 _Py_ClearFileSystemEncoding();
1245 }
1246}
1247
1248
1249static void
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001250finalize_interp_clear(PyThreadState *tstate)
Victor Stinner7eee5be2019-11-20 10:38:34 +01001251{
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001252 int is_main_interp = _Py_IsMainInterpreter(tstate);
1253
Victor Stinner310e2d22019-11-22 10:58:00 +01001254 /* bpo-36854: Explicitly clear the codec registry
1255 and trigger a GC collection */
1256 PyInterpreterState *interp = tstate->interp;
1257 Py_CLEAR(interp->codec_search_path);
1258 Py_CLEAR(interp->codec_search_cache);
1259 Py_CLEAR(interp->codec_error_registry);
1260 _PyGC_CollectNoFail();
1261
Victor Stinner7eee5be2019-11-20 10:38:34 +01001262 /* Clear interpreter state and all thread states */
1263 PyInterpreterState_Clear(tstate->interp);
1264
1265 finalize_interp_types(tstate, is_main_interp);
1266
1267 if (is_main_interp) {
1268 /* XXX Still allocated:
1269 - various static ad-hoc pointers to interned strings
1270 - int and float free list blocks
1271 - whatever various modules and libraries allocate
1272 */
1273
1274 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1275
1276 _PyExc_Fini();
Victor Stinner7eee5be2019-11-20 10:38:34 +01001277 }
Victor Stinner72474072019-11-20 12:25:50 +01001278
1279 _PyGC_Fini(tstate);
Victor Stinner7eee5be2019-11-20 10:38:34 +01001280}
1281
1282
1283static void
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001284finalize_interp_delete(PyThreadState *tstate)
Victor Stinner7eee5be2019-11-20 10:38:34 +01001285{
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001286 if (_Py_IsMainInterpreter(tstate)) {
Victor Stinner7eee5be2019-11-20 10:38:34 +01001287 /* Cleanup auto-thread-state */
1288 _PyGILState_Fini(tstate);
1289 }
1290
Victor Stinner7eee5be2019-11-20 10:38:34 +01001291 PyInterpreterState_Delete(tstate->interp);
1292}
1293
1294
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001295int
1296Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001297{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001298 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001299
Victor Stinner8e91c242019-04-24 17:24:01 +02001300 _PyRuntimeState *runtime = &_PyRuntime;
1301 if (!runtime->initialized) {
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001302 return status;
Victor Stinner8e91c242019-04-24 17:24:01 +02001303 }
Nick Coghland6009512014-11-20 21:39:37 +10001304
Victor Stinnere225beb2019-06-03 18:14:24 +02001305 /* Get current thread state and interpreter pointer */
1306 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
1307 PyInterpreterState *interp = tstate->interp;
Victor Stinner8e91c242019-04-24 17:24:01 +02001308
Victor Stinnerb45d2592019-06-20 00:05:23 +02001309 // Wrap up existing "threading"-module-created, non-daemon threads.
1310 wait_for_thread_shutdown(tstate);
1311
1312 // Make any remaining pending calls.
1313 _Py_FinishPendingCalls(runtime);
1314
Nick Coghland6009512014-11-20 21:39:37 +10001315 /* The interpreter is still entirely intact at this point, and the
1316 * exit funcs may be relying on that. In particular, if some thread
1317 * or exit func is still waiting to do an import, the import machinery
1318 * expects Py_IsInitialized() to return true. So don't say the
Eric Snow842a2f02019-03-15 15:47:51 -06001319 * runtime is uninitialized until after the exit funcs have run.
Nick Coghland6009512014-11-20 21:39:37 +10001320 * Note that Threading.py uses an exit func to do a join on all the
1321 * threads created thru it, so this also protects pending imports in
1322 * the threads created via Threading.
1323 */
Nick Coghland6009512014-11-20 21:39:37 +10001324
Victor Stinnerb45d2592019-06-20 00:05:23 +02001325 call_py_exitfuncs(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001326
Victor Stinnerda273412017-12-15 01:46:02 +01001327 /* Copy the core config, PyInterpreterState_Delete() free
1328 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001329#ifdef Py_REF_DEBUG
Victor Stinner331a6a52019-05-27 16:39:22 +02001330 int show_ref_count = interp->config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001331#endif
1332#ifdef Py_TRACE_REFS
Victor Stinner331a6a52019-05-27 16:39:22 +02001333 int dump_refs = interp->config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001334#endif
1335#ifdef WITH_PYMALLOC
Victor Stinner331a6a52019-05-27 16:39:22 +02001336 int malloc_stats = interp->config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001337#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001338
Nick Coghland6009512014-11-20 21:39:37 +10001339 /* Remaining threads (e.g. daemon threads) will automatically exit
1340 after taking the GIL (in PyEval_RestoreThread()). */
Victor Stinner8e91c242019-04-24 17:24:01 +02001341 runtime->finalizing = tstate;
1342 runtime->initialized = 0;
1343 runtime->core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001344
Victor Stinnere0deff32015-03-24 13:46:18 +01001345 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001346 if (flush_std_files() < 0) {
1347 status = -1;
1348 }
Nick Coghland6009512014-11-20 21:39:37 +10001349
1350 /* Disable signal handling */
1351 PyOS_FiniInterrupts();
1352
1353 /* Collect garbage. This may call finalizers; it's nice to call these
1354 * before all modules are destroyed.
1355 * XXX If a __del__ or weakref callback is triggered here, and tries to
1356 * XXX import a module, bad things can happen, because Python no
1357 * XXX longer believes it's initialized.
1358 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1359 * XXX is easy to provoke that way. I've also seen, e.g.,
1360 * XXX Exception exceptions.ImportError: 'No module named sha'
1361 * XXX in <function callback at 0x008F5718> ignored
1362 * XXX but I'm unclear on exactly how that one happens. In any case,
1363 * XXX I haven't seen a real-life report of either of these.
1364 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001365 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001366#ifdef COUNT_ALLOCS
1367 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1368 each collection might release some types from the type
1369 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001370 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001371 /* nothing */;
1372#endif
Eric Snowdae02762017-09-14 00:35:58 -07001373
Steve Dowerb82e17e2019-05-23 08:45:22 -07001374 /* Clear all loghooks */
1375 /* We want minimal exposure of this function, so define the extern
1376 * here. The linker should discover the correct function without
1377 * exporting a symbol. */
1378 extern void _PySys_ClearAuditHooks(void);
1379 _PySys_ClearAuditHooks();
1380
Nick Coghland6009512014-11-20 21:39:37 +10001381 /* Destroy all modules */
Victor Stinner987a0dc2019-06-19 10:36:10 +02001382 _PyImport_Cleanup(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001383
Inada Naoki91234a12019-06-03 21:30:58 +09001384 /* Print debug stats if any */
1385 _PyEval_Fini();
1386
Victor Stinnere0deff32015-03-24 13:46:18 +01001387 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001388 if (flush_std_files() < 0) {
1389 status = -1;
1390 }
Nick Coghland6009512014-11-20 21:39:37 +10001391
1392 /* Collect final garbage. This disposes of cycles created by
1393 * class definitions, for example.
1394 * XXX This is disabled because it caused too many problems. If
1395 * XXX a __del__ or weakref callback triggers here, Python code has
1396 * XXX a hard time running, because even the sys module has been
1397 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1398 * XXX One symptom is a sequence of information-free messages
1399 * XXX coming from threads (if a __del__ or callback is invoked,
1400 * XXX other threads can execute too, and any exception they encounter
1401 * XXX triggers a comedy of errors as subsystem after subsystem
1402 * XXX fails to find what it *expects* to find in sys to help report
1403 * XXX the exception and consequent unexpected failures). I've also
1404 * XXX seen segfaults then, after adding print statements to the
1405 * XXX Python code getting called.
1406 */
1407#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001408 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001409#endif
1410
1411 /* Disable tracemalloc after all Python objects have been destroyed,
1412 so it is possible to use tracemalloc in objects destructor. */
1413 _PyTraceMalloc_Fini();
1414
1415 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1416 _PyImport_Fini();
1417
1418 /* Cleanup typeobject.c's internal caches. */
1419 _PyType_Fini();
1420
1421 /* unload faulthandler module */
1422 _PyFaulthandler_Fini();
1423
1424 /* Debugging stuff */
1425#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001426 _Py_dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001427#endif
1428 /* dump hash stats */
1429 _PyHash_Fini();
1430
Eric Snowdae02762017-09-14 00:35:58 -07001431#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001432 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001433 _PyDebug_PrintTotalRefs();
1434 }
Eric Snowdae02762017-09-14 00:35:58 -07001435#endif
Nick Coghland6009512014-11-20 21:39:37 +10001436
1437#ifdef Py_TRACE_REFS
1438 /* Display all objects still alive -- this can invoke arbitrary
1439 * __repr__ overrides, so requires a mostly-intact interpreter.
1440 * Alas, a lot of stuff may still be alive now that will be cleaned
1441 * up later.
1442 */
Victor Stinnerda273412017-12-15 01:46:02 +01001443 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001444 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001445 }
Nick Coghland6009512014-11-20 21:39:37 +10001446#endif /* Py_TRACE_REFS */
1447
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001448 finalize_interp_clear(tstate);
1449 finalize_interp_delete(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001450
1451#ifdef Py_TRACE_REFS
1452 /* Display addresses (& refcnts) of all objects still alive.
1453 * An address can be used to find the repr of the object, printed
1454 * above by _Py_PrintReferences.
1455 */
Victor Stinnerda273412017-12-15 01:46:02 +01001456 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001457 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001458 }
Nick Coghland6009512014-11-20 21:39:37 +10001459#endif /* Py_TRACE_REFS */
Victor Stinner34be807c2016-03-14 12:04:26 +01001460#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001461 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001462 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be807c2016-03-14 12:04:26 +01001463 }
Nick Coghland6009512014-11-20 21:39:37 +10001464#endif
1465
Victor Stinner8e91c242019-04-24 17:24:01 +02001466 call_ll_exitfuncs(runtime);
Victor Stinner9316ee42017-11-25 03:17:57 +01001467
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001468 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001469 return status;
1470}
1471
1472void
1473Py_Finalize(void)
1474{
1475 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001476}
1477
Victor Stinnerb0051362019-11-22 17:52:42 +01001478
Nick Coghland6009512014-11-20 21:39:37 +10001479/* Create and initialize a new interpreter and thread, and return the
1480 new thread. This requires that Py_Initialize() has been called
1481 first.
1482
1483 Unsuccessful initialization yields a NULL pointer. Note that *no*
1484 exception information is available even in this case -- the
1485 exception information is held in the thread, and there is no
1486 thread.
1487
1488 Locking: as above.
1489
1490*/
1491
Victor Stinner331a6a52019-05-27 16:39:22 +02001492static PyStatus
Victor Stinnera7368ac2017-11-15 18:11:45 -08001493new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001494{
Victor Stinner331a6a52019-05-27 16:39:22 +02001495 PyStatus status;
Nick Coghland6009512014-11-20 21:39:37 +10001496
Victor Stinner331a6a52019-05-27 16:39:22 +02001497 status = _PyRuntime_Initialize();
1498 if (_PyStatus_EXCEPTION(status)) {
1499 return status;
Victor Stinner43125222019-04-24 18:23:53 +02001500 }
1501 _PyRuntimeState *runtime = &_PyRuntime;
1502
1503 if (!runtime->initialized) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001504 return _PyStatus_ERR("Py_Initialize must be called first");
Victor Stinnera7368ac2017-11-15 18:11:45 -08001505 }
Nick Coghland6009512014-11-20 21:39:37 +10001506
Victor Stinner8a1be612016-03-14 22:07:55 +01001507 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1508 interpreters: disable PyGILState_Check(). */
1509 _PyGILState_check_enabled = 0;
1510
Victor Stinner43125222019-04-24 18:23:53 +02001511 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001512 if (interp == NULL) {
1513 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001514 return _PyStatus_OK();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001515 }
Nick Coghland6009512014-11-20 21:39:37 +10001516
Victor Stinner43125222019-04-24 18:23:53 +02001517 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001518 if (tstate == NULL) {
1519 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001520 *tstate_p = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001521 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001522 }
1523
Victor Stinner43125222019-04-24 18:23:53 +02001524 PyThreadState *save_tstate = PyThreadState_Swap(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001525
Eric Snow1abcf672017-05-23 21:46:51 -07001526 /* Copy the current interpreter config into the new interpreter */
Victor Stinner331a6a52019-05-27 16:39:22 +02001527 PyConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001528 if (save_tstate != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001529 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001530 } else {
1531 /* No current thread state, copy from the main interpreter */
1532 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinner331a6a52019-05-27 16:39:22 +02001533 config = &main_interp->config;
Victor Stinnerda273412017-12-15 01:46:02 +01001534 }
1535
Victor Stinner331a6a52019-05-27 16:39:22 +02001536 status = _PyConfig_Copy(&interp->config, config);
1537 if (_PyStatus_EXCEPTION(status)) {
Victor Stinnerb0051362019-11-22 17:52:42 +01001538 goto done;
Victor Stinnerda273412017-12-15 01:46:02 +01001539 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001540 config = &interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001541
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001542 status = pycore_init_types(tstate);
Victor Stinneref9d9b62019-05-22 11:28:22 +02001543
Nick Coghland6009512014-11-20 21:39:37 +10001544 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001545 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001546 if (modules == NULL) {
Victor Stinnerb0051362019-11-22 17:52:42 +01001547 status = _PyStatus_ERR("can't make modules dictionary");
1548 goto done;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001549 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001550 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001551
Victor Stinner0a28f8d2019-06-19 02:54:39 +02001552 PyObject *sysmod = _PyImport_FindBuiltin(tstate, "sys");
Eric Snowd393c1b2017-09-14 12:18:12 -06001553 if (sysmod != NULL) {
1554 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinner43125222019-04-24 18:23:53 +02001555 if (interp->sysdict == NULL) {
Victor Stinnerb0051362019-11-22 17:52:42 +01001556 goto handle_exc;
Victor Stinner43125222019-04-24 18:23:53 +02001557 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001558 Py_INCREF(interp->sysdict);
1559 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner01b1cc12019-11-20 02:27:56 +01001560 if (_PySys_InitMain(tstate) < 0) {
Victor Stinnerb0051362019-11-22 17:52:42 +01001561 status = _PyStatus_ERR("can't finish initializing sys");
1562 goto done;
Victor Stinnerab672812019-01-23 15:04:40 +01001563 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001564 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02001565 else if (_PyErr_Occurred(tstate)) {
Victor Stinnerb0051362019-11-22 17:52:42 +01001566 goto handle_exc;
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001567 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001568
Victor Stinner2582d462019-11-22 19:24:49 +01001569 status = pycore_init_builtins(tstate);
1570 if (_PyStatus_EXCEPTION(status)) {
1571 goto done;
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001572 }
Nick Coghland6009512014-11-20 21:39:37 +10001573
Victor Stinner2582d462019-11-22 19:24:49 +01001574 if (sysmod != NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001575 status = _PySys_SetPreliminaryStderr(interp->sysdict);
1576 if (_PyStatus_EXCEPTION(status)) {
Victor Stinnerb0051362019-11-22 17:52:42 +01001577 goto done;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001578 }
Nick Coghland6009512014-11-20 21:39:37 +10001579
Victor Stinner2ec1a1b2019-11-22 21:54:33 +01001580 status = pycore_init_import_warnings(tstate, sysmod);
Victor Stinner331a6a52019-05-27 16:39:22 +02001581 if (_PyStatus_EXCEPTION(status)) {
Victor Stinnerb0051362019-11-22 17:52:42 +01001582 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001583 }
Nick Coghland6009512014-11-20 21:39:37 +10001584
Victor Stinnerb0051362019-11-22 17:52:42 +01001585 status = init_interp_main(tstate);
Victor Stinner331a6a52019-05-27 16:39:22 +02001586 if (_PyStatus_EXCEPTION(status)) {
Victor Stinnerb0051362019-11-22 17:52:42 +01001587 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001588 }
Nick Coghland6009512014-11-20 21:39:37 +10001589 }
1590
Victor Stinnerb45d2592019-06-20 00:05:23 +02001591 if (_PyErr_Occurred(tstate)) {
Victor Stinnerb0051362019-11-22 17:52:42 +01001592 goto handle_exc;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001593 }
Nick Coghland6009512014-11-20 21:39:37 +10001594
Victor Stinnera7368ac2017-11-15 18:11:45 -08001595 *tstate_p = tstate;
Victor Stinner331a6a52019-05-27 16:39:22 +02001596 return _PyStatus_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001597
Victor Stinnerb0051362019-11-22 17:52:42 +01001598handle_exc:
1599 status = _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001600
Victor Stinnerb0051362019-11-22 17:52:42 +01001601done:
1602 *tstate_p = NULL;
1603
1604 /* Oops, it didn't work. Undo it all. */
Nick Coghland6009512014-11-20 21:39:37 +10001605 PyErr_PrintEx(0);
1606 PyThreadState_Clear(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001607 PyThreadState_Delete(tstate);
1608 PyInterpreterState_Delete(interp);
Victor Stinner9da74302019-11-20 11:17:17 +01001609 PyThreadState_Swap(save_tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001610
Victor Stinnerb0051362019-11-22 17:52:42 +01001611 return status;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001612}
1613
1614PyThreadState *
1615Py_NewInterpreter(void)
1616{
Stéphane Wirtel9e06d2b2019-03-18 17:10:29 +01001617 PyThreadState *tstate = NULL;
Victor Stinner331a6a52019-05-27 16:39:22 +02001618 PyStatus status = new_interpreter(&tstate);
1619 if (_PyStatus_EXCEPTION(status)) {
1620 Py_ExitStatusException(status);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001621 }
1622 return tstate;
1623
Nick Coghland6009512014-11-20 21:39:37 +10001624}
1625
1626/* Delete an interpreter and its last thread. This requires that the
1627 given thread state is current, that the thread has no remaining
1628 frames, and that it is its interpreter's only remaining thread.
1629 It is a fatal error to violate these constraints.
1630
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001631 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001632 everything, regardless.)
1633
1634 Locking: as above.
1635
1636*/
1637
1638void
1639Py_EndInterpreter(PyThreadState *tstate)
1640{
1641 PyInterpreterState *interp = tstate->interp;
1642
Victor Stinnerb45d2592019-06-20 00:05:23 +02001643 if (tstate != _PyThreadState_GET()) {
Nick Coghland6009512014-11-20 21:39:37 +10001644 Py_FatalError("Py_EndInterpreter: thread is not current");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001645 }
1646 if (tstate->frame != NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001647 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001648 }
Eric Snow5be45a62019-03-08 22:47:07 -07001649 interp->finalizing = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001650
Eric Snow842a2f02019-03-15 15:47:51 -06001651 // Wrap up existing "threading"-module-created, non-daemon threads.
Victor Stinnerb45d2592019-06-20 00:05:23 +02001652 wait_for_thread_shutdown(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001653
Victor Stinnerb45d2592019-06-20 00:05:23 +02001654 call_py_exitfuncs(tstate);
Marcel Plch776407f2017-12-20 11:17:58 +01001655
Victor Stinnerb45d2592019-06-20 00:05:23 +02001656 if (tstate != interp->tstate_head || tstate->next != NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001657 Py_FatalError("Py_EndInterpreter: not the last thread");
Victor Stinnerb45d2592019-06-20 00:05:23 +02001658 }
Nick Coghland6009512014-11-20 21:39:37 +10001659
Victor Stinner987a0dc2019-06-19 10:36:10 +02001660 _PyImport_Cleanup(tstate);
Victor Stinnerb93f31f2019-11-20 18:39:12 +01001661 finalize_interp_clear(tstate);
1662 finalize_interp_delete(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001663}
1664
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001665/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001666
Victor Stinner331a6a52019-05-27 16:39:22 +02001667static PyStatus
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001668add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001669{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001670 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001671 m = PyImport_AddModule("__main__");
1672 if (m == NULL)
Victor Stinner331a6a52019-05-27 16:39:22 +02001673 return _PyStatus_ERR("can't create __main__ module");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001674
Nick Coghland6009512014-11-20 21:39:37 +10001675 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001676 ann_dict = PyDict_New();
1677 if ((ann_dict == NULL) ||
1678 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001679 return _PyStatus_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001680 }
1681 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001682
Nick Coghland6009512014-11-20 21:39:37 +10001683 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1684 PyObject *bimod = PyImport_ImportModule("builtins");
1685 if (bimod == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001686 return _PyStatus_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001687 }
1688 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001689 return _PyStatus_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001690 }
1691 Py_DECREF(bimod);
1692 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001693
Nick Coghland6009512014-11-20 21:39:37 +10001694 /* Main is a little special - imp.is_builtin("__main__") will return
1695 * False, but BuiltinImporter is still the most appropriate initial
1696 * setting for its __loader__ attribute. A more suitable value will
1697 * be set if __main__ gets further initialized later in the startup
1698 * process.
1699 */
1700 loader = PyDict_GetItemString(d, "__loader__");
1701 if (loader == NULL || loader == Py_None) {
1702 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1703 "BuiltinImporter");
1704 if (loader == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001705 return _PyStatus_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001706 }
1707 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001708 return _PyStatus_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001709 }
1710 Py_DECREF(loader);
1711 }
Victor Stinner331a6a52019-05-27 16:39:22 +02001712 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001713}
1714
Nick Coghland6009512014-11-20 21:39:37 +10001715/* Import the site module (not into __main__ though) */
1716
Victor Stinner331a6a52019-05-27 16:39:22 +02001717static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001718init_import_site(void)
Nick Coghland6009512014-11-20 21:39:37 +10001719{
1720 PyObject *m;
1721 m = PyImport_ImportModule("site");
1722 if (m == NULL) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001723 return _PyStatus_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001724 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001725 Py_DECREF(m);
Victor Stinner331a6a52019-05-27 16:39:22 +02001726 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001727}
1728
Victor Stinner874dbe82015-09-04 17:29:57 +02001729/* Check if a file descriptor is valid or not.
1730 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1731static int
1732is_valid_fd(int fd)
1733{
Victor Stinner3092d6b2019-04-17 18:09:12 +02001734/* dup() is faster than fstat(): fstat() can require input/output operations,
1735 whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python
1736 startup. Problem: dup() doesn't check if the file descriptor is valid on
1737 some platforms.
1738
1739 bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other
1740 side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with
1741 EBADF. FreeBSD has similar issue (bpo-32849).
1742
1743 Only use dup() on platforms where dup() is enough to detect invalid FD in
1744 corner cases: on Linux and Windows (bpo-32849). */
1745#if defined(__linux__) || defined(MS_WINDOWS)
1746 if (fd < 0) {
1747 return 0;
1748 }
1749 int fd2;
1750
1751 _Py_BEGIN_SUPPRESS_IPH
1752 fd2 = dup(fd);
1753 if (fd2 >= 0) {
1754 close(fd2);
1755 }
1756 _Py_END_SUPPRESS_IPH
1757
1758 return (fd2 >= 0);
1759#else
Victor Stinner1c4670e2017-05-04 00:45:56 +02001760 struct stat st;
1761 return (fstat(fd, &st) == 0);
Victor Stinner1c4670e2017-05-04 00:45:56 +02001762#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001763}
1764
1765/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001766static PyObject*
Victor Stinner331a6a52019-05-27 16:39:22 +02001767create_stdio(const PyConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001768 int fd, int write_mode, const char* name,
Victor Stinner709d23d2019-05-02 14:56:30 -04001769 const wchar_t* encoding, const wchar_t* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001770{
1771 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1772 const char* mode;
1773 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001774 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001775 int buffering, isatty;
1776 _Py_IDENTIFIER(open);
1777 _Py_IDENTIFIER(isatty);
1778 _Py_IDENTIFIER(TextIOWrapper);
1779 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001780 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001781
Victor Stinner874dbe82015-09-04 17:29:57 +02001782 if (!is_valid_fd(fd))
1783 Py_RETURN_NONE;
1784
Nick Coghland6009512014-11-20 21:39:37 +10001785 /* stdin is always opened in buffered mode, first because it shouldn't
1786 make a difference in common use cases, second because TextIOWrapper
1787 depends on the presence of a read1() method which only exists on
1788 buffered streams.
1789 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001790 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001791 buffering = 0;
1792 else
1793 buffering = -1;
1794 if (write_mode)
1795 mode = "wb";
1796 else
1797 mode = "rb";
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001798 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOO",
Nick Coghland6009512014-11-20 21:39:37 +10001799 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001800 Py_None, Py_None, /* encoding, errors */
Serhiy Storchaka1f21eaa2019-09-01 12:16:51 +03001801 Py_None, Py_False); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001802 if (buf == NULL)
1803 goto error;
1804
1805 if (buffering) {
1806 _Py_IDENTIFIER(raw);
1807 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1808 if (raw == NULL)
1809 goto error;
1810 }
1811 else {
1812 raw = buf;
1813 Py_INCREF(raw);
1814 }
1815
Steve Dower39294992016-08-30 21:22:36 -07001816#ifdef MS_WINDOWS
1817 /* Windows console IO is always UTF-8 encoded */
1818 if (PyWindowsConsoleIO_Check(raw))
Victor Stinner709d23d2019-05-02 14:56:30 -04001819 encoding = L"utf-8";
Steve Dower39294992016-08-30 21:22:36 -07001820#endif
1821
Nick Coghland6009512014-11-20 21:39:37 +10001822 text = PyUnicode_FromString(name);
1823 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1824 goto error;
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02001825 res = _PyObject_CallMethodIdNoArgs(raw, &PyId_isatty);
Nick Coghland6009512014-11-20 21:39:37 +10001826 if (res == NULL)
1827 goto error;
1828 isatty = PyObject_IsTrue(res);
1829 Py_DECREF(res);
1830 if (isatty == -1)
1831 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001832 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001833 write_through = Py_True;
1834 else
1835 write_through = Py_False;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001836 if (isatty && buffered_stdio)
Nick Coghland6009512014-11-20 21:39:37 +10001837 line_buffering = Py_True;
1838 else
1839 line_buffering = Py_False;
1840
1841 Py_CLEAR(raw);
1842 Py_CLEAR(text);
1843
1844#ifdef MS_WINDOWS
1845 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1846 newlines to "\n".
1847 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1848 newline = NULL;
1849#else
1850 /* sys.stdin: split lines at "\n".
1851 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1852 newline = "\n";
1853#endif
1854
Victor Stinner709d23d2019-05-02 14:56:30 -04001855 PyObject *encoding_str = PyUnicode_FromWideChar(encoding, -1);
1856 if (encoding_str == NULL) {
1857 Py_CLEAR(buf);
1858 goto error;
1859 }
1860
1861 PyObject *errors_str = PyUnicode_FromWideChar(errors, -1);
1862 if (errors_str == NULL) {
1863 Py_CLEAR(buf);
1864 Py_CLEAR(encoding_str);
1865 goto error;
1866 }
1867
1868 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OOOsOO",
1869 buf, encoding_str, errors_str,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001870 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001871 Py_CLEAR(buf);
Victor Stinner709d23d2019-05-02 14:56:30 -04001872 Py_CLEAR(encoding_str);
1873 Py_CLEAR(errors_str);
Nick Coghland6009512014-11-20 21:39:37 +10001874 if (stream == NULL)
1875 goto error;
1876
1877 if (write_mode)
1878 mode = "w";
1879 else
1880 mode = "r";
1881 text = PyUnicode_FromString(mode);
1882 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1883 goto error;
1884 Py_CLEAR(text);
1885 return stream;
1886
1887error:
1888 Py_XDECREF(buf);
1889 Py_XDECREF(stream);
1890 Py_XDECREF(text);
1891 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001892
Victor Stinner874dbe82015-09-04 17:29:57 +02001893 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1894 /* Issue #24891: the file descriptor was closed after the first
1895 is_valid_fd() check was called. Ignore the OSError and set the
1896 stream to None. */
1897 PyErr_Clear();
1898 Py_RETURN_NONE;
1899 }
1900 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001901}
1902
Victor Stinnere0c9ab82019-11-22 16:19:14 +01001903/* Set builtins.open to io.OpenWrapper */
1904static PyStatus
1905init_set_builtins_open(PyThreadState *tstate)
1906{
1907 PyObject *iomod = NULL, *wrapper;
1908 PyObject *bimod = NULL;
1909 PyStatus res = _PyStatus_OK();
1910
1911 if (!(iomod = PyImport_ImportModule("io"))) {
1912 goto error;
1913 }
1914
1915 if (!(bimod = PyImport_ImportModule("builtins"))) {
1916 goto error;
1917 }
1918
1919 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1920 goto error;
1921 }
1922
1923 /* Set builtins.open */
1924 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1925 Py_DECREF(wrapper);
1926 goto error;
1927 }
1928 Py_DECREF(wrapper);
1929 goto done;
1930
1931error:
1932 res = _PyStatus_ERR("can't initialize io.open");
1933
1934done:
1935 Py_XDECREF(bimod);
1936 Py_XDECREF(iomod);
1937 return res;
1938}
1939
1940
Nick Coghland6009512014-11-20 21:39:37 +10001941/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinner331a6a52019-05-27 16:39:22 +02001942static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02001943init_sys_streams(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10001944{
Victor Stinnere0c9ab82019-11-22 16:19:14 +01001945 PyObject *iomod = NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001946 PyObject *m;
1947 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001948 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001949 PyObject * encoding_attr;
Victor Stinner331a6a52019-05-27 16:39:22 +02001950 PyStatus res = _PyStatus_OK();
Victor Stinnerb45d2592019-06-20 00:05:23 +02001951 const PyConfig *config = &tstate->interp->config;
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001952
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001953 /* Check that stdin is not a directory
1954 Using shell redirection, you can redirect stdin to a directory,
1955 crashing the Python interpreter. Catch this common mistake here
1956 and output a useful error message. Note that under MS Windows,
1957 the shell already prevents that. */
1958#ifndef MS_WINDOWS
1959 struct _Py_stat_struct sb;
1960 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1961 S_ISDIR(sb.st_mode)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02001962 return _PyStatus_ERR("<stdin> is a directory, cannot continue");
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001963 }
1964#endif
1965
Nick Coghland6009512014-11-20 21:39:37 +10001966 /* Hack to avoid a nasty recursion issue when Python is invoked
1967 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1968 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1969 goto error;
1970 }
1971 Py_DECREF(m);
1972
1973 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1974 goto error;
1975 }
1976 Py_DECREF(m);
1977
Nick Coghland6009512014-11-20 21:39:37 +10001978 if (!(iomod = PyImport_ImportModule("io"))) {
1979 goto error;
1980 }
Nick Coghland6009512014-11-20 21:39:37 +10001981
Nick Coghland6009512014-11-20 21:39:37 +10001982 /* Set sys.stdin */
1983 fd = fileno(stdin);
1984 /* Under some conditions stdin, stdout and stderr may not be connected
1985 * and fileno() may point to an invalid file descriptor. For example
1986 * GUI apps don't have valid standard streams by default.
1987 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001988 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001989 config->stdio_encoding,
1990 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001991 if (std == NULL)
1992 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001993 PySys_SetObject("__stdin__", std);
1994 _PySys_SetObjectId(&PyId_stdin, std);
1995 Py_DECREF(std);
1996
1997 /* Set sys.stdout */
1998 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001999 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02002000 config->stdio_encoding,
2001 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02002002 if (std == NULL)
2003 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10002004 PySys_SetObject("__stdout__", std);
2005 _PySys_SetObjectId(&PyId_stdout, std);
2006 Py_DECREF(std);
2007
2008#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
2009 /* Set sys.stderr, replaces the preliminary stderr */
2010 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02002011 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02002012 config->stdio_encoding,
Victor Stinner709d23d2019-05-02 14:56:30 -04002013 L"backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02002014 if (std == NULL)
2015 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10002016
2017 /* Same as hack above, pre-import stderr's codec to avoid recursion
2018 when import.c tries to write to stderr in verbose mode. */
2019 encoding_attr = PyObject_GetAttrString(std, "encoding");
2020 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02002021 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10002022 if (std_encoding != NULL) {
2023 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
2024 Py_XDECREF(codec_info);
2025 }
2026 Py_DECREF(encoding_attr);
2027 }
Victor Stinnerb45d2592019-06-20 00:05:23 +02002028 _PyErr_Clear(tstate); /* Not a fatal error if codec isn't available */
Nick Coghland6009512014-11-20 21:39:37 +10002029
2030 if (PySys_SetObject("__stderr__", std) < 0) {
2031 Py_DECREF(std);
2032 goto error;
2033 }
2034 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
2035 Py_DECREF(std);
2036 goto error;
2037 }
2038 Py_DECREF(std);
2039#endif
2040
Victor Stinnera7368ac2017-11-15 18:11:45 -08002041 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10002042
Victor Stinnera7368ac2017-11-15 18:11:45 -08002043error:
Victor Stinner331a6a52019-05-27 16:39:22 +02002044 res = _PyStatus_ERR("can't initialize sys standard streams");
Victor Stinnera7368ac2017-11-15 18:11:45 -08002045
2046done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02002047 _Py_ClearStandardStreamEncoding();
Nick Coghland6009512014-11-20 21:39:37 +10002048 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08002049 return res;
Nick Coghland6009512014-11-20 21:39:37 +10002050}
2051
2052
Victor Stinner10dc4842015-03-24 12:01:30 +01002053static void
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002054_Py_FatalError_DumpTracebacks(int fd, PyInterpreterState *interp,
2055 PyThreadState *tstate)
Victor Stinner10dc4842015-03-24 12:01:30 +01002056{
Victor Stinner10dc4842015-03-24 12:01:30 +01002057 fputc('\n', stderr);
2058 fflush(stderr);
2059
2060 /* display the current Python stack */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002061 _Py_DumpTracebackThreads(fd, interp, tstate);
Victor Stinner10dc4842015-03-24 12:01:30 +01002062}
Victor Stinner791da1c2016-03-14 16:53:12 +01002063
2064/* Print the current exception (if an exception is set) with its traceback,
2065 or display the current Python stack.
2066
2067 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
2068 called on catastrophic cases.
2069
2070 Return 1 if the traceback was displayed, 0 otherwise. */
2071
2072static int
2073_Py_FatalError_PrintExc(int fd)
2074{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002075 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner791da1c2016-03-14 16:53:12 +01002076 PyObject *ferr, *res;
2077 PyObject *exception, *v, *tb;
2078 int has_tb;
2079
Victor Stinnerb45d2592019-06-20 00:05:23 +02002080 _PyErr_Fetch(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002081 if (exception == NULL) {
2082 /* No current exception */
2083 return 0;
2084 }
2085
2086 ferr = _PySys_GetObjectId(&PyId_stderr);
2087 if (ferr == NULL || ferr == Py_None) {
2088 /* sys.stderr is not set yet or set to None,
2089 no need to try to display the exception */
2090 return 0;
2091 }
2092
Victor Stinnerb45d2592019-06-20 00:05:23 +02002093 _PyErr_NormalizeException(tstate, &exception, &v, &tb);
Victor Stinner791da1c2016-03-14 16:53:12 +01002094 if (tb == NULL) {
2095 tb = Py_None;
2096 Py_INCREF(tb);
2097 }
2098 PyException_SetTraceback(v, tb);
2099 if (exception == NULL) {
2100 /* PyErr_NormalizeException() failed */
2101 return 0;
2102 }
2103
2104 has_tb = (tb != Py_None);
2105 PyErr_Display(exception, v, tb);
2106 Py_XDECREF(exception);
2107 Py_XDECREF(v);
2108 Py_XDECREF(tb);
2109
2110 /* sys.stderr may be buffered: call sys.stderr.flush() */
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002111 res = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002112 if (res == NULL) {
2113 _PyErr_Clear(tstate);
2114 }
2115 else {
Victor Stinner791da1c2016-03-14 16:53:12 +01002116 Py_DECREF(res);
Victor Stinnerb45d2592019-06-20 00:05:23 +02002117 }
Victor Stinner791da1c2016-03-14 16:53:12 +01002118
2119 return has_tb;
2120}
2121
Nick Coghland6009512014-11-20 21:39:37 +10002122/* Print fatal error message and abort */
2123
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002124#ifdef MS_WINDOWS
2125static void
2126fatal_output_debug(const char *msg)
2127{
2128 /* buffer of 256 bytes allocated on the stack */
2129 WCHAR buffer[256 / sizeof(WCHAR)];
2130 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2131 size_t msglen;
2132
2133 OutputDebugStringW(L"Fatal Python error: ");
2134
2135 msglen = strlen(msg);
2136 while (msglen) {
2137 size_t i;
2138
2139 if (buflen > msglen) {
2140 buflen = msglen;
2141 }
2142
2143 /* Convert the message to wchar_t. This uses a simple one-to-one
2144 conversion, assuming that the this error message actually uses
2145 ASCII only. If this ceases to be true, we will have to convert. */
2146 for (i=0; i < buflen; ++i) {
2147 buffer[i] = msg[i];
2148 }
2149 buffer[i] = L'\0';
2150 OutputDebugStringW(buffer);
2151
2152 msg += buflen;
2153 msglen -= buflen;
2154 }
2155 OutputDebugStringW(L"\n");
2156}
2157#endif
2158
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002159
2160static void
2161fatal_error_dump_runtime(FILE *stream, _PyRuntimeState *runtime)
2162{
2163 fprintf(stream, "Python runtime state: ");
2164 if (runtime->finalizing) {
2165 fprintf(stream, "finalizing (tstate=%p)", runtime->finalizing);
2166 }
2167 else if (runtime->initialized) {
2168 fprintf(stream, "initialized");
2169 }
2170 else if (runtime->core_initialized) {
2171 fprintf(stream, "core initialized");
2172 }
2173 else if (runtime->preinitialized) {
2174 fprintf(stream, "preinitialized");
2175 }
2176 else if (runtime->preinitializing) {
2177 fprintf(stream, "preinitializing");
2178 }
2179 else {
2180 fprintf(stream, "unknown");
2181 }
2182 fprintf(stream, "\n");
2183 fflush(stream);
2184}
2185
2186
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002187static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002188fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002189{
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002190 FILE *stream = stderr;
2191 const int fd = fileno(stream);
Victor Stinner53345a42015-03-25 01:55:14 +01002192 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002193
2194 if (reentrant) {
2195 /* Py_FatalError() caused a second fatal error.
2196 Example: flush_std_files() raises a recursion error. */
2197 goto exit;
2198 }
2199 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002200
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002201 fprintf(stream, "Fatal Python error: ");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002202 if (prefix) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002203 fputs(prefix, stream);
2204 fputs(": ", stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002205 }
2206 if (msg) {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002207 fputs(msg, stream);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002208 }
2209 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002210 fprintf(stream, "<message not set>");
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002211 }
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002212 fputs("\n", stream);
2213 fflush(stream); /* it helps in Windows debug build */
2214
2215 _PyRuntimeState *runtime = &_PyRuntime;
2216 fatal_error_dump_runtime(stream, runtime);
2217
2218 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
2219 PyInterpreterState *interp = NULL;
2220 if (tstate != NULL) {
2221 interp = tstate->interp;
2222 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002223
Victor Stinner3a228ab2018-11-01 00:26:41 +01002224 /* Check if the current thread has a Python thread state
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002225 and holds the GIL.
Victor Stinner3a228ab2018-11-01 00:26:41 +01002226
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002227 tss_tstate is NULL if Py_FatalError() is called from a C thread which
2228 has no Python thread state.
2229
2230 tss_tstate != tstate if the current Python thread does not hold the GIL.
2231 */
2232 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2233 int has_tstate_and_gil = (tss_tstate != NULL && tss_tstate == tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002234 if (has_tstate_and_gil) {
2235 /* If an exception is set, print the exception with its traceback */
2236 if (!_Py_FatalError_PrintExc(fd)) {
2237 /* No exception is set, or an exception is set without traceback */
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002238 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner3a228ab2018-11-01 00:26:41 +01002239 }
2240 }
2241 else {
Victor Stinner1ce16fb2019-09-18 01:35:33 +02002242 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002243 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002244
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002245 /* The main purpose of faulthandler is to display the traceback.
2246 This function already did its best to display a traceback.
2247 Disable faulthandler to prevent writing a second traceback
2248 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002249 _PyFaulthandler_Fini();
2250
Victor Stinner791da1c2016-03-14 16:53:12 +01002251 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002252 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002253 /* Flush sys.stdout and sys.stderr */
2254 flush_std_files();
2255 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002256
Nick Coghland6009512014-11-20 21:39:37 +10002257#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002258 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002259#endif /* MS_WINDOWS */
2260
2261exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002262 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002263#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002264 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002265#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002266 abort();
2267 }
2268 else {
2269 exit(status);
2270 }
2271}
2272
Victor Stinner19760862017-12-20 01:41:59 +01002273void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002274Py_FatalError(const char *msg)
2275{
2276 fatal_error(NULL, msg, -1);
2277}
2278
Victor Stinner19760862017-12-20 01:41:59 +01002279void _Py_NO_RETURN
Victor Stinner331a6a52019-05-27 16:39:22 +02002280Py_ExitStatusException(PyStatus status)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002281{
Victor Stinner331a6a52019-05-27 16:39:22 +02002282 if (_PyStatus_IS_EXIT(status)) {
2283 exit(status.exitcode);
Victor Stinnerdbacfc22019-05-16 16:39:26 +02002284 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002285 else if (_PyStatus_IS_ERROR(status)) {
2286 fatal_error(status.func, status.err_msg, 1);
Victor Stinnerdfe88472019-03-01 12:14:41 +01002287 }
2288 else {
Victor Stinner331a6a52019-05-27 16:39:22 +02002289 Py_FatalError("Py_ExitStatusException() must not be called on success");
Victor Stinnerdfe88472019-03-01 12:14:41 +01002290 }
Nick Coghland6009512014-11-20 21:39:37 +10002291}
2292
2293/* Clean up and exit */
2294
Victor Stinnerd7292b52016-06-17 12:29:00 +02002295# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002296
Nick Coghland6009512014-11-20 21:39:37 +10002297/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002298void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002299{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002300 PyInterpreterState *is = _PyInterpreterState_GET_UNSAFE();
Marcel Plch776407f2017-12-20 11:17:58 +01002301
Antoine Pitroufc5db952017-12-13 02:29:07 +01002302 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002303 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2304
2305 is->pyexitfunc = func;
2306 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002307}
2308
2309static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002310call_py_exitfuncs(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002311{
Victor Stinnerb45d2592019-06-20 00:05:23 +02002312 PyInterpreterState *interp = tstate->interp;
2313 if (interp->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002314 return;
2315
Victor Stinnerb45d2592019-06-20 00:05:23 +02002316 (*interp->pyexitfunc)(interp->pyexitmodule);
2317 _PyErr_Clear(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10002318}
2319
2320/* Wait until threading._shutdown completes, provided
2321 the threading module was imported in the first place.
2322 The shutdown routine will wait until all non-daemon
2323 "threading" threads have completed. */
2324static void
Victor Stinnerb45d2592019-06-20 00:05:23 +02002325wait_for_thread_shutdown(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002326{
Nick Coghland6009512014-11-20 21:39:37 +10002327 _Py_IDENTIFIER(_shutdown);
2328 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002329 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002330 if (threading == NULL) {
Victor Stinnerb45d2592019-06-20 00:05:23 +02002331 if (_PyErr_Occurred(tstate)) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002332 PyErr_WriteUnraisable(NULL);
2333 }
2334 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002335 return;
2336 }
Jeroen Demeyer762f93f2019-07-08 10:19:25 +02002337 result = _PyObject_CallMethodIdNoArgs(threading, &PyId__shutdown);
Nick Coghland6009512014-11-20 21:39:37 +10002338 if (result == NULL) {
2339 PyErr_WriteUnraisable(threading);
2340 }
2341 else {
2342 Py_DECREF(result);
2343 }
2344 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002345}
2346
2347#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002348int Py_AtExit(void (*func)(void))
2349{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002350 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002351 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002352 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002353 return 0;
2354}
2355
2356static void
Victor Stinner8e91c242019-04-24 17:24:01 +02002357call_ll_exitfuncs(_PyRuntimeState *runtime)
Nick Coghland6009512014-11-20 21:39:37 +10002358{
Victor Stinner8e91c242019-04-24 17:24:01 +02002359 while (runtime->nexitfuncs > 0) {
Victor Stinner87d23a02019-04-26 05:49:26 +02002360 /* pop last function from the list */
2361 runtime->nexitfuncs--;
2362 void (*exitfunc)(void) = runtime->exitfuncs[runtime->nexitfuncs];
2363 runtime->exitfuncs[runtime->nexitfuncs] = NULL;
2364
2365 exitfunc();
Victor Stinner8e91c242019-04-24 17:24:01 +02002366 }
Nick Coghland6009512014-11-20 21:39:37 +10002367
2368 fflush(stdout);
2369 fflush(stderr);
2370}
2371
Victor Stinnercfc88312018-08-01 16:41:25 +02002372void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002373Py_Exit(int sts)
2374{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002375 if (Py_FinalizeEx() < 0) {
2376 sts = 120;
2377 }
Nick Coghland6009512014-11-20 21:39:37 +10002378
2379 exit(sts);
2380}
2381
Victor Stinner331a6a52019-05-27 16:39:22 +02002382static PyStatus
Victor Stinnerb45d2592019-06-20 00:05:23 +02002383init_signals(PyThreadState *tstate)
Nick Coghland6009512014-11-20 21:39:37 +10002384{
2385#ifdef SIGPIPE
2386 PyOS_setsig(SIGPIPE, SIG_IGN);
2387#endif
2388#ifdef SIGXFZ
2389 PyOS_setsig(SIGXFZ, SIG_IGN);
2390#endif
2391#ifdef SIGXFSZ
2392 PyOS_setsig(SIGXFSZ, SIG_IGN);
2393#endif
2394 PyOS_InitInterrupts(); /* May imply initsignal() */
Victor Stinnerb45d2592019-06-20 00:05:23 +02002395 if (_PyErr_Occurred(tstate)) {
Victor Stinner331a6a52019-05-27 16:39:22 +02002396 return _PyStatus_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002397 }
Victor Stinner331a6a52019-05-27 16:39:22 +02002398 return _PyStatus_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002399}
2400
2401
2402/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2403 *
2404 * All of the code in this function must only use async-signal-safe functions,
2405 * listed at `man 7 signal` or
2406 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2407 */
2408void
2409_Py_RestoreSignals(void)
2410{
2411#ifdef SIGPIPE
2412 PyOS_setsig(SIGPIPE, SIG_DFL);
2413#endif
2414#ifdef SIGXFZ
2415 PyOS_setsig(SIGXFZ, SIG_DFL);
2416#endif
2417#ifdef SIGXFSZ
2418 PyOS_setsig(SIGXFSZ, SIG_DFL);
2419#endif
2420}
2421
2422
2423/*
2424 * The file descriptor fd is considered ``interactive'' if either
2425 * a) isatty(fd) is TRUE, or
2426 * b) the -i flag was given, and the filename associated with
2427 * the descriptor is NULL or "<stdin>" or "???".
2428 */
2429int
2430Py_FdIsInteractive(FILE *fp, const char *filename)
2431{
2432 if (isatty((int)fileno(fp)))
2433 return 1;
2434 if (!Py_InteractiveFlag)
2435 return 0;
2436 return (filename == NULL) ||
2437 (strcmp(filename, "<stdin>") == 0) ||
2438 (strcmp(filename, "???") == 0);
2439}
2440
2441
Nick Coghland6009512014-11-20 21:39:37 +10002442/* Wrappers around sigaction() or signal(). */
2443
2444PyOS_sighandler_t
2445PyOS_getsig(int sig)
2446{
2447#ifdef HAVE_SIGACTION
2448 struct sigaction context;
2449 if (sigaction(sig, NULL, &context) == -1)
2450 return SIG_ERR;
2451 return context.sa_handler;
2452#else
2453 PyOS_sighandler_t handler;
2454/* Special signal handling for the secure CRT in Visual Studio 2005 */
2455#if defined(_MSC_VER) && _MSC_VER >= 1400
2456 switch (sig) {
2457 /* Only these signals are valid */
2458 case SIGINT:
2459 case SIGILL:
2460 case SIGFPE:
2461 case SIGSEGV:
2462 case SIGTERM:
2463 case SIGBREAK:
2464 case SIGABRT:
2465 break;
2466 /* Don't call signal() with other values or it will assert */
2467 default:
2468 return SIG_ERR;
2469 }
2470#endif /* _MSC_VER && _MSC_VER >= 1400 */
2471 handler = signal(sig, SIG_IGN);
2472 if (handler != SIG_ERR)
2473 signal(sig, handler);
2474 return handler;
2475#endif
2476}
2477
2478/*
2479 * All of the code in this function must only use async-signal-safe functions,
2480 * listed at `man 7 signal` or
2481 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2482 */
2483PyOS_sighandler_t
2484PyOS_setsig(int sig, PyOS_sighandler_t handler)
2485{
2486#ifdef HAVE_SIGACTION
2487 /* Some code in Modules/signalmodule.c depends on sigaction() being
2488 * used here if HAVE_SIGACTION is defined. Fix that if this code
2489 * changes to invalidate that assumption.
2490 */
2491 struct sigaction context, ocontext;
2492 context.sa_handler = handler;
2493 sigemptyset(&context.sa_mask);
2494 context.sa_flags = 0;
2495 if (sigaction(sig, &context, &ocontext) == -1)
2496 return SIG_ERR;
2497 return ocontext.sa_handler;
2498#else
2499 PyOS_sighandler_t oldhandler;
2500 oldhandler = signal(sig, handler);
2501#ifdef HAVE_SIGINTERRUPT
2502 siginterrupt(sig, 1);
2503#endif
2504 return oldhandler;
2505#endif
2506}
2507
2508#ifdef __cplusplus
2509}
2510#endif