blob: 522a4275a51d91c228b3f4c5f2ef5790b8804355 [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 Stinnerf684d832019-03-01 03:44:13 +01007#include "pycore_coreconfig.h"
Victor Stinner27e2d1f2018-11-01 00:52:28 +01008#include "pycore_context.h"
Victor Stinner353933e2018-11-23 13:08:26 +01009#include "pycore_fileutils.h"
Victor Stinner27e2d1f2018-11-01 00:52:28 +010010#include "pycore_hamt.h"
Victor Stinnera1c249c2018-11-01 03:15:58 +010011#include "pycore_pathconfig.h"
Victor Stinner621cebe2018-11-12 16:53:38 +010012#include "pycore_pylifecycle.h"
13#include "pycore_pymem.h"
14#include "pycore_pystate.h"
Nick Coghland6009512014-11-20 21:39:37 +100015#include "grammar.h"
16#include "node.h"
17#include "token.h"
18#include "parsetok.h"
19#include "errcode.h"
20#include "code.h"
21#include "symtable.h"
22#include "ast.h"
23#include "marshal.h"
24#include "osdefs.h"
25#include <locale.h>
26
27#ifdef HAVE_SIGNAL_H
28#include <signal.h>
29#endif
30
31#ifdef MS_WINDOWS
32#include "malloc.h" /* for alloca */
33#endif
34
35#ifdef HAVE_LANGINFO_H
36#include <langinfo.h>
37#endif
38
39#ifdef MS_WINDOWS
40#undef BYTE
41#include "windows.h"
Steve Dower39294992016-08-30 21:22:36 -070042
43extern PyTypeObject PyWindowsConsoleIO_Type;
44#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
Nick Coghland6009512014-11-20 21:39:37 +100045#endif
46
47_Py_IDENTIFIER(flush);
48_Py_IDENTIFIER(name);
49_Py_IDENTIFIER(stdin);
50_Py_IDENTIFIER(stdout);
51_Py_IDENTIFIER(stderr);
Eric Snow3f9eee62017-09-15 16:35:20 -060052_Py_IDENTIFIER(threading);
Nick Coghland6009512014-11-20 21:39:37 +100053
54#ifdef __cplusplus
55extern "C" {
56#endif
57
Nick Coghland6009512014-11-20 21:39:37 +100058extern grammar _PyParser_Grammar; /* From graminit.c */
59
60/* Forward */
Victor Stinnerf7e5b562017-11-15 15:48:08 -080061static _PyInitError add_main_module(PyInterpreterState *interp);
62static _PyInitError initfsencoding(PyInterpreterState *interp);
63static _PyInitError initsite(void);
Victor Stinner91106cd2017-12-13 12:29:09 +010064static _PyInitError init_sys_streams(PyInterpreterState *interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -080065static _PyInitError initsigs(void);
Marcel Plch776407f2017-12-20 11:17:58 +010066static void call_py_exitfuncs(PyInterpreterState *);
Nick Coghland6009512014-11-20 21:39:37 +100067static void wait_for_thread_shutdown(void);
68static void call_ll_exitfuncs(void);
Nick Coghland6009512014-11-20 21:39:37 +100069
Gregory P. Smith38f11cc2019-02-16 12:57:40 -080070int _Py_UnhandledKeyboardInterrupt = 0;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080071_PyRuntimeState _PyRuntime = _PyRuntimeState_INIT;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060072
Victor Stinnerf7e5b562017-11-15 15:48:08 -080073_PyInitError
Eric Snow2ebc5ce2017-09-07 23:51:28 -060074_PyRuntime_Initialize(void)
75{
76 /* XXX We only initialize once in the process, which aligns with
77 the static initialization of the former globals now found in
78 _PyRuntime. However, _PyRuntime *should* be initialized with
79 every Py_Initialize() call, but doing so breaks the runtime.
80 This is because the runtime state is not properly finalized
81 currently. */
82 static int initialized = 0;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080083 if (initialized) {
84 return _Py_INIT_OK();
85 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -060086 initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080087
88 return _PyRuntimeState_Init(&_PyRuntime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -060089}
90
91void
92_PyRuntime_Finalize(void)
93{
94 _PyRuntimeState_Fini(&_PyRuntime);
95}
96
97int
98_Py_IsFinalizing(void)
99{
100 return _PyRuntime.finalizing != NULL;
101}
102
Nick Coghland6009512014-11-20 21:39:37 +1000103/* Hack to force loading of object files */
104int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
105 PyOS_mystrnicmp; /* Python/pystrcmp.o */
106
107/* PyModule_GetWarningsModule is no longer necessary as of 2.6
108since _warnings is builtin. This API should not be used. */
109PyObject *
110PyModule_GetWarningsModule(void)
111{
112 return PyImport_ImportModule("warnings");
113}
114
Eric Snowc7ec9982017-05-23 23:00:52 -0700115
Eric Snow1abcf672017-05-23 21:46:51 -0700116/* APIs to access the initialization flags
117 *
118 * Can be called prior to Py_Initialize.
119 */
Nick Coghland6009512014-11-20 21:39:37 +1000120
Eric Snow1abcf672017-05-23 21:46:51 -0700121int
122_Py_IsCoreInitialized(void)
123{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600124 return _PyRuntime.core_initialized;
Eric Snow1abcf672017-05-23 21:46:51 -0700125}
Nick Coghland6009512014-11-20 21:39:37 +1000126
127int
128Py_IsInitialized(void)
129{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600130 return _PyRuntime.initialized;
Nick Coghland6009512014-11-20 21:39:37 +1000131}
132
Nick Coghlan6ea41862017-06-11 13:16:15 +1000133
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000134/* Global initializations. Can be undone by Py_FinalizeEx(). Don't
135 call this twice without an intervening Py_FinalizeEx() call. When
Nick Coghland6009512014-11-20 21:39:37 +1000136 initializations fail, a fatal error is issued and the function does
137 not return. On return, the first thread and interpreter state have
138 been created.
139
140 Locking: you must hold the interpreter lock while calling this.
141 (If the lock has not yet been initialized, that's equivalent to
142 having the lock, but you cannot use multiple threads.)
143
144*/
145
Nick Coghland6009512014-11-20 21:39:37 +1000146static char*
147get_codec_name(const char *encoding)
148{
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +0200149 const char *name_utf8;
150 char *name_str;
Nick Coghland6009512014-11-20 21:39:37 +1000151 PyObject *codec, *name = NULL;
152
153 codec = _PyCodec_Lookup(encoding);
154 if (!codec)
155 goto error;
156
157 name = _PyObject_GetAttrId(codec, &PyId_name);
158 Py_CLEAR(codec);
159 if (!name)
160 goto error;
161
Serhiy Storchaka06515832016-11-20 09:13:07 +0200162 name_utf8 = PyUnicode_AsUTF8(name);
Nick Coghland6009512014-11-20 21:39:37 +1000163 if (name_utf8 == NULL)
164 goto error;
165 name_str = _PyMem_RawStrdup(name_utf8);
166 Py_DECREF(name);
167 if (name_str == NULL) {
168 PyErr_NoMemory();
169 return NULL;
170 }
171 return name_str;
172
173error:
174 Py_XDECREF(codec);
175 Py_XDECREF(name);
176 return NULL;
177}
178
Nick Coghland6009512014-11-20 21:39:37 +1000179
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800180static _PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700181initimport(PyInterpreterState *interp, PyObject *sysmod)
Nick Coghland6009512014-11-20 21:39:37 +1000182{
183 PyObject *importlib;
184 PyObject *impmod;
Nick Coghland6009512014-11-20 21:39:37 +1000185 PyObject *value;
186
187 /* Import _importlib through its frozen version, _frozen_importlib. */
188 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800189 return _Py_INIT_ERR("can't import _frozen_importlib");
Nick Coghland6009512014-11-20 21:39:37 +1000190 }
191 else if (Py_VerboseFlag) {
192 PySys_FormatStderr("import _frozen_importlib # frozen\n");
193 }
194 importlib = PyImport_AddModule("_frozen_importlib");
195 if (importlib == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800196 return _Py_INIT_ERR("couldn't get _frozen_importlib from sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000197 }
198 interp->importlib = importlib;
199 Py_INCREF(interp->importlib);
200
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300201 interp->import_func = PyDict_GetItemString(interp->builtins, "__import__");
202 if (interp->import_func == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800203 return _Py_INIT_ERR("__import__ not found");
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300204 Py_INCREF(interp->import_func);
205
Victor Stinnercd6e6942015-09-18 09:11:57 +0200206 /* Import the _imp module */
Benjamin Petersonc65ef772018-01-29 11:33:57 -0800207 impmod = PyInit__imp();
Nick Coghland6009512014-11-20 21:39:37 +1000208 if (impmod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800209 return _Py_INIT_ERR("can't import _imp");
Nick Coghland6009512014-11-20 21:39:37 +1000210 }
211 else if (Py_VerboseFlag) {
Victor Stinnercd6e6942015-09-18 09:11:57 +0200212 PySys_FormatStderr("import _imp # builtin\n");
Nick Coghland6009512014-11-20 21:39:37 +1000213 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600214 if (_PyImport_SetModuleString("_imp", impmod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800215 return _Py_INIT_ERR("can't save _imp to sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000216 }
217
Victor Stinnercd6e6942015-09-18 09:11:57 +0200218 /* Install importlib as the implementation of import */
Nick Coghland6009512014-11-20 21:39:37 +1000219 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
220 if (value == NULL) {
221 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800222 return _Py_INIT_ERR("importlib install failed");
Nick Coghland6009512014-11-20 21:39:37 +1000223 }
224 Py_DECREF(value);
225 Py_DECREF(impmod);
226
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800227 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000228}
229
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800230static _PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700231initexternalimport(PyInterpreterState *interp)
232{
233 PyObject *value;
234 value = PyObject_CallMethod(interp->importlib,
235 "_install_external_importers", "");
236 if (value == NULL) {
237 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800238 return _Py_INIT_ERR("external importer setup failed");
Eric Snow1abcf672017-05-23 21:46:51 -0700239 }
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200240 Py_DECREF(value);
Serhiy Storchaka79d1c2e2018-09-18 22:22:29 +0300241 return _PyImportZip_Init();
Eric Snow1abcf672017-05-23 21:46:51 -0700242}
Nick Coghland6009512014-11-20 21:39:37 +1000243
Nick Coghlan6ea41862017-06-11 13:16:15 +1000244/* Helper functions to better handle the legacy C locale
245 *
246 * The legacy C locale assumes ASCII as the default text encoding, which
247 * causes problems not only for the CPython runtime, but also other
248 * components like GNU readline.
249 *
250 * Accordingly, when the CLI detects it, it attempts to coerce it to a
251 * more capable UTF-8 based alternative as follows:
252 *
253 * if (_Py_LegacyLocaleDetected()) {
254 * _Py_CoerceLegacyLocale();
255 * }
256 *
257 * See the documentation of the PYTHONCOERCECLOCALE setting for more details.
258 *
259 * Locale coercion also impacts the default error handler for the standard
260 * streams: while the usual default is "strict", the default for the legacy
261 * C locale and for any of the coercion target locales is "surrogateescape".
262 */
263
264int
265_Py_LegacyLocaleDetected(void)
266{
267#ifndef MS_WINDOWS
268 /* On non-Windows systems, the C locale is considered a legacy locale */
Nick Coghlaneb817952017-06-18 12:29:42 +1000269 /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat
270 * the POSIX locale as a simple alias for the C locale, so
271 * we may also want to check for that explicitly.
272 */
Nick Coghlan6ea41862017-06-11 13:16:15 +1000273 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
274 return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
275#else
276 /* Windows uses code pages instead of locales, so no locale is legacy */
277 return 0;
278#endif
279}
280
Nick Coghlaneb817952017-06-18 12:29:42 +1000281static const char *_C_LOCALE_WARNING =
282 "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
283 "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
284 "C.utf8, or UTF-8 (if available) as alternative Unicode-compatible "
285 "locales is recommended.\n";
286
Nick Coghlaneb817952017-06-18 12:29:42 +1000287static void
Victor Stinner94540602017-12-16 04:54:22 +0100288_emit_stderr_warning_for_legacy_locale(const _PyCoreConfig *core_config)
Nick Coghlaneb817952017-06-18 12:29:42 +1000289{
Victor Stinner5a02e0d2019-03-05 12:32:09 +0100290 if (core_config->preconfig.coerce_c_locale_warn && _Py_LegacyLocaleDetected()) {
Victor Stinnercf215042018-08-29 22:56:06 +0200291 PySys_FormatStderr("%s", _C_LOCALE_WARNING);
Nick Coghlaneb817952017-06-18 12:29:42 +1000292 }
293}
294
Nick Coghlan6ea41862017-06-11 13:16:15 +1000295typedef struct _CandidateLocale {
296 const char *locale_name; /* The locale to try as a coercion target */
297} _LocaleCoercionTarget;
298
299static _LocaleCoercionTarget _TARGET_LOCALES[] = {
300 {"C.UTF-8"},
301 {"C.utf8"},
Nick Coghlan18974c32017-06-30 00:48:14 +1000302 {"UTF-8"},
Nick Coghlan6ea41862017-06-11 13:16:15 +1000303 {NULL}
304};
305
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200306
307int
308_Py_IsLocaleCoercionTarget(const char *ctype_loc)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000309{
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200310 const _LocaleCoercionTarget *target = NULL;
311 for (target = _TARGET_LOCALES; target->locale_name; target++) {
312 if (strcmp(ctype_loc, target->locale_name) == 0) {
313 return 1;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000314 }
Victor Stinner124b9eb2018-08-29 01:29:06 +0200315 }
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200316 return 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000317}
318
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200319
Nick Coghlan6ea41862017-06-11 13:16:15 +1000320#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100321static const char C_LOCALE_COERCION_WARNING[] =
Nick Coghlan6ea41862017-06-11 13:16:15 +1000322 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale "
323 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n";
324
325static void
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200326_coerce_default_locale_settings(int warn, const _LocaleCoercionTarget *target)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000327{
328 const char *newloc = target->locale_name;
329
330 /* Reset locale back to currently configured defaults */
xdegaye1588be62017-11-12 12:45:59 +0100331 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000332
333 /* Set the relevant locale environment variable */
334 if (setenv("LC_CTYPE", newloc, 1)) {
335 fprintf(stderr,
336 "Error setting LC_CTYPE, skipping C locale coercion\n");
337 return;
338 }
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200339 if (warn) {
Victor Stinner94540602017-12-16 04:54:22 +0100340 fprintf(stderr, C_LOCALE_COERCION_WARNING, newloc);
Nick Coghlaneb817952017-06-18 12:29:42 +1000341 }
Nick Coghlan6ea41862017-06-11 13:16:15 +1000342
343 /* Reconfigure with the overridden environment variables */
xdegaye1588be62017-11-12 12:45:59 +0100344 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000345}
346#endif
347
348void
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200349_Py_CoerceLegacyLocale(int warn)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000350{
351#ifdef PY_COERCE_C_LOCALE
Victor Stinner8ea09112018-09-03 17:05:18 +0200352 char *oldloc = NULL;
353
354 oldloc = _PyMem_RawStrdup(setlocale(LC_CTYPE, NULL));
355 if (oldloc == NULL) {
356 return;
357 }
358
Victor Stinner94540602017-12-16 04:54:22 +0100359 const char *locale_override = getenv("LC_ALL");
360 if (locale_override == NULL || *locale_override == '\0') {
361 /* LC_ALL is also not set (or is set to an empty string) */
362 const _LocaleCoercionTarget *target = NULL;
363 for (target = _TARGET_LOCALES; target->locale_name; target++) {
364 const char *new_locale = setlocale(LC_CTYPE,
365 target->locale_name);
366 if (new_locale != NULL) {
xdegaye1588be62017-11-12 12:45:59 +0100367#if !defined(__APPLE__) && !defined(__ANDROID__) && \
Victor Stinner94540602017-12-16 04:54:22 +0100368defined(HAVE_LANGINFO_H) && defined(CODESET)
369 /* Also ensure that nl_langinfo works in this locale */
370 char *codeset = nl_langinfo(CODESET);
371 if (!codeset || *codeset == '\0') {
372 /* CODESET is not set or empty, so skip coercion */
373 new_locale = NULL;
374 _Py_SetLocaleFromEnv(LC_CTYPE);
375 continue;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000376 }
Victor Stinner94540602017-12-16 04:54:22 +0100377#endif
378 /* Successfully configured locale, so make it the default */
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200379 _coerce_default_locale_settings(warn, target);
Victor Stinner8ea09112018-09-03 17:05:18 +0200380 goto done;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000381 }
382 }
383 }
384 /* No C locale warning here, as Py_Initialize will emit one later */
Victor Stinner8ea09112018-09-03 17:05:18 +0200385
386 setlocale(LC_CTYPE, oldloc);
387
388done:
389 PyMem_RawFree(oldloc);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000390#endif
391}
392
xdegaye1588be62017-11-12 12:45:59 +0100393/* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to
394 * isolate the idiosyncrasies of different libc implementations. It reads the
395 * appropriate environment variable and uses its value to select the locale for
396 * 'category'. */
397char *
398_Py_SetLocaleFromEnv(int category)
399{
Victor Stinner353933e2018-11-23 13:08:26 +0100400 char *res;
xdegaye1588be62017-11-12 12:45:59 +0100401#ifdef __ANDROID__
402 const char *locale;
403 const char **pvar;
404#ifdef PY_COERCE_C_LOCALE
405 const char *coerce_c_locale;
406#endif
407 const char *utf8_locale = "C.UTF-8";
408 const char *env_var_set[] = {
409 "LC_ALL",
410 "LC_CTYPE",
411 "LANG",
412 NULL,
413 };
414
415 /* Android setlocale(category, "") doesn't check the environment variables
416 * and incorrectly sets the "C" locale at API 24 and older APIs. We only
417 * check the environment variables listed in env_var_set. */
418 for (pvar=env_var_set; *pvar; pvar++) {
419 locale = getenv(*pvar);
420 if (locale != NULL && *locale != '\0') {
421 if (strcmp(locale, utf8_locale) == 0 ||
422 strcmp(locale, "en_US.UTF-8") == 0) {
423 return setlocale(category, utf8_locale);
424 }
425 return setlocale(category, "C");
426 }
427 }
428
429 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
430 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
431 * Quote from POSIX section "8.2 Internationalization Variables":
432 * "4. If the LANG environment variable is not set or is set to the empty
433 * string, the implementation-defined default locale shall be used." */
434
435#ifdef PY_COERCE_C_LOCALE
436 coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
437 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
438 /* Some other ported code may check the environment variables (e.g. in
439 * extension modules), so we make sure that they match the locale
440 * configuration */
441 if (setenv("LC_CTYPE", utf8_locale, 1)) {
442 fprintf(stderr, "Warning: failed setting the LC_CTYPE "
443 "environment variable to %s\n", utf8_locale);
444 }
445 }
446#endif
Victor Stinner353933e2018-11-23 13:08:26 +0100447 res = setlocale(category, utf8_locale);
448#else /* !defined(__ANDROID__) */
449 res = setlocale(category, "");
450#endif
451 _Py_ResetForceASCII();
452 return res;
xdegaye1588be62017-11-12 12:45:59 +0100453}
454
Nick Coghlan6ea41862017-06-11 13:16:15 +1000455
Eric Snow1abcf672017-05-23 21:46:51 -0700456/* Global initializations. Can be undone by Py_Finalize(). Don't
457 call this twice without an intervening Py_Finalize() call.
458
Victor Stinner1dc6e392018-07-25 02:49:17 +0200459 Every call to _Py_InitializeCore, Py_Initialize or Py_InitializeEx
Eric Snow1abcf672017-05-23 21:46:51 -0700460 must have a corresponding call to Py_Finalize.
461
462 Locking: you must hold the interpreter lock while calling these APIs.
463 (If the lock has not yet been initialized, that's equivalent to
464 having the lock, but you cannot use multiple threads.)
465
466*/
467
Victor Stinner1dc6e392018-07-25 02:49:17 +0200468static _PyInitError
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100469_Py_Initialize_ReconfigureCore(PyInterpreterState **interp_p,
Victor Stinner1dc6e392018-07-25 02:49:17 +0200470 const _PyCoreConfig *core_config)
471{
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100472 PyThreadState *tstate = _PyThreadState_GET();
473 if (!tstate) {
474 return _Py_INIT_ERR("failed to read thread state");
475 }
476
477 PyInterpreterState *interp = tstate->interp;
478 if (interp == NULL) {
479 return _Py_INIT_ERR("can't make main interpreter");
480 }
481 *interp_p = interp;
482
Victor Stinner1dc6e392018-07-25 02:49:17 +0200483 _PyCoreConfig_SetGlobalConfig(core_config);
484
485 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
486 return _Py_INIT_ERR("failed to copy core config");
487 }
488 core_config = &interp->core_config;
489
490 if (core_config->_install_importlib) {
491 _PyInitError err = _PyCoreConfig_SetPathConfig(core_config);
492 if (_Py_INIT_FAILED(err)) {
493 return err;
494 }
495 }
496 return _Py_INIT_OK();
497}
498
499
Victor Stinner1dc6e392018-07-25 02:49:17 +0200500static _PyInitError
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100501pycore_init_runtime(const _PyCoreConfig *core_config)
Nick Coghland6009512014-11-20 21:39:37 +1000502{
Victor Stinner1dc6e392018-07-25 02:49:17 +0200503 if (_PyRuntime.initialized) {
504 return _Py_INIT_ERR("main interpreter already initialized");
505 }
Victor Stinnerda273412017-12-15 01:46:02 +0100506
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200507 _PyCoreConfig_SetGlobalConfig(core_config);
Nick Coghland6009512014-11-20 21:39:37 +1000508
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100509 _PyInitError err = _PyRuntime_Initialize();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800510 if (_Py_INIT_FAILED(err)) {
511 return err;
512 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600513
Eric Snow1abcf672017-05-23 21:46:51 -0700514 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
515 * threads behave a little more gracefully at interpreter shutdown.
516 * We clobber it here so the new interpreter can start with a clean
517 * slate.
518 *
519 * However, this may still lead to misbehaviour if there are daemon
520 * threads still hanging around from a previous Py_Initialize/Finalize
521 * pair :(
522 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600523 _PyRuntime.finalizing = NULL;
524
Victor Stinnerda273412017-12-15 01:46:02 +0100525 err = _Py_HashRandomization_Init(core_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800526 if (_Py_INIT_FAILED(err)) {
527 return err;
528 }
529
Victor Stinnera7368ac2017-11-15 18:11:45 -0800530 err = _PyInterpreterState_Enable(&_PyRuntime);
531 if (_Py_INIT_FAILED(err)) {
532 return err;
533 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100534 return _Py_INIT_OK();
535}
Victor Stinnera7368ac2017-11-15 18:11:45 -0800536
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100537
538static _PyInitError
539pycore_create_interpreter(const _PyCoreConfig *core_config,
540 PyInterpreterState **interp_p)
541{
542 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnerda273412017-12-15 01:46:02 +0100543 if (interp == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800544 return _Py_INIT_ERR("can't make main interpreter");
Victor Stinnerda273412017-12-15 01:46:02 +0100545 }
Victor Stinner1dc6e392018-07-25 02:49:17 +0200546 *interp_p = interp;
Victor Stinnerda273412017-12-15 01:46:02 +0100547
548 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
549 return _Py_INIT_ERR("failed to copy core config");
550 }
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200551 core_config = &interp->core_config;
Nick Coghland6009512014-11-20 21:39:37 +1000552
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200553 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +1000554 if (tstate == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800555 return _Py_INIT_ERR("can't make first thread");
Nick Coghland6009512014-11-20 21:39:37 +1000556 (void) PyThreadState_Swap(tstate);
557
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000558 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
Nick Coghland6009512014-11-20 21:39:37 +1000559 destroying the GIL might fail when it is being referenced from
560 another running thread (see issue #9901).
561 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000562 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Nick Coghland6009512014-11-20 21:39:37 +1000563 _PyEval_FiniThreads();
Victor Stinner2914bb32018-01-29 11:57:45 +0100564
Nick Coghland6009512014-11-20 21:39:37 +1000565 /* Auto-thread-state API */
566 _PyGILState_Init(interp, tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000567
Victor Stinner2914bb32018-01-29 11:57:45 +0100568 /* Create the GIL */
569 PyEval_InitThreads();
570
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100571 return _Py_INIT_OK();
572}
Nick Coghland6009512014-11-20 21:39:37 +1000573
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100574
575static _PyInitError
576pycore_init_types(void)
577{
Victor Stinnerab672812019-01-23 15:04:40 +0100578 _PyInitError err = _PyTypes_Init();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100579 if (_Py_INIT_FAILED(err)) {
580 return err;
581 }
582
583 err = _PyUnicode_Init();
584 if (_Py_INIT_FAILED(err)) {
585 return err;
586 }
587
588 if (_PyStructSequence_Init() < 0) {
589 return _Py_INIT_ERR("can't initialize structseq");
590 }
591
592 if (!_PyLong_Init()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800593 return _Py_INIT_ERR("can't init longs");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100594 }
Nick Coghland6009512014-11-20 21:39:37 +1000595
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100596 err = _PyExc_Init();
597 if (_Py_INIT_FAILED(err)) {
598 return err;
599 }
600
601 if (!_PyFloat_Init()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800602 return _Py_INIT_ERR("can't init float");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100603 }
Nick Coghland6009512014-11-20 21:39:37 +1000604
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100605 if (!_PyContext_Init()) {
606 return _Py_INIT_ERR("can't init context");
607 }
608 return _Py_INIT_OK();
609}
610
611
612static _PyInitError
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100613pycore_init_builtins(PyInterpreterState *interp)
614{
615 PyObject *bimod = _PyBuiltin_Init();
616 if (bimod == NULL) {
617 return _Py_INIT_ERR("can't initialize builtins modules");
618 }
619 _PyImport_FixupBuiltin(bimod, "builtins", interp->modules);
620
621 interp->builtins = PyModule_GetDict(bimod);
622 if (interp->builtins == NULL) {
623 return _Py_INIT_ERR("can't initialize builtins dict");
624 }
625 Py_INCREF(interp->builtins);
626
627 _PyInitError err = _PyBuiltins_AddExceptions(bimod);
628 if (_Py_INIT_FAILED(err)) {
629 return err;
630 }
631 return _Py_INIT_OK();
632}
633
634
635static _PyInitError
636pycore_init_import_warnings(PyInterpreterState *interp, PyObject *sysmod)
637{
638 _PyInitError err = _PyImport_Init(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800639 if (_Py_INIT_FAILED(err)) {
640 return err;
641 }
Nick Coghland6009512014-11-20 21:39:37 +1000642
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800643 err = _PyImportHooks_Init();
644 if (_Py_INIT_FAILED(err)) {
645 return err;
646 }
Nick Coghland6009512014-11-20 21:39:37 +1000647
648 /* Initialize _warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100649 if (_PyWarnings_Init() == NULL) {
Victor Stinner1f151112017-11-23 10:43:14 +0100650 return _Py_INIT_ERR("can't initialize warnings");
651 }
Nick Coghland6009512014-11-20 21:39:37 +1000652
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100653 if (interp->core_config._install_importlib) {
654 err = _PyCoreConfig_SetPathConfig(&interp->core_config);
Victor Stinnerb1147e42018-07-21 02:06:16 +0200655 if (_Py_INIT_FAILED(err)) {
656 return err;
657 }
658 }
659
Eric Snow1abcf672017-05-23 21:46:51 -0700660 /* This call sets up builtin and frozen import support */
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100661 if (interp->core_config._install_importlib) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800662 err = initimport(interp, sysmod);
663 if (_Py_INIT_FAILED(err)) {
664 return err;
665 }
Eric Snow1abcf672017-05-23 21:46:51 -0700666 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100667 return _Py_INIT_OK();
668}
669
670
671static _PyInitError
672_Py_InitializeCore_impl(PyInterpreterState **interp_p,
673 const _PyCoreConfig *core_config)
674{
675 PyInterpreterState *interp;
676
677 _PyInitError err = pycore_init_runtime(core_config);
678 if (_Py_INIT_FAILED(err)) {
679 return err;
680 }
681
682 err = pycore_create_interpreter(core_config, &interp);
683 if (_Py_INIT_FAILED(err)) {
684 return err;
685 }
686 core_config = &interp->core_config;
687 *interp_p = interp;
688
689 err = pycore_init_types();
690 if (_Py_INIT_FAILED(err)) {
691 return err;
692 }
693
694 PyObject *sysmod;
Victor Stinnerab672812019-01-23 15:04:40 +0100695 err = _PySys_Create(interp, &sysmod);
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100696 if (_Py_INIT_FAILED(err)) {
697 return err;
698 }
699
700 err = pycore_init_builtins(interp);
701 if (_Py_INIT_FAILED(err)) {
702 return err;
703 }
704
705 err = pycore_init_import_warnings(interp, sysmod);
706 if (_Py_INIT_FAILED(err)) {
707 return err;
708 }
Eric Snow1abcf672017-05-23 21:46:51 -0700709
710 /* Only when we get here is the runtime core fully initialized */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600711 _PyRuntime.core_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800712 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700713}
714
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100715
716static _PyInitError
717pyinit_preconfig(_PyPreConfig *preconfig, const _PyPreConfig *src_preconfig)
718{
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100719 /* Set LC_CTYPE to the user preferred locale */
720 _Py_SetLocaleFromEnv(LC_CTYPE);
721
Victor Stinnerc656e252019-03-06 01:13:43 +0100722 if (_PyPreConfig_Copy(preconfig, src_preconfig) < 0) {
723 return _Py_INIT_ERR("failed to copy pre config");
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100724 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100725
Victor Stinnerc656e252019-03-06 01:13:43 +0100726 _PyInitError err = _PyPreConfig_Read(preconfig);
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100727 if (_Py_INIT_FAILED(err)) {
728 return err;
729 }
730
731 return _PyPreConfig_Write(preconfig);
732}
733
734
735static _PyInitError
736pyinit_coreconfig(_PyCoreConfig *config, const _PyCoreConfig *src_config,
737 PyInterpreterState **interp_p)
738{
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100739
740 /* Set LC_CTYPE to the user preferred locale */
741 _Py_SetLocaleFromEnv(LC_CTYPE);
742
Victor Stinnerc656e252019-03-06 01:13:43 +0100743 if (_PyCoreConfig_Copy(config, src_config) < 0) {
744 return _Py_INIT_ERR("failed to copy core config");
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100745 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100746
Victor Stinnerc656e252019-03-06 01:13:43 +0100747 _PyInitError err = _PyCoreConfig_Read(config, NULL);
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100748 if (_Py_INIT_FAILED(err)) {
749 return err;
750 }
751
752 if (!_PyRuntime.core_initialized) {
753 return _Py_InitializeCore_impl(interp_p, config);
754 }
755 else {
756 return _Py_Initialize_ReconfigureCore(interp_p, config);
757 }
758}
759
760
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100761/* Begin interpreter initialization
762 *
763 * On return, the first thread and interpreter state have been created,
764 * but the compiler, signal handling, multithreading and
765 * multiple interpreter support, and codec infrastructure are not yet
766 * available.
767 *
768 * The import system will support builtin and frozen modules only.
769 * The only supported io is writing to sys.stderr
770 *
771 * If any operation invoked by this function fails, a fatal error is
772 * issued and the function does not return.
773 *
774 * Any code invoked from this function should *not* assume it has access
775 * to the Python C API (unless the API is explicitly listed as being
776 * safe to call without calling Py_Initialize first)
777 */
Victor Stinner1dc6e392018-07-25 02:49:17 +0200778_PyInitError
779_Py_InitializeCore(PyInterpreterState **interp_p,
780 const _PyCoreConfig *src_config)
781{
Victor Stinner1dc6e392018-07-25 02:49:17 +0200782 _PyInitError err;
783
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100784 assert(src_config != NULL);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200785
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100786 _PyCoreConfig local_config = _PyCoreConfig_INIT;
Victor Stinner2c8ddcf2018-08-29 00:16:53 +0200787
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100788 err = pyinit_preconfig(&local_config.preconfig, &src_config->preconfig);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200789 if (_Py_INIT_FAILED(err)) {
790 goto done;
791 }
792
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100793 err = pyinit_coreconfig(&local_config, src_config, interp_p);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200794
795done:
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100796 _PyCoreConfig_Clear(&local_config);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200797 return err;
798}
799
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200800/* Py_Initialize() has already been called: update the main interpreter
801 configuration. Example of bpo-34008: Py_Main() called after
802 Py_Initialize(). */
803static _PyInitError
804_Py_ReconfigureMainInterpreter(PyInterpreterState *interp,
805 const _PyMainInterpreterConfig *config)
806{
807 if (config->argv != NULL) {
808 int res = PyDict_SetItemString(interp->sysdict, "argv", config->argv);
809 if (res < 0) {
810 return _Py_INIT_ERR("fail to set sys.argv");
811 }
812 }
813 return _Py_INIT_OK();
814}
815
Eric Snowc7ec9982017-05-23 23:00:52 -0700816/* Update interpreter state based on supplied configuration settings
817 *
818 * After calling this function, most of the restrictions on the interpreter
819 * are lifted. The only remaining incomplete settings are those related
820 * to the main module (sys.argv[0], __main__ metadata)
821 *
822 * Calling this when the interpreter is not initializing, is already
823 * initialized or without a valid current thread state is a fatal error.
824 * Other errors should be reported as normal Python exceptions with a
825 * non-zero return code.
826 */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800827_PyInitError
Victor Stinner1dc6e392018-07-25 02:49:17 +0200828_Py_InitializeMainInterpreter(PyInterpreterState *interp,
829 const _PyMainInterpreterConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -0700830{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600831 if (!_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800832 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700833 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700834
Victor Stinner1dc6e392018-07-25 02:49:17 +0200835 /* Configure the main interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +0100836 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
837 return _Py_INIT_ERR("failed to copy main interpreter config");
838 }
Victor Stinner1dc6e392018-07-25 02:49:17 +0200839 config = &interp->config;
840 _PyCoreConfig *core_config = &interp->core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700841
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200842 if (_PyRuntime.initialized) {
843 return _Py_ReconfigureMainInterpreter(interp, config);
844 }
845
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200846 if (!core_config->_install_importlib) {
Eric Snow1abcf672017-05-23 21:46:51 -0700847 /* Special mode for freeze_importlib: run with no import system
848 *
849 * This means anything which needs support from extension modules
850 * or pure Python code in the standard library won't work.
851 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600852 _PyRuntime.initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800853 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700854 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100855
Victor Stinner33c377e2017-12-05 15:12:41 +0100856 if (_PyTime_Init() < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800857 return _Py_INIT_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100858 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200859
Victor Stinnerab672812019-01-23 15:04:40 +0100860 if (_PySys_InitMain(interp) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800861 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100862 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800863
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200864 _PyInitError err = initexternalimport(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800865 if (_Py_INIT_FAILED(err)) {
866 return err;
867 }
Nick Coghland6009512014-11-20 21:39:37 +1000868
869 /* initialize the faulthandler module */
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200870 err = _PyFaulthandler_Init(core_config->faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800871 if (_Py_INIT_FAILED(err)) {
872 return err;
873 }
Nick Coghland6009512014-11-20 21:39:37 +1000874
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800875 err = initfsencoding(interp);
876 if (_Py_INIT_FAILED(err)) {
877 return err;
878 }
Nick Coghland6009512014-11-20 21:39:37 +1000879
Victor Stinner1f151112017-11-23 10:43:14 +0100880 if (interp->config.install_signal_handlers) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800881 err = initsigs(); /* Signal handling stuff, including initintr() */
882 if (_Py_INIT_FAILED(err)) {
883 return err;
884 }
885 }
Nick Coghland6009512014-11-20 21:39:37 +1000886
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200887 if (_PyTraceMalloc_Init(core_config->tracemalloc) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800888 return _Py_INIT_ERR("can't initialize tracemalloc");
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200889 }
Nick Coghland6009512014-11-20 21:39:37 +1000890
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800891 err = add_main_module(interp);
892 if (_Py_INIT_FAILED(err)) {
893 return err;
894 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800895
Victor Stinner91106cd2017-12-13 12:29:09 +0100896 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -0800897 if (_Py_INIT_FAILED(err)) {
898 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800899 }
Nick Coghland6009512014-11-20 21:39:37 +1000900
901 /* Initialize warnings. */
Victor Stinner37cd9822018-11-16 11:55:35 +0100902 PyObject *warnoptions = PySys_GetObject("warnoptions");
903 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
Victor Stinner5d862462017-12-19 11:35:58 +0100904 {
Nick Coghland6009512014-11-20 21:39:37 +1000905 PyObject *warnings_module = PyImport_ImportModule("warnings");
906 if (warnings_module == NULL) {
907 fprintf(stderr, "'import warnings' failed; traceback:\n");
908 PyErr_Print();
909 }
910 Py_XDECREF(warnings_module);
911 }
912
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600913 _PyRuntime.initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700914
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200915 if (core_config->site_import) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800916 err = initsite(); /* Module site */
917 if (_Py_INIT_FAILED(err)) {
918 return err;
919 }
920 }
Victor Stinnercf215042018-08-29 22:56:06 +0200921
922#ifndef MS_WINDOWS
923 _emit_stderr_warning_for_legacy_locale(core_config);
924#endif
925
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800926 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000927}
928
Eric Snowc7ec9982017-05-23 23:00:52 -0700929#undef _INIT_DEBUG_PRINT
930
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800931_PyInitError
Victor Stinner1dc6e392018-07-25 02:49:17 +0200932_Py_InitializeFromConfig(const _PyCoreConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -0700933{
Benjamin Petersonacd282f2018-09-11 15:11:06 -0700934 PyInterpreterState *interp = NULL;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800935 _PyInitError err;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200936 err = _Py_InitializeCore(&interp, config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800937 if (_Py_INIT_FAILED(err)) {
Victor Stinner1dc6e392018-07-25 02:49:17 +0200938 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800939 }
Victor Stinner1dc6e392018-07-25 02:49:17 +0200940 config = &interp->core_config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100941
Victor Stinner9cfc0022017-12-20 19:36:46 +0100942 _PyMainInterpreterConfig main_config = _PyMainInterpreterConfig_INIT;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200943 err = _PyMainInterpreterConfig_Read(&main_config, config);
Victor Stinner9cfc0022017-12-20 19:36:46 +0100944 if (!_Py_INIT_FAILED(err)) {
Victor Stinner1dc6e392018-07-25 02:49:17 +0200945 err = _Py_InitializeMainInterpreter(interp, &main_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800946 }
Victor Stinner9cfc0022017-12-20 19:36:46 +0100947 _PyMainInterpreterConfig_Clear(&main_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800948 if (_Py_INIT_FAILED(err)) {
Victor Stinner1dc6e392018-07-25 02:49:17 +0200949 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800950 }
Victor Stinner1dc6e392018-07-25 02:49:17 +0200951 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700952}
953
954
955void
Nick Coghland6009512014-11-20 21:39:37 +1000956Py_InitializeEx(int install_sigs)
957{
Victor Stinner1dc6e392018-07-25 02:49:17 +0200958 if (_PyRuntime.initialized) {
959 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
960 return;
961 }
962
963 _PyInitError err;
964 _PyCoreConfig config = _PyCoreConfig_INIT;
965 config.install_signal_handlers = install_sigs;
966
967 err = _Py_InitializeFromConfig(&config);
968 _PyCoreConfig_Clear(&config);
969
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800970 if (_Py_INIT_FAILED(err)) {
Victor Stinnerdfe88472019-03-01 12:14:41 +0100971 _Py_ExitInitError(err);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800972 }
Nick Coghland6009512014-11-20 21:39:37 +1000973}
974
975void
976Py_Initialize(void)
977{
978 Py_InitializeEx(1);
979}
980
981
982#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +0000983extern void _Py_dump_counts(FILE*);
Nick Coghland6009512014-11-20 21:39:37 +1000984#endif
985
986/* Flush stdout and stderr */
987
988static int
989file_is_closed(PyObject *fobj)
990{
991 int r;
992 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
993 if (tmp == NULL) {
994 PyErr_Clear();
995 return 0;
996 }
997 r = PyObject_IsTrue(tmp);
998 Py_DECREF(tmp);
999 if (r < 0)
1000 PyErr_Clear();
1001 return r > 0;
1002}
1003
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001004static int
Nick Coghland6009512014-11-20 21:39:37 +10001005flush_std_files(void)
1006{
1007 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1008 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1009 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001010 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001011
1012 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001013 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001014 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001015 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001016 status = -1;
1017 }
Nick Coghland6009512014-11-20 21:39:37 +10001018 else
1019 Py_DECREF(tmp);
1020 }
1021
1022 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001023 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001024 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001025 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001026 status = -1;
1027 }
Nick Coghland6009512014-11-20 21:39:37 +10001028 else
1029 Py_DECREF(tmp);
1030 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001031
1032 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001033}
1034
1035/* Undo the effect of Py_Initialize().
1036
1037 Beware: if multiple interpreter and/or thread states exist, these
1038 are not wiped out; only the current thread and interpreter state
1039 are deleted. But since everything else is deleted, those other
1040 interpreter and thread states should no longer be used.
1041
1042 (XXX We should do better, e.g. wipe out all interpreters and
1043 threads.)
1044
1045 Locking: as above.
1046
1047*/
1048
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001049int
1050Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001051{
1052 PyInterpreterState *interp;
1053 PyThreadState *tstate;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001054 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001055
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001056 if (!_PyRuntime.initialized)
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001057 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001058
1059 wait_for_thread_shutdown();
1060
Marcel Plch776407f2017-12-20 11:17:58 +01001061 /* Get current thread state and interpreter pointer */
Victor Stinner50b48572018-11-01 01:51:40 +01001062 tstate = _PyThreadState_GET();
Marcel Plch776407f2017-12-20 11:17:58 +01001063 interp = tstate->interp;
1064
Nick Coghland6009512014-11-20 21:39:37 +10001065 /* The interpreter is still entirely intact at this point, and the
1066 * exit funcs may be relying on that. In particular, if some thread
1067 * or exit func is still waiting to do an import, the import machinery
1068 * expects Py_IsInitialized() to return true. So don't say the
1069 * interpreter is uninitialized until after the exit funcs have run.
1070 * Note that Threading.py uses an exit func to do a join on all the
1071 * threads created thru it, so this also protects pending imports in
1072 * the threads created via Threading.
1073 */
Nick Coghland6009512014-11-20 21:39:37 +10001074
Marcel Plch776407f2017-12-20 11:17:58 +01001075 call_py_exitfuncs(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001076
Victor Stinnerda273412017-12-15 01:46:02 +01001077 /* Copy the core config, PyInterpreterState_Delete() free
1078 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001079#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001080 int show_ref_count = interp->core_config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001081#endif
1082#ifdef Py_TRACE_REFS
Victor Stinnerda273412017-12-15 01:46:02 +01001083 int dump_refs = interp->core_config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001084#endif
1085#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001086 int malloc_stats = interp->core_config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001087#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001088
Nick Coghland6009512014-11-20 21:39:37 +10001089 /* Remaining threads (e.g. daemon threads) will automatically exit
1090 after taking the GIL (in PyEval_RestoreThread()). */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001091 _PyRuntime.finalizing = tstate;
1092 _PyRuntime.initialized = 0;
1093 _PyRuntime.core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001094
Victor Stinnere0deff32015-03-24 13:46:18 +01001095 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001096 if (flush_std_files() < 0) {
1097 status = -1;
1098 }
Nick Coghland6009512014-11-20 21:39:37 +10001099
1100 /* Disable signal handling */
1101 PyOS_FiniInterrupts();
1102
1103 /* Collect garbage. This may call finalizers; it's nice to call these
1104 * before all modules are destroyed.
1105 * XXX If a __del__ or weakref callback is triggered here, and tries to
1106 * XXX import a module, bad things can happen, because Python no
1107 * XXX longer believes it's initialized.
1108 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1109 * XXX is easy to provoke that way. I've also seen, e.g.,
1110 * XXX Exception exceptions.ImportError: 'No module named sha'
1111 * XXX in <function callback at 0x008F5718> ignored
1112 * XXX but I'm unclear on exactly how that one happens. In any case,
1113 * XXX I haven't seen a real-life report of either of these.
1114 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001115 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001116#ifdef COUNT_ALLOCS
1117 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1118 each collection might release some types from the type
1119 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001120 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001121 /* nothing */;
1122#endif
Eric Snowdae02762017-09-14 00:35:58 -07001123
Nick Coghland6009512014-11-20 21:39:37 +10001124 /* Destroy all modules */
1125 PyImport_Cleanup();
1126
Victor Stinnere0deff32015-03-24 13:46:18 +01001127 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001128 if (flush_std_files() < 0) {
1129 status = -1;
1130 }
Nick Coghland6009512014-11-20 21:39:37 +10001131
1132 /* Collect final garbage. This disposes of cycles created by
1133 * class definitions, for example.
1134 * XXX This is disabled because it caused too many problems. If
1135 * XXX a __del__ or weakref callback triggers here, Python code has
1136 * XXX a hard time running, because even the sys module has been
1137 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1138 * XXX One symptom is a sequence of information-free messages
1139 * XXX coming from threads (if a __del__ or callback is invoked,
1140 * XXX other threads can execute too, and any exception they encounter
1141 * XXX triggers a comedy of errors as subsystem after subsystem
1142 * XXX fails to find what it *expects* to find in sys to help report
1143 * XXX the exception and consequent unexpected failures). I've also
1144 * XXX seen segfaults then, after adding print statements to the
1145 * XXX Python code getting called.
1146 */
1147#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001148 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001149#endif
1150
1151 /* Disable tracemalloc after all Python objects have been destroyed,
1152 so it is possible to use tracemalloc in objects destructor. */
1153 _PyTraceMalloc_Fini();
1154
1155 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1156 _PyImport_Fini();
1157
1158 /* Cleanup typeobject.c's internal caches. */
1159 _PyType_Fini();
1160
1161 /* unload faulthandler module */
1162 _PyFaulthandler_Fini();
1163
1164 /* Debugging stuff */
1165#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001166 _Py_dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001167#endif
1168 /* dump hash stats */
1169 _PyHash_Fini();
1170
Eric Snowdae02762017-09-14 00:35:58 -07001171#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001172 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001173 _PyDebug_PrintTotalRefs();
1174 }
Eric Snowdae02762017-09-14 00:35:58 -07001175#endif
Nick Coghland6009512014-11-20 21:39:37 +10001176
1177#ifdef Py_TRACE_REFS
1178 /* Display all objects still alive -- this can invoke arbitrary
1179 * __repr__ overrides, so requires a mostly-intact interpreter.
1180 * Alas, a lot of stuff may still be alive now that will be cleaned
1181 * up later.
1182 */
Victor Stinnerda273412017-12-15 01:46:02 +01001183 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001184 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001185 }
Nick Coghland6009512014-11-20 21:39:37 +10001186#endif /* Py_TRACE_REFS */
1187
1188 /* Clear interpreter state and all thread states. */
1189 PyInterpreterState_Clear(interp);
1190
1191 /* Now we decref the exception classes. After this point nothing
1192 can raise an exception. That's okay, because each Fini() method
1193 below has been checked to make sure no exceptions are ever
1194 raised.
1195 */
1196
1197 _PyExc_Fini();
1198
1199 /* Sundry finalizers */
1200 PyMethod_Fini();
1201 PyFrame_Fini();
1202 PyCFunction_Fini();
1203 PyTuple_Fini();
1204 PyList_Fini();
1205 PySet_Fini();
1206 PyBytes_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001207 PyLong_Fini();
1208 PyFloat_Fini();
1209 PyDict_Fini();
1210 PySlice_Fini();
1211 _PyGC_Fini();
Eric Snow6b4be192017-05-22 21:36:03 -07001212 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001213 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001214 PyAsyncGen_Fini();
Yury Selivanovf23746a2018-01-22 19:11:18 -05001215 _PyContext_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001216
1217 /* Cleanup Unicode implementation */
1218 _PyUnicode_Fini();
1219
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001220 _Py_ClearFileSystemEncoding();
Nick Coghland6009512014-11-20 21:39:37 +10001221
1222 /* XXX Still allocated:
1223 - various static ad-hoc pointers to interned strings
1224 - int and float free list blocks
1225 - whatever various modules and libraries allocate
1226 */
1227
1228 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1229
1230 /* Cleanup auto-thread-state */
Nick Coghland6009512014-11-20 21:39:37 +10001231 _PyGILState_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001232
1233 /* Delete current thread. After this, many C API calls become crashy. */
1234 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001235
Nick Coghland6009512014-11-20 21:39:37 +10001236 PyInterpreterState_Delete(interp);
1237
1238#ifdef Py_TRACE_REFS
1239 /* Display addresses (& refcnts) of all objects still alive.
1240 * An address can be used to find the repr of the object, printed
1241 * above by _Py_PrintReferences.
1242 */
Victor Stinnerda273412017-12-15 01:46:02 +01001243 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001244 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001245 }
Nick Coghland6009512014-11-20 21:39:37 +10001246#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001247#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001248 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001249 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be8072016-03-14 12:04:26 +01001250 }
Nick Coghland6009512014-11-20 21:39:37 +10001251#endif
1252
1253 call_ll_exitfuncs();
Victor Stinner9316ee42017-11-25 03:17:57 +01001254
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001255 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001256 return status;
1257}
1258
1259void
1260Py_Finalize(void)
1261{
1262 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001263}
1264
1265/* Create and initialize a new interpreter and thread, and return the
1266 new thread. This requires that Py_Initialize() has been called
1267 first.
1268
1269 Unsuccessful initialization yields a NULL pointer. Note that *no*
1270 exception information is available even in this case -- the
1271 exception information is held in the thread, and there is no
1272 thread.
1273
1274 Locking: as above.
1275
1276*/
1277
Victor Stinnera7368ac2017-11-15 18:11:45 -08001278static _PyInitError
1279new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001280{
1281 PyInterpreterState *interp;
1282 PyThreadState *tstate, *save_tstate;
1283 PyObject *bimod, *sysmod;
Victor Stinner9316ee42017-11-25 03:17:57 +01001284 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001285
Victor Stinnera7368ac2017-11-15 18:11:45 -08001286 if (!_PyRuntime.initialized) {
1287 return _Py_INIT_ERR("Py_Initialize must be called first");
1288 }
Nick Coghland6009512014-11-20 21:39:37 +10001289
Victor Stinner8a1be612016-03-14 22:07:55 +01001290 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1291 interpreters: disable PyGILState_Check(). */
1292 _PyGILState_check_enabled = 0;
1293
Nick Coghland6009512014-11-20 21:39:37 +10001294 interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001295 if (interp == NULL) {
1296 *tstate_p = NULL;
1297 return _Py_INIT_OK();
1298 }
Nick Coghland6009512014-11-20 21:39:37 +10001299
1300 tstate = PyThreadState_New(interp);
1301 if (tstate == NULL) {
1302 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001303 *tstate_p = NULL;
1304 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001305 }
1306
1307 save_tstate = PyThreadState_Swap(tstate);
1308
Eric Snow1abcf672017-05-23 21:46:51 -07001309 /* Copy the current interpreter config into the new interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +01001310 _PyCoreConfig *core_config;
1311 _PyMainInterpreterConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001312 if (save_tstate != NULL) {
Victor Stinnerda273412017-12-15 01:46:02 +01001313 core_config = &save_tstate->interp->core_config;
1314 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001315 } else {
1316 /* No current thread state, copy from the main interpreter */
1317 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinnerda273412017-12-15 01:46:02 +01001318 core_config = &main_interp->core_config;
1319 config = &main_interp->config;
1320 }
1321
1322 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
1323 return _Py_INIT_ERR("failed to copy core config");
1324 }
Victor Stinnerd19d8d52018-07-24 13:55:48 +02001325 core_config = &interp->core_config;
Victor Stinnerda273412017-12-15 01:46:02 +01001326 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
1327 return _Py_INIT_ERR("failed to copy main interpreter config");
Eric Snow1abcf672017-05-23 21:46:51 -07001328 }
1329
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001330 err = _PyExc_Init();
1331 if (_Py_INIT_FAILED(err)) {
1332 return err;
1333 }
1334
Nick Coghland6009512014-11-20 21:39:37 +10001335 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001336 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001337 if (modules == NULL) {
1338 return _Py_INIT_ERR("can't make modules dictionary");
1339 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001340 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001341
Eric Snowd393c1b2017-09-14 12:18:12 -06001342 sysmod = _PyImport_FindBuiltin("sys", modules);
1343 if (sysmod != NULL) {
1344 interp->sysdict = PyModule_GetDict(sysmod);
1345 if (interp->sysdict == NULL)
1346 goto handle_error;
1347 Py_INCREF(interp->sysdict);
1348 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinnerab672812019-01-23 15:04:40 +01001349 if (_PySys_InitMain(interp) < 0) {
1350 return _Py_INIT_ERR("can't finish initializing sys");
1351 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001352 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001353 else if (PyErr_Occurred()) {
1354 goto handle_error;
1355 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001356
1357 bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001358 if (bimod != NULL) {
1359 interp->builtins = PyModule_GetDict(bimod);
1360 if (interp->builtins == NULL)
1361 goto handle_error;
1362 Py_INCREF(interp->builtins);
1363 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001364 else if (PyErr_Occurred()) {
1365 goto handle_error;
1366 }
Nick Coghland6009512014-11-20 21:39:37 +10001367
Nick Coghland6009512014-11-20 21:39:37 +10001368 if (bimod != NULL && sysmod != NULL) {
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001369 err = _PyBuiltins_AddExceptions(bimod);
1370 if (_Py_INIT_FAILED(err)) {
1371 return err;
1372 }
Nick Coghland6009512014-11-20 21:39:37 +10001373
Victor Stinnerab672812019-01-23 15:04:40 +01001374 err = _PySys_SetPreliminaryStderr(interp->sysdict);
1375 if (_Py_INIT_FAILED(err)) {
1376 return err;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001377 }
Nick Coghland6009512014-11-20 21:39:37 +10001378
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001379 err = _PyImportHooks_Init();
1380 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001381 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001382 }
Nick Coghland6009512014-11-20 21:39:37 +10001383
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001384 err = initimport(interp, sysmod);
1385 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001386 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001387 }
Nick Coghland6009512014-11-20 21:39:37 +10001388
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001389 err = initexternalimport(interp);
1390 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001391 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001392 }
Nick Coghland6009512014-11-20 21:39:37 +10001393
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001394 err = initfsencoding(interp);
1395 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001396 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001397 }
1398
Victor Stinner91106cd2017-12-13 12:29:09 +01001399 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001400 if (_Py_INIT_FAILED(err)) {
1401 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001402 }
1403
1404 err = add_main_module(interp);
1405 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001406 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001407 }
1408
Victor Stinnerd19d8d52018-07-24 13:55:48 +02001409 if (core_config->site_import) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001410 err = initsite();
1411 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001412 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001413 }
1414 }
Nick Coghland6009512014-11-20 21:39:37 +10001415 }
1416
Victor Stinnera7368ac2017-11-15 18:11:45 -08001417 if (PyErr_Occurred()) {
1418 goto handle_error;
1419 }
Nick Coghland6009512014-11-20 21:39:37 +10001420
Victor Stinnera7368ac2017-11-15 18:11:45 -08001421 *tstate_p = tstate;
1422 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001423
Nick Coghland6009512014-11-20 21:39:37 +10001424handle_error:
1425 /* Oops, it didn't work. Undo it all. */
1426
1427 PyErr_PrintEx(0);
1428 PyThreadState_Clear(tstate);
1429 PyThreadState_Swap(save_tstate);
1430 PyThreadState_Delete(tstate);
1431 PyInterpreterState_Delete(interp);
1432
Victor Stinnera7368ac2017-11-15 18:11:45 -08001433 *tstate_p = NULL;
1434 return _Py_INIT_OK();
1435}
1436
1437PyThreadState *
1438Py_NewInterpreter(void)
1439{
1440 PyThreadState *tstate;
1441 _PyInitError err = new_interpreter(&tstate);
1442 if (_Py_INIT_FAILED(err)) {
Victor Stinnerdfe88472019-03-01 12:14:41 +01001443 _Py_ExitInitError(err);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001444 }
1445 return tstate;
1446
Nick Coghland6009512014-11-20 21:39:37 +10001447}
1448
1449/* Delete an interpreter and its last thread. This requires that the
1450 given thread state is current, that the thread has no remaining
1451 frames, and that it is its interpreter's only remaining thread.
1452 It is a fatal error to violate these constraints.
1453
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001454 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001455 everything, regardless.)
1456
1457 Locking: as above.
1458
1459*/
1460
1461void
1462Py_EndInterpreter(PyThreadState *tstate)
1463{
1464 PyInterpreterState *interp = tstate->interp;
1465
Victor Stinner50b48572018-11-01 01:51:40 +01001466 if (tstate != _PyThreadState_GET())
Nick Coghland6009512014-11-20 21:39:37 +10001467 Py_FatalError("Py_EndInterpreter: thread is not current");
1468 if (tstate->frame != NULL)
1469 Py_FatalError("Py_EndInterpreter: thread still has a frame");
1470
1471 wait_for_thread_shutdown();
1472
Marcel Plch776407f2017-12-20 11:17:58 +01001473 call_py_exitfuncs(interp);
1474
Nick Coghland6009512014-11-20 21:39:37 +10001475 if (tstate != interp->tstate_head || tstate->next != NULL)
1476 Py_FatalError("Py_EndInterpreter: not the last thread");
1477
1478 PyImport_Cleanup();
1479 PyInterpreterState_Clear(interp);
1480 PyThreadState_Swap(NULL);
1481 PyInterpreterState_Delete(interp);
1482}
1483
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001484/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001485
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001486static _PyInitError
1487add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001488{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001489 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001490 m = PyImport_AddModule("__main__");
1491 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001492 return _Py_INIT_ERR("can't create __main__ module");
1493
Nick Coghland6009512014-11-20 21:39:37 +10001494 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001495 ann_dict = PyDict_New();
1496 if ((ann_dict == NULL) ||
1497 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001498 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001499 }
1500 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001501
Nick Coghland6009512014-11-20 21:39:37 +10001502 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1503 PyObject *bimod = PyImport_ImportModule("builtins");
1504 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001505 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001506 }
1507 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001508 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001509 }
1510 Py_DECREF(bimod);
1511 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001512
Nick Coghland6009512014-11-20 21:39:37 +10001513 /* Main is a little special - imp.is_builtin("__main__") will return
1514 * False, but BuiltinImporter is still the most appropriate initial
1515 * setting for its __loader__ attribute. A more suitable value will
1516 * be set if __main__ gets further initialized later in the startup
1517 * process.
1518 */
1519 loader = PyDict_GetItemString(d, "__loader__");
1520 if (loader == NULL || loader == Py_None) {
1521 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1522 "BuiltinImporter");
1523 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001524 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001525 }
1526 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001527 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001528 }
1529 Py_DECREF(loader);
1530 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001531 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001532}
1533
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001534static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001535initfsencoding(PyInterpreterState *interp)
1536{
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001537 _PyCoreConfig *config = &interp->core_config;
Nick Coghland6009512014-11-20 21:39:37 +10001538
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001539 char *encoding = get_codec_name(config->filesystem_encoding);
1540 if (encoding == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001541 /* Such error can only occurs in critical situations: no more
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001542 memory, import a module of the standard library failed, etc. */
1543 return _Py_INIT_ERR("failed to get the Python codec "
1544 "of the filesystem encoding");
Nick Coghland6009512014-11-20 21:39:37 +10001545 }
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001546
1547 /* Update the filesystem encoding to the normalized Python codec name.
1548 For example, replace "ANSI_X3.4-1968" (locale encoding) with "ascii"
1549 (Python codec name). */
1550 PyMem_RawFree(config->filesystem_encoding);
1551 config->filesystem_encoding = encoding;
1552
1553 /* Set Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors
1554 global configuration variables. */
1555 if (_Py_SetFileSystemEncoding(config->filesystem_encoding,
1556 config->filesystem_errors) < 0) {
1557 return _Py_INIT_NO_MEMORY();
1558 }
1559
1560 /* PyUnicode can now use the Python codec rather than C implementation
1561 for the filesystem encoding */
Nick Coghland6009512014-11-20 21:39:37 +10001562 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001563 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001564}
1565
1566/* Import the site module (not into __main__ though) */
1567
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001568static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001569initsite(void)
1570{
1571 PyObject *m;
1572 m = PyImport_ImportModule("site");
1573 if (m == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001574 return _Py_INIT_USER_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001575 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001576 Py_DECREF(m);
1577 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001578}
1579
Victor Stinner874dbe82015-09-04 17:29:57 +02001580/* Check if a file descriptor is valid or not.
1581 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1582static int
1583is_valid_fd(int fd)
1584{
Victor Stinner1c4670e2017-05-04 00:45:56 +02001585#ifdef __APPLE__
1586 /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe
1587 and the other side of the pipe is closed, dup(1) succeed, whereas
1588 fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect
1589 such error. */
1590 struct stat st;
1591 return (fstat(fd, &st) == 0);
1592#else
Victor Stinner874dbe82015-09-04 17:29:57 +02001593 int fd2;
Steve Dower940f33a2016-09-08 11:21:54 -07001594 if (fd < 0)
Victor Stinner874dbe82015-09-04 17:29:57 +02001595 return 0;
1596 _Py_BEGIN_SUPPRESS_IPH
Victor Stinner449b2712015-09-29 13:59:50 +02001597 /* Prefer dup() over fstat(). fstat() can require input/output whereas
1598 dup() doesn't, there is a low risk of EMFILE/ENFILE at Python
1599 startup. */
Victor Stinner874dbe82015-09-04 17:29:57 +02001600 fd2 = dup(fd);
1601 if (fd2 >= 0)
1602 close(fd2);
1603 _Py_END_SUPPRESS_IPH
1604 return fd2 >= 0;
Victor Stinner1c4670e2017-05-04 00:45:56 +02001605#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001606}
1607
1608/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001609static PyObject*
Victor Stinnerfbca9082018-08-30 00:50:45 +02001610create_stdio(const _PyCoreConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001611 int fd, int write_mode, const char* name,
1612 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001613{
1614 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1615 const char* mode;
1616 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001617 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001618 int buffering, isatty;
1619 _Py_IDENTIFIER(open);
1620 _Py_IDENTIFIER(isatty);
1621 _Py_IDENTIFIER(TextIOWrapper);
1622 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001623 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001624
Victor Stinner874dbe82015-09-04 17:29:57 +02001625 if (!is_valid_fd(fd))
1626 Py_RETURN_NONE;
1627
Nick Coghland6009512014-11-20 21:39:37 +10001628 /* stdin is always opened in buffered mode, first because it shouldn't
1629 make a difference in common use cases, second because TextIOWrapper
1630 depends on the presence of a read1() method which only exists on
1631 buffered streams.
1632 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001633 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001634 buffering = 0;
1635 else
1636 buffering = -1;
1637 if (write_mode)
1638 mode = "wb";
1639 else
1640 mode = "rb";
1641 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1642 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001643 Py_None, Py_None, /* encoding, errors */
1644 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001645 if (buf == NULL)
1646 goto error;
1647
1648 if (buffering) {
1649 _Py_IDENTIFIER(raw);
1650 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1651 if (raw == NULL)
1652 goto error;
1653 }
1654 else {
1655 raw = buf;
1656 Py_INCREF(raw);
1657 }
1658
Steve Dower39294992016-08-30 21:22:36 -07001659#ifdef MS_WINDOWS
1660 /* Windows console IO is always UTF-8 encoded */
1661 if (PyWindowsConsoleIO_Check(raw))
1662 encoding = "utf-8";
1663#endif
1664
Nick Coghland6009512014-11-20 21:39:37 +10001665 text = PyUnicode_FromString(name);
1666 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1667 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001668 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001669 if (res == NULL)
1670 goto error;
1671 isatty = PyObject_IsTrue(res);
1672 Py_DECREF(res);
1673 if (isatty == -1)
1674 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001675 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001676 write_through = Py_True;
1677 else
1678 write_through = Py_False;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001679 if (isatty && buffered_stdio)
Nick Coghland6009512014-11-20 21:39:37 +10001680 line_buffering = Py_True;
1681 else
1682 line_buffering = Py_False;
1683
1684 Py_CLEAR(raw);
1685 Py_CLEAR(text);
1686
1687#ifdef MS_WINDOWS
1688 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1689 newlines to "\n".
1690 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1691 newline = NULL;
1692#else
1693 /* sys.stdin: split lines at "\n".
1694 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1695 newline = "\n";
1696#endif
1697
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001698 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001699 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001700 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001701 Py_CLEAR(buf);
1702 if (stream == NULL)
1703 goto error;
1704
1705 if (write_mode)
1706 mode = "w";
1707 else
1708 mode = "r";
1709 text = PyUnicode_FromString(mode);
1710 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1711 goto error;
1712 Py_CLEAR(text);
1713 return stream;
1714
1715error:
1716 Py_XDECREF(buf);
1717 Py_XDECREF(stream);
1718 Py_XDECREF(text);
1719 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001720
Victor Stinner874dbe82015-09-04 17:29:57 +02001721 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1722 /* Issue #24891: the file descriptor was closed after the first
1723 is_valid_fd() check was called. Ignore the OSError and set the
1724 stream to None. */
1725 PyErr_Clear();
1726 Py_RETURN_NONE;
1727 }
1728 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001729}
1730
1731/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001732static _PyInitError
Victor Stinner91106cd2017-12-13 12:29:09 +01001733init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001734{
1735 PyObject *iomod = NULL, *wrapper;
1736 PyObject *bimod = NULL;
1737 PyObject *m;
1738 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001739 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001740 PyObject * encoding_attr;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001741 _PyInitError res = _Py_INIT_OK();
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001742 _PyCoreConfig *config = &interp->core_config;
1743
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001744 /* Check that stdin is not a directory
1745 Using shell redirection, you can redirect stdin to a directory,
1746 crashing the Python interpreter. Catch this common mistake here
1747 and output a useful error message. Note that under MS Windows,
1748 the shell already prevents that. */
1749#ifndef MS_WINDOWS
1750 struct _Py_stat_struct sb;
1751 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1752 S_ISDIR(sb.st_mode)) {
1753 return _Py_INIT_USER_ERR("<stdin> is a directory, "
1754 "cannot continue");
1755 }
1756#endif
1757
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001758 char *codec_name = get_codec_name(config->stdio_encoding);
1759 if (codec_name == NULL) {
1760 return _Py_INIT_ERR("failed to get the Python codec name "
1761 "of the stdio encoding");
1762 }
1763 PyMem_RawFree(config->stdio_encoding);
1764 config->stdio_encoding = codec_name;
Nick Coghland6009512014-11-20 21:39:37 +10001765
1766 /* Hack to avoid a nasty recursion issue when Python is invoked
1767 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1768 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1769 goto error;
1770 }
1771 Py_DECREF(m);
1772
1773 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1774 goto error;
1775 }
1776 Py_DECREF(m);
1777
1778 if (!(bimod = PyImport_ImportModule("builtins"))) {
1779 goto error;
1780 }
1781
1782 if (!(iomod = PyImport_ImportModule("io"))) {
1783 goto error;
1784 }
1785 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1786 goto error;
1787 }
1788
1789 /* Set builtins.open */
1790 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1791 Py_DECREF(wrapper);
1792 goto error;
1793 }
1794 Py_DECREF(wrapper);
1795
Nick Coghland6009512014-11-20 21:39:37 +10001796 /* Set sys.stdin */
1797 fd = fileno(stdin);
1798 /* Under some conditions stdin, stdout and stderr may not be connected
1799 * and fileno() may point to an invalid file descriptor. For example
1800 * GUI apps don't have valid standard streams by default.
1801 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001802 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001803 config->stdio_encoding,
1804 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001805 if (std == NULL)
1806 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001807 PySys_SetObject("__stdin__", std);
1808 _PySys_SetObjectId(&PyId_stdin, std);
1809 Py_DECREF(std);
1810
1811 /* Set sys.stdout */
1812 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001813 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001814 config->stdio_encoding,
1815 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001816 if (std == NULL)
1817 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001818 PySys_SetObject("__stdout__", std);
1819 _PySys_SetObjectId(&PyId_stdout, std);
1820 Py_DECREF(std);
1821
1822#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1823 /* Set sys.stderr, replaces the preliminary stderr */
1824 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001825 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001826 config->stdio_encoding,
1827 "backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001828 if (std == NULL)
1829 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001830
1831 /* Same as hack above, pre-import stderr's codec to avoid recursion
1832 when import.c tries to write to stderr in verbose mode. */
1833 encoding_attr = PyObject_GetAttrString(std, "encoding");
1834 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001835 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001836 if (std_encoding != NULL) {
1837 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1838 Py_XDECREF(codec_info);
1839 }
1840 Py_DECREF(encoding_attr);
1841 }
1842 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1843
1844 if (PySys_SetObject("__stderr__", std) < 0) {
1845 Py_DECREF(std);
1846 goto error;
1847 }
1848 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1849 Py_DECREF(std);
1850 goto error;
1851 }
1852 Py_DECREF(std);
1853#endif
1854
Victor Stinnera7368ac2017-11-15 18:11:45 -08001855 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001856
Victor Stinnera7368ac2017-11-15 18:11:45 -08001857error:
1858 res = _Py_INIT_ERR("can't initialize sys standard streams");
1859
1860done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02001861 _Py_ClearStandardStreamEncoding();
Victor Stinner31e99082017-12-20 23:41:38 +01001862
Nick Coghland6009512014-11-20 21:39:37 +10001863 Py_XDECREF(bimod);
1864 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001865 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001866}
1867
1868
Victor Stinner10dc4842015-03-24 12:01:30 +01001869static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001870_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001871{
Victor Stinner10dc4842015-03-24 12:01:30 +01001872 fputc('\n', stderr);
1873 fflush(stderr);
1874
1875 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001876 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001877}
Victor Stinner791da1c2016-03-14 16:53:12 +01001878
1879/* Print the current exception (if an exception is set) with its traceback,
1880 or display the current Python stack.
1881
1882 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1883 called on catastrophic cases.
1884
1885 Return 1 if the traceback was displayed, 0 otherwise. */
1886
1887static int
1888_Py_FatalError_PrintExc(int fd)
1889{
1890 PyObject *ferr, *res;
1891 PyObject *exception, *v, *tb;
1892 int has_tb;
1893
Victor Stinner791da1c2016-03-14 16:53:12 +01001894 PyErr_Fetch(&exception, &v, &tb);
1895 if (exception == NULL) {
1896 /* No current exception */
1897 return 0;
1898 }
1899
1900 ferr = _PySys_GetObjectId(&PyId_stderr);
1901 if (ferr == NULL || ferr == Py_None) {
1902 /* sys.stderr is not set yet or set to None,
1903 no need to try to display the exception */
1904 return 0;
1905 }
1906
1907 PyErr_NormalizeException(&exception, &v, &tb);
1908 if (tb == NULL) {
1909 tb = Py_None;
1910 Py_INCREF(tb);
1911 }
1912 PyException_SetTraceback(v, tb);
1913 if (exception == NULL) {
1914 /* PyErr_NormalizeException() failed */
1915 return 0;
1916 }
1917
1918 has_tb = (tb != Py_None);
1919 PyErr_Display(exception, v, tb);
1920 Py_XDECREF(exception);
1921 Py_XDECREF(v);
1922 Py_XDECREF(tb);
1923
1924 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07001925 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01001926 if (res == NULL)
1927 PyErr_Clear();
1928 else
1929 Py_DECREF(res);
1930
1931 return has_tb;
1932}
1933
Nick Coghland6009512014-11-20 21:39:37 +10001934/* Print fatal error message and abort */
1935
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001936#ifdef MS_WINDOWS
1937static void
1938fatal_output_debug(const char *msg)
1939{
1940 /* buffer of 256 bytes allocated on the stack */
1941 WCHAR buffer[256 / sizeof(WCHAR)];
1942 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
1943 size_t msglen;
1944
1945 OutputDebugStringW(L"Fatal Python error: ");
1946
1947 msglen = strlen(msg);
1948 while (msglen) {
1949 size_t i;
1950
1951 if (buflen > msglen) {
1952 buflen = msglen;
1953 }
1954
1955 /* Convert the message to wchar_t. This uses a simple one-to-one
1956 conversion, assuming that the this error message actually uses
1957 ASCII only. If this ceases to be true, we will have to convert. */
1958 for (i=0; i < buflen; ++i) {
1959 buffer[i] = msg[i];
1960 }
1961 buffer[i] = L'\0';
1962 OutputDebugStringW(buffer);
1963
1964 msg += buflen;
1965 msglen -= buflen;
1966 }
1967 OutputDebugStringW(L"\n");
1968}
1969#endif
1970
Benjamin Petersoncef88b92017-11-25 13:02:55 -08001971static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001972fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10001973{
1974 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01001975 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01001976
1977 if (reentrant) {
1978 /* Py_FatalError() caused a second fatal error.
1979 Example: flush_std_files() raises a recursion error. */
1980 goto exit;
1981 }
1982 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001983
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001984 fprintf(stderr, "Fatal Python error: ");
1985 if (prefix) {
1986 fputs(prefix, stderr);
1987 fputs(": ", stderr);
1988 }
1989 if (msg) {
1990 fputs(msg, stderr);
1991 }
1992 else {
1993 fprintf(stderr, "<message not set>");
1994 }
1995 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001996 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01001997
Victor Stinner3a228ab2018-11-01 00:26:41 +01001998 /* Check if the current thread has a Python thread state
1999 and holds the GIL */
2000 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2001 if (tss_tstate != NULL) {
Victor Stinner50b48572018-11-01 01:51:40 +01002002 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner3a228ab2018-11-01 00:26:41 +01002003 if (tss_tstate != tstate) {
2004 /* The Python thread does not hold the GIL */
2005 tss_tstate = NULL;
2006 }
2007 }
2008 else {
2009 /* Py_FatalError() has been called from a C thread
2010 which has no Python thread state. */
2011 }
2012 int has_tstate_and_gil = (tss_tstate != NULL);
2013
2014 if (has_tstate_and_gil) {
2015 /* If an exception is set, print the exception with its traceback */
2016 if (!_Py_FatalError_PrintExc(fd)) {
2017 /* No exception is set, or an exception is set without traceback */
2018 _Py_FatalError_DumpTracebacks(fd);
2019 }
2020 }
2021 else {
Victor Stinner791da1c2016-03-14 16:53:12 +01002022 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002023 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002024
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002025 /* The main purpose of faulthandler is to display the traceback.
2026 This function already did its best to display a traceback.
2027 Disable faulthandler to prevent writing a second traceback
2028 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002029 _PyFaulthandler_Fini();
2030
Victor Stinner791da1c2016-03-14 16:53:12 +01002031 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002032 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002033 /* Flush sys.stdout and sys.stderr */
2034 flush_std_files();
2035 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002036
Nick Coghland6009512014-11-20 21:39:37 +10002037#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002038 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002039#endif /* MS_WINDOWS */
2040
2041exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002042 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002043#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002044 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002045#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002046 abort();
2047 }
2048 else {
2049 exit(status);
2050 }
2051}
2052
Victor Stinner19760862017-12-20 01:41:59 +01002053void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002054Py_FatalError(const char *msg)
2055{
2056 fatal_error(NULL, msg, -1);
2057}
2058
Victor Stinner19760862017-12-20 01:41:59 +01002059void _Py_NO_RETURN
Victor Stinnerdfe88472019-03-01 12:14:41 +01002060_Py_ExitInitError(_PyInitError err)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002061{
Victor Stinnerdfe88472019-03-01 12:14:41 +01002062 if (err.exitcode >= 0) {
2063 exit(err.exitcode);
2064 }
2065 else {
2066 /* On "user" error: exit with status 1.
2067 For all other errors, call abort(). */
2068 int status = err.user_err ? 1 : -1;
2069 fatal_error(err.prefix, err.msg, status);
2070 }
Nick Coghland6009512014-11-20 21:39:37 +10002071}
2072
2073/* Clean up and exit */
2074
Victor Stinnerd7292b52016-06-17 12:29:00 +02002075# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002076
Nick Coghland6009512014-11-20 21:39:37 +10002077/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002078void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002079{
Victor Stinnercaba55b2018-08-03 15:33:52 +02002080 PyInterpreterState *is = _PyInterpreterState_Get();
Marcel Plch776407f2017-12-20 11:17:58 +01002081
Antoine Pitroufc5db952017-12-13 02:29:07 +01002082 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002083 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2084
2085 is->pyexitfunc = func;
2086 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002087}
2088
2089static void
Marcel Plch776407f2017-12-20 11:17:58 +01002090call_py_exitfuncs(PyInterpreterState *istate)
Nick Coghland6009512014-11-20 21:39:37 +10002091{
Marcel Plch776407f2017-12-20 11:17:58 +01002092 if (istate->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002093 return;
2094
Marcel Plch776407f2017-12-20 11:17:58 +01002095 (*istate->pyexitfunc)(istate->pyexitmodule);
Nick Coghland6009512014-11-20 21:39:37 +10002096 PyErr_Clear();
2097}
2098
2099/* Wait until threading._shutdown completes, provided
2100 the threading module was imported in the first place.
2101 The shutdown routine will wait until all non-daemon
2102 "threading" threads have completed. */
2103static void
2104wait_for_thread_shutdown(void)
2105{
Nick Coghland6009512014-11-20 21:39:37 +10002106 _Py_IDENTIFIER(_shutdown);
2107 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002108 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002109 if (threading == NULL) {
2110 /* threading not imported */
2111 PyErr_Clear();
2112 return;
2113 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002114 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002115 if (result == NULL) {
2116 PyErr_WriteUnraisable(threading);
2117 }
2118 else {
2119 Py_DECREF(result);
2120 }
2121 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002122}
2123
2124#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002125int Py_AtExit(void (*func)(void))
2126{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002127 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002128 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002129 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002130 return 0;
2131}
2132
2133static void
2134call_ll_exitfuncs(void)
2135{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002136 while (_PyRuntime.nexitfuncs > 0)
2137 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002138
2139 fflush(stdout);
2140 fflush(stderr);
2141}
2142
Victor Stinnercfc88312018-08-01 16:41:25 +02002143void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002144Py_Exit(int sts)
2145{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002146 if (Py_FinalizeEx() < 0) {
2147 sts = 120;
2148 }
Nick Coghland6009512014-11-20 21:39:37 +10002149
2150 exit(sts);
2151}
2152
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002153static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002154initsigs(void)
2155{
2156#ifdef SIGPIPE
2157 PyOS_setsig(SIGPIPE, SIG_IGN);
2158#endif
2159#ifdef SIGXFZ
2160 PyOS_setsig(SIGXFZ, SIG_IGN);
2161#endif
2162#ifdef SIGXFSZ
2163 PyOS_setsig(SIGXFSZ, SIG_IGN);
2164#endif
2165 PyOS_InitInterrupts(); /* May imply initsignal() */
2166 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002167 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002168 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002169 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002170}
2171
2172
2173/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2174 *
2175 * All of the code in this function must only use async-signal-safe functions,
2176 * listed at `man 7 signal` or
2177 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2178 */
2179void
2180_Py_RestoreSignals(void)
2181{
2182#ifdef SIGPIPE
2183 PyOS_setsig(SIGPIPE, SIG_DFL);
2184#endif
2185#ifdef SIGXFZ
2186 PyOS_setsig(SIGXFZ, SIG_DFL);
2187#endif
2188#ifdef SIGXFSZ
2189 PyOS_setsig(SIGXFSZ, SIG_DFL);
2190#endif
2191}
2192
2193
2194/*
2195 * The file descriptor fd is considered ``interactive'' if either
2196 * a) isatty(fd) is TRUE, or
2197 * b) the -i flag was given, and the filename associated with
2198 * the descriptor is NULL or "<stdin>" or "???".
2199 */
2200int
2201Py_FdIsInteractive(FILE *fp, const char *filename)
2202{
2203 if (isatty((int)fileno(fp)))
2204 return 1;
2205 if (!Py_InteractiveFlag)
2206 return 0;
2207 return (filename == NULL) ||
2208 (strcmp(filename, "<stdin>") == 0) ||
2209 (strcmp(filename, "???") == 0);
2210}
2211
2212
Nick Coghland6009512014-11-20 21:39:37 +10002213/* Wrappers around sigaction() or signal(). */
2214
2215PyOS_sighandler_t
2216PyOS_getsig(int sig)
2217{
2218#ifdef HAVE_SIGACTION
2219 struct sigaction context;
2220 if (sigaction(sig, NULL, &context) == -1)
2221 return SIG_ERR;
2222 return context.sa_handler;
2223#else
2224 PyOS_sighandler_t handler;
2225/* Special signal handling for the secure CRT in Visual Studio 2005 */
2226#if defined(_MSC_VER) && _MSC_VER >= 1400
2227 switch (sig) {
2228 /* Only these signals are valid */
2229 case SIGINT:
2230 case SIGILL:
2231 case SIGFPE:
2232 case SIGSEGV:
2233 case SIGTERM:
2234 case SIGBREAK:
2235 case SIGABRT:
2236 break;
2237 /* Don't call signal() with other values or it will assert */
2238 default:
2239 return SIG_ERR;
2240 }
2241#endif /* _MSC_VER && _MSC_VER >= 1400 */
2242 handler = signal(sig, SIG_IGN);
2243 if (handler != SIG_ERR)
2244 signal(sig, handler);
2245 return handler;
2246#endif
2247}
2248
2249/*
2250 * All of the code in this function must only use async-signal-safe functions,
2251 * listed at `man 7 signal` or
2252 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2253 */
2254PyOS_sighandler_t
2255PyOS_setsig(int sig, PyOS_sighandler_t handler)
2256{
2257#ifdef HAVE_SIGACTION
2258 /* Some code in Modules/signalmodule.c depends on sigaction() being
2259 * used here if HAVE_SIGACTION is defined. Fix that if this code
2260 * changes to invalidate that assumption.
2261 */
2262 struct sigaction context, ocontext;
2263 context.sa_handler = handler;
2264 sigemptyset(&context.sa_mask);
2265 context.sa_flags = 0;
2266 if (sigaction(sig, &context, &ocontext) == -1)
2267 return SIG_ERR;
2268 return ocontext.sa_handler;
2269#else
2270 PyOS_sighandler_t oldhandler;
2271 oldhandler = signal(sig, handler);
2272#ifdef HAVE_SIGINTERRUPT
2273 siginterrupt(sig, 1);
2274#endif
2275 return oldhandler;
2276#endif
2277}
2278
2279#ifdef __cplusplus
2280}
2281#endif