blob: e89152637fe14564fa8fa86de0f0ef421fef743b [file] [log] [blame]
Nick Coghland6009512014-11-20 21:39:37 +10001/* Python interpreter top-level routines, including init/exit */
2
3#include "Python.h"
4
5#include "Python-ast.h"
Victor Stinner3bb183d2018-11-22 18:38:38 +01006#undef Yield /* undefine macro conflicting with <winbase.h> */
Victor Stinner09532fe2019-05-10 23:39:09 +02007#include "pycore_ceval.h"
Victor Stinner99fcc612019-04-29 13:04:07 +02008#include "pycore_context.h"
Victor Stinner09532fe2019-05-10 23:39:09 +02009#include "pycore_coreconfig.h"
Victor Stinner353933e2018-11-23 13:08:26 +010010#include "pycore_fileutils.h"
Victor Stinner27e2d1f2018-11-01 00:52:28 +010011#include "pycore_hamt.h"
Victor Stinnera1c249c2018-11-01 03:15:58 +010012#include "pycore_pathconfig.h"
Victor Stinner621cebe2018-11-12 16:53:38 +010013#include "pycore_pylifecycle.h"
14#include "pycore_pymem.h"
15#include "pycore_pystate.h"
Nick Coghland6009512014-11-20 21:39:37 +100016#include "grammar.h"
17#include "node.h"
18#include "token.h"
19#include "parsetok.h"
20#include "errcode.h"
21#include "code.h"
22#include "symtable.h"
23#include "ast.h"
24#include "marshal.h"
25#include "osdefs.h"
26#include <locale.h>
27
28#ifdef HAVE_SIGNAL_H
29#include <signal.h>
30#endif
31
32#ifdef MS_WINDOWS
33#include "malloc.h" /* for alloca */
34#endif
35
36#ifdef HAVE_LANGINFO_H
37#include <langinfo.h>
38#endif
39
40#ifdef MS_WINDOWS
41#undef BYTE
42#include "windows.h"
Steve Dower39294992016-08-30 21:22:36 -070043
44extern PyTypeObject PyWindowsConsoleIO_Type;
45#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
Nick Coghland6009512014-11-20 21:39:37 +100046#endif
47
48_Py_IDENTIFIER(flush);
49_Py_IDENTIFIER(name);
50_Py_IDENTIFIER(stdin);
51_Py_IDENTIFIER(stdout);
52_Py_IDENTIFIER(stderr);
Eric Snow3f9eee62017-09-15 16:35:20 -060053_Py_IDENTIFIER(threading);
Nick Coghland6009512014-11-20 21:39:37 +100054
55#ifdef __cplusplus
56extern "C" {
57#endif
58
Nick Coghland6009512014-11-20 21:39:37 +100059extern grammar _PyParser_Grammar; /* From graminit.c */
60
61/* Forward */
Victor Stinnerf7e5b562017-11-15 15:48:08 -080062static _PyInitError add_main_module(PyInterpreterState *interp);
Victor Stinner43fc3bb2019-05-02 11:54:20 -040063static _PyInitError init_import_size(void);
Victor Stinner91106cd2017-12-13 12:29:09 +010064static _PyInitError init_sys_streams(PyInterpreterState *interp);
Victor Stinner43fc3bb2019-05-02 11:54:20 -040065static _PyInitError init_signals(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);
Victor Stinner8e91c242019-04-24 17:24:01 +020068static void call_ll_exitfuncs(_PyRuntimeState *runtime);
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;
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010072static int runtime_initialized = 0;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060073
Victor Stinnerf7e5b562017-11-15 15:48:08 -080074_PyInitError
Eric Snow2ebc5ce2017-09-07 23:51:28 -060075_PyRuntime_Initialize(void)
76{
77 /* XXX We only initialize once in the process, which aligns with
78 the static initialization of the former globals now found in
79 _PyRuntime. However, _PyRuntime *should* be initialized with
80 every Py_Initialize() call, but doing so breaks the runtime.
81 This is because the runtime state is not properly finalized
82 currently. */
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010083 if (runtime_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -080084 return _Py_INIT_OK();
85 }
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010086 runtime_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);
Victor Stinnerfd23cfa2019-03-20 00:03:01 +010095 runtime_initialized = 0;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060096}
97
98int
99_Py_IsFinalizing(void)
100{
101 return _PyRuntime.finalizing != NULL;
102}
103
Nick Coghland6009512014-11-20 21:39:37 +1000104/* Hack to force loading of object files */
105int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
106 PyOS_mystrnicmp; /* Python/pystrcmp.o */
107
108/* PyModule_GetWarningsModule is no longer necessary as of 2.6
109since _warnings is builtin. This API should not be used. */
110PyObject *
111PyModule_GetWarningsModule(void)
112{
113 return PyImport_ImportModule("warnings");
114}
115
Eric Snowc7ec9982017-05-23 23:00:52 -0700116
Eric Snow1abcf672017-05-23 21:46:51 -0700117/* APIs to access the initialization flags
118 *
119 * Can be called prior to Py_Initialize.
120 */
Nick Coghland6009512014-11-20 21:39:37 +1000121
Eric Snow1abcf672017-05-23 21:46:51 -0700122int
123_Py_IsCoreInitialized(void)
124{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600125 return _PyRuntime.core_initialized;
Eric Snow1abcf672017-05-23 21:46:51 -0700126}
Nick Coghland6009512014-11-20 21:39:37 +1000127
128int
129Py_IsInitialized(void)
130{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600131 return _PyRuntime.initialized;
Nick Coghland6009512014-11-20 21:39:37 +1000132}
133
Nick Coghlan6ea41862017-06-11 13:16:15 +1000134
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000135/* Global initializations. Can be undone by Py_FinalizeEx(). Don't
136 call this twice without an intervening Py_FinalizeEx() call. When
Nick Coghland6009512014-11-20 21:39:37 +1000137 initializations fail, a fatal error is issued and the function does
138 not return. On return, the first thread and interpreter state have
139 been created.
140
141 Locking: you must hold the interpreter lock while calling this.
142 (If the lock has not yet been initialized, that's equivalent to
143 having the lock, but you cannot use multiple threads.)
144
145*/
146
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800147static _PyInitError
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400148init_importlib(PyInterpreterState *interp, PyObject *sysmod)
Nick Coghland6009512014-11-20 21:39:37 +1000149{
150 PyObject *importlib;
151 PyObject *impmod;
Nick Coghland6009512014-11-20 21:39:37 +1000152 PyObject *value;
Victor Stinnerc96be812019-05-14 17:34:56 +0200153 int verbose = interp->core_config.verbose;
Nick Coghland6009512014-11-20 21:39:37 +1000154
155 /* Import _importlib through its frozen version, _frozen_importlib. */
156 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800157 return _Py_INIT_ERR("can't import _frozen_importlib");
Nick Coghland6009512014-11-20 21:39:37 +1000158 }
Victor Stinnerc96be812019-05-14 17:34:56 +0200159 else if (verbose) {
Nick Coghland6009512014-11-20 21:39:37 +1000160 PySys_FormatStderr("import _frozen_importlib # frozen\n");
161 }
162 importlib = PyImport_AddModule("_frozen_importlib");
163 if (importlib == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800164 return _Py_INIT_ERR("couldn't get _frozen_importlib from sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000165 }
166 interp->importlib = importlib;
167 Py_INCREF(interp->importlib);
168
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300169 interp->import_func = PyDict_GetItemString(interp->builtins, "__import__");
170 if (interp->import_func == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800171 return _Py_INIT_ERR("__import__ not found");
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300172 Py_INCREF(interp->import_func);
173
Victor Stinnercd6e6942015-09-18 09:11:57 +0200174 /* Import the _imp module */
Benjamin Petersonc65ef772018-01-29 11:33:57 -0800175 impmod = PyInit__imp();
Nick Coghland6009512014-11-20 21:39:37 +1000176 if (impmod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800177 return _Py_INIT_ERR("can't import _imp");
Nick Coghland6009512014-11-20 21:39:37 +1000178 }
Victor Stinnerc96be812019-05-14 17:34:56 +0200179 else if (verbose) {
Victor Stinnercd6e6942015-09-18 09:11:57 +0200180 PySys_FormatStderr("import _imp # builtin\n");
Nick Coghland6009512014-11-20 21:39:37 +1000181 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600182 if (_PyImport_SetModuleString("_imp", impmod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800183 return _Py_INIT_ERR("can't save _imp to sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000184 }
185
Victor Stinnercd6e6942015-09-18 09:11:57 +0200186 /* Install importlib as the implementation of import */
Nick Coghland6009512014-11-20 21:39:37 +1000187 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
188 if (value == NULL) {
189 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800190 return _Py_INIT_ERR("importlib install failed");
Nick Coghland6009512014-11-20 21:39:37 +1000191 }
192 Py_DECREF(value);
193 Py_DECREF(impmod);
194
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800195 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000196}
197
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800198static _PyInitError
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400199init_importlib_external(PyInterpreterState *interp)
Eric Snow1abcf672017-05-23 21:46:51 -0700200{
201 PyObject *value;
202 value = PyObject_CallMethod(interp->importlib,
203 "_install_external_importers", "");
204 if (value == NULL) {
205 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800206 return _Py_INIT_ERR("external importer setup failed");
Eric Snow1abcf672017-05-23 21:46:51 -0700207 }
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200208 Py_DECREF(value);
Victor Stinner410b85a2019-05-13 17:12:45 +0200209 return _PyImportZip_Init(interp);
Eric Snow1abcf672017-05-23 21:46:51 -0700210}
Nick Coghland6009512014-11-20 21:39:37 +1000211
Nick Coghlan6ea41862017-06-11 13:16:15 +1000212/* Helper functions to better handle the legacy C locale
213 *
214 * The legacy C locale assumes ASCII as the default text encoding, which
215 * causes problems not only for the CPython runtime, but also other
216 * components like GNU readline.
217 *
218 * Accordingly, when the CLI detects it, it attempts to coerce it to a
219 * more capable UTF-8 based alternative as follows:
220 *
221 * if (_Py_LegacyLocaleDetected()) {
222 * _Py_CoerceLegacyLocale();
223 * }
224 *
225 * See the documentation of the PYTHONCOERCECLOCALE setting for more details.
226 *
227 * Locale coercion also impacts the default error handler for the standard
228 * streams: while the usual default is "strict", the default for the legacy
229 * C locale and for any of the coercion target locales is "surrogateescape".
230 */
231
232int
233_Py_LegacyLocaleDetected(void)
234{
235#ifndef MS_WINDOWS
236 /* On non-Windows systems, the C locale is considered a legacy locale */
Nick Coghlaneb817952017-06-18 12:29:42 +1000237 /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat
238 * the POSIX locale as a simple alias for the C locale, so
239 * we may also want to check for that explicitly.
240 */
Nick Coghlan6ea41862017-06-11 13:16:15 +1000241 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
242 return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
243#else
244 /* Windows uses code pages instead of locales, so no locale is legacy */
245 return 0;
246#endif
247}
248
Nick Coghlaneb817952017-06-18 12:29:42 +1000249static const char *_C_LOCALE_WARNING =
250 "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
251 "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
252 "C.utf8, or UTF-8 (if available) as alternative Unicode-compatible "
253 "locales is recommended.\n";
254
Nick Coghlaneb817952017-06-18 12:29:42 +1000255static void
Victor Stinner43125222019-04-24 18:23:53 +0200256emit_stderr_warning_for_legacy_locale(_PyRuntimeState *runtime)
Nick Coghlaneb817952017-06-18 12:29:42 +1000257{
Victor Stinner43125222019-04-24 18:23:53 +0200258 const _PyPreConfig *preconfig = &runtime->preconfig;
Victor Stinner20004952019-03-26 02:31:11 +0100259 if (preconfig->coerce_c_locale_warn && _Py_LegacyLocaleDetected()) {
Victor Stinnercf215042018-08-29 22:56:06 +0200260 PySys_FormatStderr("%s", _C_LOCALE_WARNING);
Nick Coghlaneb817952017-06-18 12:29:42 +1000261 }
262}
263
Nick Coghlan6ea41862017-06-11 13:16:15 +1000264typedef struct _CandidateLocale {
265 const char *locale_name; /* The locale to try as a coercion target */
266} _LocaleCoercionTarget;
267
268static _LocaleCoercionTarget _TARGET_LOCALES[] = {
269 {"C.UTF-8"},
270 {"C.utf8"},
Nick Coghlan18974c32017-06-30 00:48:14 +1000271 {"UTF-8"},
Nick Coghlan6ea41862017-06-11 13:16:15 +1000272 {NULL}
273};
274
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200275
276int
277_Py_IsLocaleCoercionTarget(const char *ctype_loc)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000278{
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200279 const _LocaleCoercionTarget *target = NULL;
280 for (target = _TARGET_LOCALES; target->locale_name; target++) {
281 if (strcmp(ctype_loc, target->locale_name) == 0) {
282 return 1;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000283 }
Victor Stinner124b9eb2018-08-29 01:29:06 +0200284 }
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200285 return 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000286}
287
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200288
Nick Coghlan6ea41862017-06-11 13:16:15 +1000289#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100290static const char C_LOCALE_COERCION_WARNING[] =
Nick Coghlan6ea41862017-06-11 13:16:15 +1000291 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale "
292 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n";
293
294static void
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200295_coerce_default_locale_settings(int warn, const _LocaleCoercionTarget *target)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000296{
297 const char *newloc = target->locale_name;
298
299 /* Reset locale back to currently configured defaults */
xdegaye1588be62017-11-12 12:45:59 +0100300 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000301
302 /* Set the relevant locale environment variable */
303 if (setenv("LC_CTYPE", newloc, 1)) {
304 fprintf(stderr,
305 "Error setting LC_CTYPE, skipping C locale coercion\n");
306 return;
307 }
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200308 if (warn) {
Victor Stinner94540602017-12-16 04:54:22 +0100309 fprintf(stderr, C_LOCALE_COERCION_WARNING, newloc);
Nick Coghlaneb817952017-06-18 12:29:42 +1000310 }
Nick Coghlan6ea41862017-06-11 13:16:15 +1000311
312 /* Reconfigure with the overridden environment variables */
xdegaye1588be62017-11-12 12:45:59 +0100313 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000314}
315#endif
316
317void
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200318_Py_CoerceLegacyLocale(int warn)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000319{
320#ifdef PY_COERCE_C_LOCALE
Victor Stinner8ea09112018-09-03 17:05:18 +0200321 char *oldloc = NULL;
322
323 oldloc = _PyMem_RawStrdup(setlocale(LC_CTYPE, NULL));
324 if (oldloc == NULL) {
325 return;
326 }
327
Victor Stinner94540602017-12-16 04:54:22 +0100328 const char *locale_override = getenv("LC_ALL");
329 if (locale_override == NULL || *locale_override == '\0') {
330 /* LC_ALL is also not set (or is set to an empty string) */
331 const _LocaleCoercionTarget *target = NULL;
332 for (target = _TARGET_LOCALES; target->locale_name; target++) {
333 const char *new_locale = setlocale(LC_CTYPE,
334 target->locale_name);
335 if (new_locale != NULL) {
Victor Stinnere2510952019-05-02 11:28:57 -0400336#if !defined(_Py_FORCE_UTF8_LOCALE) && defined(HAVE_LANGINFO_H) && defined(CODESET)
Victor Stinner94540602017-12-16 04:54:22 +0100337 /* Also ensure that nl_langinfo works in this locale */
338 char *codeset = nl_langinfo(CODESET);
339 if (!codeset || *codeset == '\0') {
340 /* CODESET is not set or empty, so skip coercion */
341 new_locale = NULL;
342 _Py_SetLocaleFromEnv(LC_CTYPE);
343 continue;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000344 }
Victor Stinner94540602017-12-16 04:54:22 +0100345#endif
346 /* Successfully configured locale, so make it the default */
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200347 _coerce_default_locale_settings(warn, target);
Victor Stinner8ea09112018-09-03 17:05:18 +0200348 goto done;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000349 }
350 }
351 }
352 /* No C locale warning here, as Py_Initialize will emit one later */
Victor Stinner8ea09112018-09-03 17:05:18 +0200353
354 setlocale(LC_CTYPE, oldloc);
355
356done:
357 PyMem_RawFree(oldloc);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000358#endif
359}
360
xdegaye1588be62017-11-12 12:45:59 +0100361/* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to
362 * isolate the idiosyncrasies of different libc implementations. It reads the
363 * appropriate environment variable and uses its value to select the locale for
364 * 'category'. */
365char *
366_Py_SetLocaleFromEnv(int category)
367{
Victor Stinner353933e2018-11-23 13:08:26 +0100368 char *res;
xdegaye1588be62017-11-12 12:45:59 +0100369#ifdef __ANDROID__
370 const char *locale;
371 const char **pvar;
372#ifdef PY_COERCE_C_LOCALE
373 const char *coerce_c_locale;
374#endif
375 const char *utf8_locale = "C.UTF-8";
376 const char *env_var_set[] = {
377 "LC_ALL",
378 "LC_CTYPE",
379 "LANG",
380 NULL,
381 };
382
383 /* Android setlocale(category, "") doesn't check the environment variables
384 * and incorrectly sets the "C" locale at API 24 and older APIs. We only
385 * check the environment variables listed in env_var_set. */
386 for (pvar=env_var_set; *pvar; pvar++) {
387 locale = getenv(*pvar);
388 if (locale != NULL && *locale != '\0') {
389 if (strcmp(locale, utf8_locale) == 0 ||
390 strcmp(locale, "en_US.UTF-8") == 0) {
391 return setlocale(category, utf8_locale);
392 }
393 return setlocale(category, "C");
394 }
395 }
396
397 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
398 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
399 * Quote from POSIX section "8.2 Internationalization Variables":
400 * "4. If the LANG environment variable is not set or is set to the empty
401 * string, the implementation-defined default locale shall be used." */
402
403#ifdef PY_COERCE_C_LOCALE
404 coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
405 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
406 /* Some other ported code may check the environment variables (e.g. in
407 * extension modules), so we make sure that they match the locale
408 * configuration */
409 if (setenv("LC_CTYPE", utf8_locale, 1)) {
410 fprintf(stderr, "Warning: failed setting the LC_CTYPE "
411 "environment variable to %s\n", utf8_locale);
412 }
413 }
414#endif
Victor Stinner353933e2018-11-23 13:08:26 +0100415 res = setlocale(category, utf8_locale);
416#else /* !defined(__ANDROID__) */
417 res = setlocale(category, "");
418#endif
419 _Py_ResetForceASCII();
420 return res;
xdegaye1588be62017-11-12 12:45:59 +0100421}
422
Nick Coghlan6ea41862017-06-11 13:16:15 +1000423
Eric Snow1abcf672017-05-23 21:46:51 -0700424/* Global initializations. Can be undone by Py_Finalize(). Don't
425 call this twice without an intervening Py_Finalize() call.
426
Victor Stinner484f20d2019-03-27 02:04:16 +0100427 Every call to _Py_InitializeFromConfig, Py_Initialize or Py_InitializeEx
Eric Snow1abcf672017-05-23 21:46:51 -0700428 must have a corresponding call to Py_Finalize.
429
430 Locking: you must hold the interpreter lock while calling these APIs.
431 (If the lock has not yet been initialized, that's equivalent to
432 having the lock, but you cannot use multiple threads.)
433
434*/
435
Victor Stinner1dc6e392018-07-25 02:49:17 +0200436static _PyInitError
Victor Stinner43125222019-04-24 18:23:53 +0200437_Py_Initialize_ReconfigureCore(_PyRuntimeState *runtime,
438 PyInterpreterState **interp_p,
Victor Stinner1dc6e392018-07-25 02:49:17 +0200439 const _PyCoreConfig *core_config)
440{
Victor Stinner1a9f0d82019-05-01 15:22:52 +0200441 _PyInitError err;
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100442 PyThreadState *tstate = _PyThreadState_GET();
443 if (!tstate) {
444 return _Py_INIT_ERR("failed to read thread state");
445 }
446
447 PyInterpreterState *interp = tstate->interp;
448 if (interp == NULL) {
449 return _Py_INIT_ERR("can't make main interpreter");
450 }
451 *interp_p = interp;
452
Victor Stinner43125222019-04-24 18:23:53 +0200453 _PyCoreConfig_Write(core_config, runtime);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200454
Victor Stinner1a9f0d82019-05-01 15:22:52 +0200455 err = _PyCoreConfig_Copy(&interp->core_config, core_config);
456 if (_Py_INIT_FAILED(err)) {
457 return err;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200458 }
459 core_config = &interp->core_config;
460
461 if (core_config->_install_importlib) {
Victor Stinner1a9f0d82019-05-01 15:22:52 +0200462 err = _PyCoreConfig_SetPathConfig(core_config);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200463 if (_Py_INIT_FAILED(err)) {
464 return err;
465 }
466 }
467 return _Py_INIT_OK();
468}
469
470
Victor Stinner1dc6e392018-07-25 02:49:17 +0200471static _PyInitError
Victor Stinner43125222019-04-24 18:23:53 +0200472pycore_init_runtime(_PyRuntimeState *runtime,
473 const _PyCoreConfig *core_config)
Nick Coghland6009512014-11-20 21:39:37 +1000474{
Victor Stinner43125222019-04-24 18:23:53 +0200475 if (runtime->initialized) {
Victor Stinner1dc6e392018-07-25 02:49:17 +0200476 return _Py_INIT_ERR("main interpreter already initialized");
477 }
Victor Stinnerda273412017-12-15 01:46:02 +0100478
Victor Stinner43125222019-04-24 18:23:53 +0200479 _PyCoreConfig_Write(core_config, runtime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600480
Eric Snow1abcf672017-05-23 21:46:51 -0700481 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
482 * threads behave a little more gracefully at interpreter shutdown.
483 * We clobber it here so the new interpreter can start with a clean
484 * slate.
485 *
486 * However, this may still lead to misbehaviour if there are daemon
487 * threads still hanging around from a previous Py_Initialize/Finalize
488 * pair :(
489 */
Victor Stinner43125222019-04-24 18:23:53 +0200490 runtime->finalizing = NULL;
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600491
Victor Stinner43125222019-04-24 18:23:53 +0200492 _PyInitError err = _Py_HashRandomization_Init(core_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800493 if (_Py_INIT_FAILED(err)) {
494 return err;
495 }
496
Victor Stinner43125222019-04-24 18:23:53 +0200497 err = _PyInterpreterState_Enable(runtime);
Victor Stinnera7368ac2017-11-15 18:11:45 -0800498 if (_Py_INIT_FAILED(err)) {
499 return err;
500 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100501 return _Py_INIT_OK();
502}
Victor Stinnera7368ac2017-11-15 18:11:45 -0800503
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100504
505static _PyInitError
Victor Stinner43125222019-04-24 18:23:53 +0200506pycore_create_interpreter(_PyRuntimeState *runtime,
507 const _PyCoreConfig *core_config,
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100508 PyInterpreterState **interp_p)
509{
510 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnerda273412017-12-15 01:46:02 +0100511 if (interp == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800512 return _Py_INIT_ERR("can't make main interpreter");
Victor Stinnerda273412017-12-15 01:46:02 +0100513 }
Victor Stinner1dc6e392018-07-25 02:49:17 +0200514 *interp_p = interp;
Victor Stinnerda273412017-12-15 01:46:02 +0100515
Victor Stinner1a9f0d82019-05-01 15:22:52 +0200516 _PyInitError err = _PyCoreConfig_Copy(&interp->core_config, core_config);
517 if (_Py_INIT_FAILED(err)) {
518 return err;
Victor Stinnerda273412017-12-15 01:46:02 +0100519 }
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200520 core_config = &interp->core_config;
Nick Coghland6009512014-11-20 21:39:37 +1000521
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200522 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +1000523 if (tstate == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800524 return _Py_INIT_ERR("can't make first thread");
Nick Coghland6009512014-11-20 21:39:37 +1000525 (void) PyThreadState_Swap(tstate);
526
Victor Stinner99fcc612019-04-29 13:04:07 +0200527 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
528 destroying the GIL might fail when it is being referenced from
529 another running thread (see issue #9901).
Nick Coghland6009512014-11-20 21:39:37 +1000530 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000531 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Victor Stinner09532fe2019-05-10 23:39:09 +0200532 _PyEval_FiniThreads(&runtime->ceval);
Victor Stinner2914bb32018-01-29 11:57:45 +0100533
Nick Coghland6009512014-11-20 21:39:37 +1000534 /* Auto-thread-state API */
Victor Stinner43125222019-04-24 18:23:53 +0200535 _PyGILState_Init(runtime, interp, tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000536
Victor Stinner2914bb32018-01-29 11:57:45 +0100537 /* Create the GIL */
538 PyEval_InitThreads();
539
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100540 return _Py_INIT_OK();
541}
Nick Coghland6009512014-11-20 21:39:37 +1000542
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100543
544static _PyInitError
545pycore_init_types(void)
546{
Victor Stinnerab672812019-01-23 15:04:40 +0100547 _PyInitError err = _PyTypes_Init();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100548 if (_Py_INIT_FAILED(err)) {
549 return err;
550 }
551
552 err = _PyUnicode_Init();
553 if (_Py_INIT_FAILED(err)) {
554 return err;
555 }
556
557 if (_PyStructSequence_Init() < 0) {
558 return _Py_INIT_ERR("can't initialize structseq");
559 }
560
561 if (!_PyLong_Init()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800562 return _Py_INIT_ERR("can't init longs");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100563 }
Nick Coghland6009512014-11-20 21:39:37 +1000564
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100565 err = _PyExc_Init();
566 if (_Py_INIT_FAILED(err)) {
567 return err;
568 }
569
570 if (!_PyFloat_Init()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800571 return _Py_INIT_ERR("can't init float");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100572 }
Nick Coghland6009512014-11-20 21:39:37 +1000573
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100574 if (!_PyContext_Init()) {
575 return _Py_INIT_ERR("can't init context");
576 }
577 return _Py_INIT_OK();
578}
579
580
581static _PyInitError
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100582pycore_init_builtins(PyInterpreterState *interp)
583{
584 PyObject *bimod = _PyBuiltin_Init();
585 if (bimod == NULL) {
586 return _Py_INIT_ERR("can't initialize builtins modules");
587 }
588 _PyImport_FixupBuiltin(bimod, "builtins", interp->modules);
589
590 interp->builtins = PyModule_GetDict(bimod);
591 if (interp->builtins == NULL) {
592 return _Py_INIT_ERR("can't initialize builtins dict");
593 }
594 Py_INCREF(interp->builtins);
595
596 _PyInitError err = _PyBuiltins_AddExceptions(bimod);
597 if (_Py_INIT_FAILED(err)) {
598 return err;
599 }
600 return _Py_INIT_OK();
601}
602
603
604static _PyInitError
605pycore_init_import_warnings(PyInterpreterState *interp, PyObject *sysmod)
606{
607 _PyInitError err = _PyImport_Init(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800608 if (_Py_INIT_FAILED(err)) {
609 return err;
610 }
Nick Coghland6009512014-11-20 21:39:37 +1000611
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800612 err = _PyImportHooks_Init();
613 if (_Py_INIT_FAILED(err)) {
614 return err;
615 }
Nick Coghland6009512014-11-20 21:39:37 +1000616
617 /* Initialize _warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100618 if (_PyWarnings_Init() == NULL) {
Victor Stinner1f151112017-11-23 10:43:14 +0100619 return _Py_INIT_ERR("can't initialize warnings");
620 }
Nick Coghland6009512014-11-20 21:39:37 +1000621
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100622 if (interp->core_config._install_importlib) {
623 err = _PyCoreConfig_SetPathConfig(&interp->core_config);
Victor Stinnerb1147e42018-07-21 02:06:16 +0200624 if (_Py_INIT_FAILED(err)) {
625 return err;
626 }
627 }
628
Eric Snow1abcf672017-05-23 21:46:51 -0700629 /* This call sets up builtin and frozen import support */
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100630 if (interp->core_config._install_importlib) {
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400631 err = init_importlib(interp, sysmod);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800632 if (_Py_INIT_FAILED(err)) {
633 return err;
634 }
Eric Snow1abcf672017-05-23 21:46:51 -0700635 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100636 return _Py_INIT_OK();
637}
638
639
640static _PyInitError
Victor Stinner43125222019-04-24 18:23:53 +0200641_Py_InitializeCore_impl(_PyRuntimeState *runtime,
642 PyInterpreterState **interp_p,
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100643 const _PyCoreConfig *core_config)
644{
645 PyInterpreterState *interp;
646
Victor Stinner43125222019-04-24 18:23:53 +0200647 _PyCoreConfig_Write(core_config, runtime);
Victor Stinner20004952019-03-26 02:31:11 +0100648
Victor Stinner43125222019-04-24 18:23:53 +0200649 _PyInitError err = pycore_init_runtime(runtime, core_config);
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100650 if (_Py_INIT_FAILED(err)) {
651 return err;
652 }
653
Victor Stinner43125222019-04-24 18:23:53 +0200654 err = pycore_create_interpreter(runtime, core_config, &interp);
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100655 if (_Py_INIT_FAILED(err)) {
656 return err;
657 }
658 core_config = &interp->core_config;
659 *interp_p = interp;
660
661 err = pycore_init_types();
662 if (_Py_INIT_FAILED(err)) {
663 return err;
664 }
665
666 PyObject *sysmod;
Victor Stinner43125222019-04-24 18:23:53 +0200667 err = _PySys_Create(runtime, interp, &sysmod);
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100668 if (_Py_INIT_FAILED(err)) {
669 return err;
670 }
671
672 err = pycore_init_builtins(interp);
673 if (_Py_INIT_FAILED(err)) {
674 return err;
675 }
676
677 err = pycore_init_import_warnings(interp, sysmod);
678 if (_Py_INIT_FAILED(err)) {
679 return err;
680 }
Eric Snow1abcf672017-05-23 21:46:51 -0700681
682 /* Only when we get here is the runtime core fully initialized */
Victor Stinner43125222019-04-24 18:23:53 +0200683 runtime->core_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800684 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700685}
686
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100687
Victor Stinner70005ac2019-05-02 15:25:34 -0400688_PyInitError
689_Py_PreInitializeFromPyArgv(const _PyPreConfig *src_config, const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100690{
691 _PyInitError err;
692
693 err = _PyRuntime_Initialize();
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100694 if (_Py_INIT_FAILED(err)) {
Victor Stinner5ac27a52019-03-27 13:40:14 +0100695 return err;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100696 }
Victor Stinner43125222019-04-24 18:23:53 +0200697 _PyRuntimeState *runtime = &_PyRuntime;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100698
Victor Stinner43125222019-04-24 18:23:53 +0200699 if (runtime->pre_initialized) {
Victor Stinnerf72346c2019-03-25 17:54:58 +0100700 /* If it's already configured: ignored the new configuration */
Victor Stinner5ac27a52019-03-27 13:40:14 +0100701 return _Py_INIT_OK();
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100702 }
703
Victor Stinner5ac27a52019-03-27 13:40:14 +0100704 _PyPreConfig config = _PyPreConfig_INIT;
705
Victor Stinnerf72346c2019-03-25 17:54:58 +0100706 if (src_config) {
Victor Stinner5ac27a52019-03-27 13:40:14 +0100707 if (_PyPreConfig_Copy(&config, src_config) < 0) {
708 err = _Py_INIT_NO_MEMORY();
Victor Stinner20004952019-03-26 02:31:11 +0100709 goto done;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100710 }
711 }
712
Victor Stinner5ac27a52019-03-27 13:40:14 +0100713 err = _PyPreConfig_Read(&config, args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100714 if (_Py_INIT_FAILED(err)) {
Victor Stinner20004952019-03-26 02:31:11 +0100715 goto done;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100716 }
717
Victor Stinner5ac27a52019-03-27 13:40:14 +0100718 err = _PyPreConfig_Write(&config);
Victor Stinnerf72346c2019-03-25 17:54:58 +0100719 if (_Py_INIT_FAILED(err)) {
Victor Stinner20004952019-03-26 02:31:11 +0100720 goto done;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100721 }
722
Victor Stinner43125222019-04-24 18:23:53 +0200723 runtime->pre_initialized = 1;
Victor Stinner20004952019-03-26 02:31:11 +0100724 err = _Py_INIT_OK();
725
726done:
Victor Stinner5ac27a52019-03-27 13:40:14 +0100727 _PyPreConfig_Clear(&config);
Victor Stinner20004952019-03-26 02:31:11 +0100728 return err;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100729}
730
Victor Stinner70005ac2019-05-02 15:25:34 -0400731
Victor Stinnerf72346c2019-03-25 17:54:58 +0100732_PyInitError
Victor Stinner5ac27a52019-03-27 13:40:14 +0100733_Py_PreInitializeFromArgs(const _PyPreConfig *src_config, int argc, char **argv)
Victor Stinnerf72346c2019-03-25 17:54:58 +0100734{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100735 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400736 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100737}
738
739
740_PyInitError
Victor Stinner5ac27a52019-03-27 13:40:14 +0100741_Py_PreInitializeFromWideArgs(const _PyPreConfig *src_config, int argc, wchar_t **argv)
Victor Stinner20004952019-03-26 02:31:11 +0100742{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100743 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
Victor Stinner70005ac2019-05-02 15:25:34 -0400744 return _Py_PreInitializeFromPyArgv(src_config, &args);
Victor Stinner20004952019-03-26 02:31:11 +0100745}
746
747
748_PyInitError
Victor Stinner5ac27a52019-03-27 13:40:14 +0100749_Py_PreInitialize(const _PyPreConfig *src_config)
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100750{
Victor Stinner70005ac2019-05-02 15:25:34 -0400751 return _Py_PreInitializeFromPyArgv(src_config, NULL);
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100752}
753
754
755_PyInitError
Victor Stinner70005ac2019-05-02 15:25:34 -0400756_Py_PreInitializeFromCoreConfig(const _PyCoreConfig *coreconfig,
757 const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100758{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100759 _PyPreConfig config = _PyPreConfig_INIT;
Victor Stinner70005ac2019-05-02 15:25:34 -0400760 if (coreconfig != NULL) {
761 _PyCoreConfig_GetCoreConfig(&config, coreconfig);
762 }
763 return _Py_PreInitializeFromPyArgv(&config, args);
Victor Stinner5ac27a52019-03-27 13:40:14 +0100764 /* No need to clear config:
765 _PyCoreConfig_GetCoreConfig() doesn't allocate memory */
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100766}
767
768
769static _PyInitError
Victor Stinner43125222019-04-24 18:23:53 +0200770pyinit_coreconfig(_PyRuntimeState *runtime,
771 _PyCoreConfig *config,
Victor Stinner5ac27a52019-03-27 13:40:14 +0100772 const _PyCoreConfig *src_config,
773 const _PyArgv *args,
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100774 PyInterpreterState **interp_p)
775{
Victor Stinner5f38b842019-05-01 02:30:12 +0200776 _PyInitError err;
777
Victor Stinnerd929f182019-03-27 18:28:46 +0100778 if (src_config) {
Victor Stinner1a9f0d82019-05-01 15:22:52 +0200779 err = _PyCoreConfig_Copy(config, src_config);
780 if (_Py_INIT_FAILED(err)) {
781 return err;
Victor Stinnerd929f182019-03-27 18:28:46 +0100782 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100783 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100784
Victor Stinner5f38b842019-05-01 02:30:12 +0200785 if (args) {
786 err = _PyCoreConfig_SetPyArgv(config, args);
787 if (_Py_INIT_FAILED(err)) {
788 return err;
789 }
790 }
791
792 err = _PyCoreConfig_Read(config);
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100793 if (_Py_INIT_FAILED(err)) {
794 return err;
795 }
796
Victor Stinner43125222019-04-24 18:23:53 +0200797 if (!runtime->core_initialized) {
798 return _Py_InitializeCore_impl(runtime, interp_p, config);
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100799 }
800 else {
Victor Stinner43125222019-04-24 18:23:53 +0200801 return _Py_Initialize_ReconfigureCore(runtime, interp_p, config);
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100802 }
803}
804
805
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100806/* Begin interpreter initialization
807 *
808 * On return, the first thread and interpreter state have been created,
809 * but the compiler, signal handling, multithreading and
810 * multiple interpreter support, and codec infrastructure are not yet
811 * available.
812 *
813 * The import system will support builtin and frozen modules only.
814 * The only supported io is writing to sys.stderr
815 *
816 * If any operation invoked by this function fails, a fatal error is
817 * issued and the function does not return.
818 *
819 * Any code invoked from this function should *not* assume it has access
820 * to the Python C API (unless the API is explicitly listed as being
821 * safe to call without calling Py_Initialize first)
822 */
Victor Stinner484f20d2019-03-27 02:04:16 +0100823static _PyInitError
Victor Stinner43125222019-04-24 18:23:53 +0200824_Py_InitializeCore(_PyRuntimeState *runtime,
825 const _PyCoreConfig *src_config,
Victor Stinner5ac27a52019-03-27 13:40:14 +0100826 const _PyArgv *args,
Victor Stinnerf8ba6f52019-03-26 16:58:50 +0100827 PyInterpreterState **interp_p)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200828{
Victor Stinnerd929f182019-03-27 18:28:46 +0100829 _PyInitError err;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200830
Victor Stinner70005ac2019-05-02 15:25:34 -0400831 err = _Py_PreInitializeFromCoreConfig(src_config, args);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200832 if (_Py_INIT_FAILED(err)) {
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100833 return err;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200834 }
835
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100836 _PyCoreConfig local_config = _PyCoreConfig_INIT;
Victor Stinner43125222019-04-24 18:23:53 +0200837 err = pyinit_coreconfig(runtime, &local_config, src_config, args, interp_p);
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100838 _PyCoreConfig_Clear(&local_config);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200839 return err;
840}
841
Victor Stinner5ac27a52019-03-27 13:40:14 +0100842
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200843/* Py_Initialize() has already been called: update the main interpreter
844 configuration. Example of bpo-34008: Py_Main() called after
845 Py_Initialize(). */
846static _PyInitError
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100847_Py_ReconfigureMainInterpreter(PyInterpreterState *interp)
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200848{
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100849 _PyCoreConfig *core_config = &interp->core_config;
850
851 PyObject *argv = _PyWstrList_AsList(&core_config->argv);
852 if (argv == NULL) {
853 return _Py_INIT_NO_MEMORY(); \
854 }
855
856 int res = PyDict_SetItemString(interp->sysdict, "argv", argv);
857 Py_DECREF(argv);
858 if (res < 0) {
859 return _Py_INIT_ERR("fail to set sys.argv");
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200860 }
861 return _Py_INIT_OK();
862}
863
Eric Snowc7ec9982017-05-23 23:00:52 -0700864/* Update interpreter state based on supplied configuration settings
865 *
866 * After calling this function, most of the restrictions on the interpreter
867 * are lifted. The only remaining incomplete settings are those related
868 * to the main module (sys.argv[0], __main__ metadata)
869 *
870 * Calling this when the interpreter is not initializing, is already
871 * initialized or without a valid current thread state is a fatal error.
872 * Other errors should be reported as normal Python exceptions with a
873 * non-zero return code.
874 */
Victor Stinner5ac27a52019-03-27 13:40:14 +0100875static _PyInitError
Victor Stinner43125222019-04-24 18:23:53 +0200876_Py_InitializeMainInterpreter(_PyRuntimeState *runtime,
877 PyInterpreterState *interp)
Eric Snow1abcf672017-05-23 21:46:51 -0700878{
Victor Stinner43125222019-04-24 18:23:53 +0200879 if (!runtime->core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800880 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700881 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700882
Victor Stinner1dc6e392018-07-25 02:49:17 +0200883 /* Configure the main interpreter */
Victor Stinner1dc6e392018-07-25 02:49:17 +0200884 _PyCoreConfig *core_config = &interp->core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700885
Victor Stinner43125222019-04-24 18:23:53 +0200886 if (runtime->initialized) {
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100887 return _Py_ReconfigureMainInterpreter(interp);
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200888 }
889
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200890 if (!core_config->_install_importlib) {
Eric Snow1abcf672017-05-23 21:46:51 -0700891 /* Special mode for freeze_importlib: run with no import system
892 *
893 * This means anything which needs support from extension modules
894 * or pure Python code in the standard library won't work.
895 */
Victor Stinner43125222019-04-24 18:23:53 +0200896 runtime->initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800897 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700898 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100899
Victor Stinner33c377e2017-12-05 15:12:41 +0100900 if (_PyTime_Init() < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800901 return _Py_INIT_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100902 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200903
Victor Stinner43125222019-04-24 18:23:53 +0200904 if (_PySys_InitMain(runtime, interp) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800905 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100906 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800907
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400908 _PyInitError err = init_importlib_external(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800909 if (_Py_INIT_FAILED(err)) {
910 return err;
911 }
Nick Coghland6009512014-11-20 21:39:37 +1000912
913 /* initialize the faulthandler module */
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200914 err = _PyFaulthandler_Init(core_config->faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800915 if (_Py_INIT_FAILED(err)) {
916 return err;
917 }
Nick Coghland6009512014-11-20 21:39:37 +1000918
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400919 err = _PyUnicode_InitEncodings(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800920 if (_Py_INIT_FAILED(err)) {
921 return err;
922 }
Nick Coghland6009512014-11-20 21:39:37 +1000923
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100924 if (core_config->install_signal_handlers) {
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400925 err = init_signals();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800926 if (_Py_INIT_FAILED(err)) {
927 return err;
928 }
929 }
Nick Coghland6009512014-11-20 21:39:37 +1000930
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200931 if (_PyTraceMalloc_Init(core_config->tracemalloc) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800932 return _Py_INIT_ERR("can't initialize tracemalloc");
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200933 }
Nick Coghland6009512014-11-20 21:39:37 +1000934
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800935 err = add_main_module(interp);
936 if (_Py_INIT_FAILED(err)) {
937 return err;
938 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800939
Victor Stinner91106cd2017-12-13 12:29:09 +0100940 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -0800941 if (_Py_INIT_FAILED(err)) {
942 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800943 }
Nick Coghland6009512014-11-20 21:39:37 +1000944
945 /* Initialize warnings. */
Victor Stinner37cd9822018-11-16 11:55:35 +0100946 PyObject *warnoptions = PySys_GetObject("warnoptions");
947 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
Victor Stinner5d862462017-12-19 11:35:58 +0100948 {
Nick Coghland6009512014-11-20 21:39:37 +1000949 PyObject *warnings_module = PyImport_ImportModule("warnings");
950 if (warnings_module == NULL) {
951 fprintf(stderr, "'import warnings' failed; traceback:\n");
952 PyErr_Print();
953 }
954 Py_XDECREF(warnings_module);
955 }
956
Victor Stinner43125222019-04-24 18:23:53 +0200957 runtime->initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700958
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200959 if (core_config->site_import) {
Victor Stinner43fc3bb2019-05-02 11:54:20 -0400960 err = init_import_size(); /* Module site */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800961 if (_Py_INIT_FAILED(err)) {
962 return err;
963 }
964 }
Victor Stinnercf215042018-08-29 22:56:06 +0200965
966#ifndef MS_WINDOWS
Victor Stinner43125222019-04-24 18:23:53 +0200967 emit_stderr_warning_for_legacy_locale(runtime);
Victor Stinnercf215042018-08-29 22:56:06 +0200968#endif
969
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800970 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000971}
972
Victor Stinner9ef5dca2019-05-16 17:38:16 +0200973
974_PyInitError
975_Py_InitializeMain(void)
976{
977 _PyInitError err = _PyRuntime_Initialize();
978 if (_Py_INIT_FAILED(err)) {
979 return err;
980 }
981 _PyRuntimeState *runtime = &_PyRuntime;
982 PyInterpreterState *interp = _PyRuntimeState_GetThreadState(runtime)->interp;
983
984 return _Py_InitializeMainInterpreter(runtime, interp);
985}
986
987
Eric Snowc7ec9982017-05-23 23:00:52 -0700988#undef _INIT_DEBUG_PRINT
989
Victor Stinner5ac27a52019-03-27 13:40:14 +0100990static _PyInitError
991init_python(const _PyCoreConfig *config, const _PyArgv *args)
Eric Snow1abcf672017-05-23 21:46:51 -0700992{
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800993 _PyInitError err;
Victor Stinner43125222019-04-24 18:23:53 +0200994
995 err = _PyRuntime_Initialize();
996 if (_Py_INIT_FAILED(err)) {
997 return err;
998 }
999 _PyRuntimeState *runtime = &_PyRuntime;
1000
1001 PyInterpreterState *interp = NULL;
1002 err = _Py_InitializeCore(runtime, config, args, &interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001003 if (_Py_INIT_FAILED(err)) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001004 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001005 }
Victor Stinner1dc6e392018-07-25 02:49:17 +02001006 config = &interp->core_config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +01001007
Victor Stinner9ef5dca2019-05-16 17:38:16 +02001008 if (config->_init_main) {
Victor Stinner43125222019-04-24 18:23:53 +02001009 err = _Py_InitializeMainInterpreter(runtime, interp);
Victor Stinner484f20d2019-03-27 02:04:16 +01001010 if (_Py_INIT_FAILED(err)) {
1011 return err;
1012 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001013 }
Victor Stinner484f20d2019-03-27 02:04:16 +01001014
Victor Stinner1dc6e392018-07-25 02:49:17 +02001015 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -07001016}
1017
1018
Victor Stinner5ac27a52019-03-27 13:40:14 +01001019_PyInitError
1020_Py_InitializeFromArgs(const _PyCoreConfig *config, int argc, char **argv)
1021{
1022 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
1023 return init_python(config, &args);
1024}
1025
1026
1027_PyInitError
1028_Py_InitializeFromWideArgs(const _PyCoreConfig *config, int argc, wchar_t **argv)
1029{
1030 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
1031 return init_python(config, &args);
1032}
1033
1034
1035_PyInitError
1036_Py_InitializeFromConfig(const _PyCoreConfig *config)
1037{
1038 return init_python(config, NULL);
1039}
1040
1041
Eric Snow1abcf672017-05-23 21:46:51 -07001042void
Nick Coghland6009512014-11-20 21:39:37 +10001043Py_InitializeEx(int install_sigs)
1044{
Victor Stinner43125222019-04-24 18:23:53 +02001045 _PyInitError err;
1046
1047 err = _PyRuntime_Initialize();
1048 if (_Py_INIT_FAILED(err)) {
1049 _Py_ExitInitError(err);
1050 }
1051 _PyRuntimeState *runtime = &_PyRuntime;
1052
1053 if (runtime->initialized) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001054 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
1055 return;
1056 }
1057
Victor Stinner1dc6e392018-07-25 02:49:17 +02001058 _PyCoreConfig config = _PyCoreConfig_INIT;
1059 config.install_signal_handlers = install_sigs;
1060
Victor Stinner43125222019-04-24 18:23:53 +02001061 err = _Py_InitializeFromConfig(&config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001062 if (_Py_INIT_FAILED(err)) {
Victor Stinnerdfe88472019-03-01 12:14:41 +01001063 _Py_ExitInitError(err);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001064 }
Nick Coghland6009512014-11-20 21:39:37 +10001065}
1066
1067void
1068Py_Initialize(void)
1069{
1070 Py_InitializeEx(1);
1071}
1072
1073
1074#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001075extern void _Py_dump_counts(FILE*);
Nick Coghland6009512014-11-20 21:39:37 +10001076#endif
1077
1078/* Flush stdout and stderr */
1079
1080static int
1081file_is_closed(PyObject *fobj)
1082{
1083 int r;
1084 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1085 if (tmp == NULL) {
1086 PyErr_Clear();
1087 return 0;
1088 }
1089 r = PyObject_IsTrue(tmp);
1090 Py_DECREF(tmp);
1091 if (r < 0)
1092 PyErr_Clear();
1093 return r > 0;
1094}
1095
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001096static int
Nick Coghland6009512014-11-20 21:39:37 +10001097flush_std_files(void)
1098{
1099 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1100 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1101 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001102 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001103
1104 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001105 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001106 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001107 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001108 status = -1;
1109 }
Nick Coghland6009512014-11-20 21:39:37 +10001110 else
1111 Py_DECREF(tmp);
1112 }
1113
1114 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001115 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001116 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001117 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001118 status = -1;
1119 }
Nick Coghland6009512014-11-20 21:39:37 +10001120 else
1121 Py_DECREF(tmp);
1122 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001123
1124 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001125}
1126
1127/* Undo the effect of Py_Initialize().
1128
1129 Beware: if multiple interpreter and/or thread states exist, these
1130 are not wiped out; only the current thread and interpreter state
1131 are deleted. But since everything else is deleted, those other
1132 interpreter and thread states should no longer be used.
1133
1134 (XXX We should do better, e.g. wipe out all interpreters and
1135 threads.)
1136
1137 Locking: as above.
1138
1139*/
1140
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001141int
1142Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001143{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001144 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001145
Victor Stinner8e91c242019-04-24 17:24:01 +02001146 _PyRuntimeState *runtime = &_PyRuntime;
1147 if (!runtime->initialized) {
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001148 return status;
Victor Stinner8e91c242019-04-24 17:24:01 +02001149 }
Nick Coghland6009512014-11-20 21:39:37 +10001150
Eric Snow842a2f02019-03-15 15:47:51 -06001151 // Wrap up existing "threading"-module-created, non-daemon threads.
Nick Coghland6009512014-11-20 21:39:37 +10001152 wait_for_thread_shutdown();
1153
Eric Snow842a2f02019-03-15 15:47:51 -06001154 // Make any remaining pending calls.
Victor Stinner09532fe2019-05-10 23:39:09 +02001155 _Py_FinishPendingCalls(runtime);
Eric Snow842a2f02019-03-15 15:47:51 -06001156
Victor Stinner8e91c242019-04-24 17:24:01 +02001157 /* Get current thread state and interpreter pointer */
Victor Stinner09532fe2019-05-10 23:39:09 +02001158 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
Victor Stinner8e91c242019-04-24 17:24:01 +02001159 PyInterpreterState *interp = tstate->interp;
1160
Nick Coghland6009512014-11-20 21:39:37 +10001161 /* The interpreter is still entirely intact at this point, and the
1162 * exit funcs may be relying on that. In particular, if some thread
1163 * or exit func is still waiting to do an import, the import machinery
1164 * expects Py_IsInitialized() to return true. So don't say the
Eric Snow842a2f02019-03-15 15:47:51 -06001165 * runtime is uninitialized until after the exit funcs have run.
Nick Coghland6009512014-11-20 21:39:37 +10001166 * Note that Threading.py uses an exit func to do a join on all the
1167 * threads created thru it, so this also protects pending imports in
1168 * the threads created via Threading.
1169 */
Nick Coghland6009512014-11-20 21:39:37 +10001170
Marcel Plch776407f2017-12-20 11:17:58 +01001171 call_py_exitfuncs(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001172
Victor Stinnerda273412017-12-15 01:46:02 +01001173 /* Copy the core config, PyInterpreterState_Delete() free
1174 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001175#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001176 int show_ref_count = interp->core_config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001177#endif
1178#ifdef Py_TRACE_REFS
Victor Stinnerda273412017-12-15 01:46:02 +01001179 int dump_refs = interp->core_config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001180#endif
1181#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001182 int malloc_stats = interp->core_config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001183#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001184
Nick Coghland6009512014-11-20 21:39:37 +10001185 /* Remaining threads (e.g. daemon threads) will automatically exit
1186 after taking the GIL (in PyEval_RestoreThread()). */
Victor Stinner8e91c242019-04-24 17:24:01 +02001187 runtime->finalizing = tstate;
1188 runtime->initialized = 0;
1189 runtime->core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001190
Victor Stinnere0deff32015-03-24 13:46:18 +01001191 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001192 if (flush_std_files() < 0) {
1193 status = -1;
1194 }
Nick Coghland6009512014-11-20 21:39:37 +10001195
1196 /* Disable signal handling */
1197 PyOS_FiniInterrupts();
1198
1199 /* Collect garbage. This may call finalizers; it's nice to call these
1200 * before all modules are destroyed.
1201 * XXX If a __del__ or weakref callback is triggered here, and tries to
1202 * XXX import a module, bad things can happen, because Python no
1203 * XXX longer believes it's initialized.
1204 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1205 * XXX is easy to provoke that way. I've also seen, e.g.,
1206 * XXX Exception exceptions.ImportError: 'No module named sha'
1207 * XXX in <function callback at 0x008F5718> ignored
1208 * XXX but I'm unclear on exactly how that one happens. In any case,
1209 * XXX I haven't seen a real-life report of either of these.
1210 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001211 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001212#ifdef COUNT_ALLOCS
1213 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1214 each collection might release some types from the type
1215 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001216 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001217 /* nothing */;
1218#endif
Eric Snowdae02762017-09-14 00:35:58 -07001219
Nick Coghland6009512014-11-20 21:39:37 +10001220 /* Destroy all modules */
1221 PyImport_Cleanup();
1222
Victor Stinnere0deff32015-03-24 13:46:18 +01001223 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001224 if (flush_std_files() < 0) {
1225 status = -1;
1226 }
Nick Coghland6009512014-11-20 21:39:37 +10001227
1228 /* Collect final garbage. This disposes of cycles created by
1229 * class definitions, for example.
1230 * XXX This is disabled because it caused too many problems. If
1231 * XXX a __del__ or weakref callback triggers here, Python code has
1232 * XXX a hard time running, because even the sys module has been
1233 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1234 * XXX One symptom is a sequence of information-free messages
1235 * XXX coming from threads (if a __del__ or callback is invoked,
1236 * XXX other threads can execute too, and any exception they encounter
1237 * XXX triggers a comedy of errors as subsystem after subsystem
1238 * XXX fails to find what it *expects* to find in sys to help report
1239 * XXX the exception and consequent unexpected failures). I've also
1240 * XXX seen segfaults then, after adding print statements to the
1241 * XXX Python code getting called.
1242 */
1243#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001244 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001245#endif
1246
1247 /* Disable tracemalloc after all Python objects have been destroyed,
1248 so it is possible to use tracemalloc in objects destructor. */
1249 _PyTraceMalloc_Fini();
1250
1251 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1252 _PyImport_Fini();
1253
1254 /* Cleanup typeobject.c's internal caches. */
1255 _PyType_Fini();
1256
1257 /* unload faulthandler module */
1258 _PyFaulthandler_Fini();
1259
1260 /* Debugging stuff */
1261#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001262 _Py_dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001263#endif
1264 /* dump hash stats */
1265 _PyHash_Fini();
1266
Eric Snowdae02762017-09-14 00:35:58 -07001267#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001268 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001269 _PyDebug_PrintTotalRefs();
1270 }
Eric Snowdae02762017-09-14 00:35:58 -07001271#endif
Nick Coghland6009512014-11-20 21:39:37 +10001272
1273#ifdef Py_TRACE_REFS
1274 /* Display all objects still alive -- this can invoke arbitrary
1275 * __repr__ overrides, so requires a mostly-intact interpreter.
1276 * Alas, a lot of stuff may still be alive now that will be cleaned
1277 * up later.
1278 */
Victor Stinnerda273412017-12-15 01:46:02 +01001279 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001280 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001281 }
Nick Coghland6009512014-11-20 21:39:37 +10001282#endif /* Py_TRACE_REFS */
1283
1284 /* Clear interpreter state and all thread states. */
1285 PyInterpreterState_Clear(interp);
1286
1287 /* Now we decref the exception classes. After this point nothing
1288 can raise an exception. That's okay, because each Fini() method
1289 below has been checked to make sure no exceptions are ever
1290 raised.
1291 */
1292
1293 _PyExc_Fini();
1294
1295 /* Sundry finalizers */
1296 PyMethod_Fini();
1297 PyFrame_Fini();
1298 PyCFunction_Fini();
1299 PyTuple_Fini();
1300 PyList_Fini();
1301 PySet_Fini();
1302 PyBytes_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001303 PyLong_Fini();
1304 PyFloat_Fini();
1305 PyDict_Fini();
1306 PySlice_Fini();
Victor Stinner8e91c242019-04-24 17:24:01 +02001307 _PyGC_Fini(runtime);
Eric Snow86ea5812019-05-10 13:29:55 -04001308 _PyWarnings_Fini(interp);
Eric Snow6b4be192017-05-22 21:36:03 -07001309 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001310 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001311 PyAsyncGen_Fini();
Yury Selivanovf23746a2018-01-22 19:11:18 -05001312 _PyContext_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001313
1314 /* Cleanup Unicode implementation */
1315 _PyUnicode_Fini();
1316
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001317 _Py_ClearFileSystemEncoding();
Nick Coghland6009512014-11-20 21:39:37 +10001318
1319 /* XXX Still allocated:
1320 - various static ad-hoc pointers to interned strings
1321 - int and float free list blocks
1322 - whatever various modules and libraries allocate
1323 */
1324
1325 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1326
1327 /* Cleanup auto-thread-state */
Victor Stinner8e91c242019-04-24 17:24:01 +02001328 _PyGILState_Fini(runtime);
Nick Coghland6009512014-11-20 21:39:37 +10001329
1330 /* Delete current thread. After this, many C API calls become crashy. */
1331 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001332
Nick Coghland6009512014-11-20 21:39:37 +10001333 PyInterpreterState_Delete(interp);
1334
1335#ifdef Py_TRACE_REFS
1336 /* Display addresses (& refcnts) of all objects still alive.
1337 * An address can be used to find the repr of the object, printed
1338 * above by _Py_PrintReferences.
1339 */
Victor Stinnerda273412017-12-15 01:46:02 +01001340 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001341 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001342 }
Nick Coghland6009512014-11-20 21:39:37 +10001343#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001344#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001345 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001346 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be8072016-03-14 12:04:26 +01001347 }
Nick Coghland6009512014-11-20 21:39:37 +10001348#endif
1349
Victor Stinner8e91c242019-04-24 17:24:01 +02001350 call_ll_exitfuncs(runtime);
Victor Stinner9316ee42017-11-25 03:17:57 +01001351
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001352 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001353 return status;
1354}
1355
1356void
1357Py_Finalize(void)
1358{
1359 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001360}
1361
1362/* Create and initialize a new interpreter and thread, and return the
1363 new thread. This requires that Py_Initialize() has been called
1364 first.
1365
1366 Unsuccessful initialization yields a NULL pointer. Note that *no*
1367 exception information is available even in this case -- the
1368 exception information is held in the thread, and there is no
1369 thread.
1370
1371 Locking: as above.
1372
1373*/
1374
Victor Stinnera7368ac2017-11-15 18:11:45 -08001375static _PyInitError
1376new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001377{
Victor Stinner9316ee42017-11-25 03:17:57 +01001378 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001379
Victor Stinner43125222019-04-24 18:23:53 +02001380 err = _PyRuntime_Initialize();
1381 if (_Py_INIT_FAILED(err)) {
1382 return err;
1383 }
1384 _PyRuntimeState *runtime = &_PyRuntime;
1385
1386 if (!runtime->initialized) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001387 return _Py_INIT_ERR("Py_Initialize must be called first");
1388 }
Nick Coghland6009512014-11-20 21:39:37 +10001389
Victor Stinner8a1be612016-03-14 22:07:55 +01001390 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1391 interpreters: disable PyGILState_Check(). */
1392 _PyGILState_check_enabled = 0;
1393
Victor Stinner43125222019-04-24 18:23:53 +02001394 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001395 if (interp == NULL) {
1396 *tstate_p = NULL;
1397 return _Py_INIT_OK();
1398 }
Nick Coghland6009512014-11-20 21:39:37 +10001399
Victor Stinner43125222019-04-24 18:23:53 +02001400 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001401 if (tstate == NULL) {
1402 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001403 *tstate_p = NULL;
1404 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001405 }
1406
Victor Stinner43125222019-04-24 18:23:53 +02001407 PyThreadState *save_tstate = PyThreadState_Swap(tstate);
Nick Coghland6009512014-11-20 21:39:37 +10001408
Eric Snow1abcf672017-05-23 21:46:51 -07001409 /* Copy the current interpreter config into the new interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +01001410 _PyCoreConfig *core_config;
Eric Snow1abcf672017-05-23 21:46:51 -07001411 if (save_tstate != NULL) {
Victor Stinnerda273412017-12-15 01:46:02 +01001412 core_config = &save_tstate->interp->core_config;
Eric Snow1abcf672017-05-23 21:46:51 -07001413 } else {
1414 /* No current thread state, copy from the main interpreter */
1415 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinnerda273412017-12-15 01:46:02 +01001416 core_config = &main_interp->core_config;
Victor Stinnerda273412017-12-15 01:46:02 +01001417 }
1418
Victor Stinner1a9f0d82019-05-01 15:22:52 +02001419 err = _PyCoreConfig_Copy(&interp->core_config, core_config);
1420 if (_Py_INIT_FAILED(err)) {
1421 return err;
Victor Stinnerda273412017-12-15 01:46:02 +01001422 }
Victor Stinnerd19d8d52018-07-24 13:55:48 +02001423 core_config = &interp->core_config;
Eric Snow1abcf672017-05-23 21:46:51 -07001424
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001425 err = _PyExc_Init();
1426 if (_Py_INIT_FAILED(err)) {
1427 return err;
1428 }
1429
Nick Coghland6009512014-11-20 21:39:37 +10001430 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001431 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001432 if (modules == NULL) {
1433 return _Py_INIT_ERR("can't make modules dictionary");
1434 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001435 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001436
Victor Stinner43125222019-04-24 18:23:53 +02001437 PyObject *sysmod = _PyImport_FindBuiltin("sys", modules);
Eric Snowd393c1b2017-09-14 12:18:12 -06001438 if (sysmod != NULL) {
1439 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinner43125222019-04-24 18:23:53 +02001440 if (interp->sysdict == NULL) {
Eric Snowd393c1b2017-09-14 12:18:12 -06001441 goto handle_error;
Victor Stinner43125222019-04-24 18:23:53 +02001442 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001443 Py_INCREF(interp->sysdict);
1444 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner43125222019-04-24 18:23:53 +02001445 if (_PySys_InitMain(runtime, interp) < 0) {
Victor Stinnerab672812019-01-23 15:04:40 +01001446 return _Py_INIT_ERR("can't finish initializing sys");
1447 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001448 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001449 else if (PyErr_Occurred()) {
1450 goto handle_error;
1451 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001452
Victor Stinner43125222019-04-24 18:23:53 +02001453 PyObject *bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001454 if (bimod != NULL) {
1455 interp->builtins = PyModule_GetDict(bimod);
1456 if (interp->builtins == NULL)
1457 goto handle_error;
1458 Py_INCREF(interp->builtins);
1459 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001460 else if (PyErr_Occurred()) {
1461 goto handle_error;
1462 }
Nick Coghland6009512014-11-20 21:39:37 +10001463
Nick Coghland6009512014-11-20 21:39:37 +10001464 if (bimod != NULL && sysmod != NULL) {
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001465 err = _PyBuiltins_AddExceptions(bimod);
1466 if (_Py_INIT_FAILED(err)) {
1467 return err;
1468 }
Nick Coghland6009512014-11-20 21:39:37 +10001469
Victor Stinnerab672812019-01-23 15:04:40 +01001470 err = _PySys_SetPreliminaryStderr(interp->sysdict);
1471 if (_Py_INIT_FAILED(err)) {
1472 return err;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001473 }
Nick Coghland6009512014-11-20 21:39:37 +10001474
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001475 err = _PyImportHooks_Init();
1476 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001477 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001478 }
Nick Coghland6009512014-11-20 21:39:37 +10001479
Victor Stinner43fc3bb2019-05-02 11:54:20 -04001480 err = init_importlib(interp, sysmod);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001481 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001482 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001483 }
Nick Coghland6009512014-11-20 21:39:37 +10001484
Victor Stinner43fc3bb2019-05-02 11:54:20 -04001485 err = init_importlib_external(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001486 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001487 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001488 }
Nick Coghland6009512014-11-20 21:39:37 +10001489
Victor Stinner43fc3bb2019-05-02 11:54:20 -04001490 err = _PyUnicode_InitEncodings(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001491 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001492 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001493 }
1494
Victor Stinner91106cd2017-12-13 12:29:09 +01001495 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001496 if (_Py_INIT_FAILED(err)) {
1497 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001498 }
1499
1500 err = add_main_module(interp);
1501 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001502 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001503 }
1504
Victor Stinnerd19d8d52018-07-24 13:55:48 +02001505 if (core_config->site_import) {
Victor Stinner43fc3bb2019-05-02 11:54:20 -04001506 err = init_import_size();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001507 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001508 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001509 }
1510 }
Nick Coghland6009512014-11-20 21:39:37 +10001511 }
1512
Victor Stinnera7368ac2017-11-15 18:11:45 -08001513 if (PyErr_Occurred()) {
1514 goto handle_error;
1515 }
Nick Coghland6009512014-11-20 21:39:37 +10001516
Victor Stinnera7368ac2017-11-15 18:11:45 -08001517 *tstate_p = tstate;
1518 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001519
Nick Coghland6009512014-11-20 21:39:37 +10001520handle_error:
1521 /* Oops, it didn't work. Undo it all. */
1522
1523 PyErr_PrintEx(0);
1524 PyThreadState_Clear(tstate);
1525 PyThreadState_Swap(save_tstate);
1526 PyThreadState_Delete(tstate);
1527 PyInterpreterState_Delete(interp);
1528
Victor Stinnera7368ac2017-11-15 18:11:45 -08001529 *tstate_p = NULL;
1530 return _Py_INIT_OK();
1531}
1532
1533PyThreadState *
1534Py_NewInterpreter(void)
1535{
Stéphane Wirtel9e06d2b2019-03-18 17:10:29 +01001536 PyThreadState *tstate = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001537 _PyInitError err = new_interpreter(&tstate);
1538 if (_Py_INIT_FAILED(err)) {
Victor Stinnerdfe88472019-03-01 12:14:41 +01001539 _Py_ExitInitError(err);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001540 }
1541 return tstate;
1542
Nick Coghland6009512014-11-20 21:39:37 +10001543}
1544
1545/* Delete an interpreter and its last thread. This requires that the
1546 given thread state is current, that the thread has no remaining
1547 frames, and that it is its interpreter's only remaining thread.
1548 It is a fatal error to violate these constraints.
1549
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001550 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001551 everything, regardless.)
1552
1553 Locking: as above.
1554
1555*/
1556
1557void
1558Py_EndInterpreter(PyThreadState *tstate)
1559{
1560 PyInterpreterState *interp = tstate->interp;
1561
Victor Stinner50b48572018-11-01 01:51:40 +01001562 if (tstate != _PyThreadState_GET())
Nick Coghland6009512014-11-20 21:39:37 +10001563 Py_FatalError("Py_EndInterpreter: thread is not current");
1564 if (tstate->frame != NULL)
1565 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Eric Snow5be45a62019-03-08 22:47:07 -07001566 interp->finalizing = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001567
Eric Snow842a2f02019-03-15 15:47:51 -06001568 // Wrap up existing "threading"-module-created, non-daemon threads.
Nick Coghland6009512014-11-20 21:39:37 +10001569 wait_for_thread_shutdown();
1570
Marcel Plch776407f2017-12-20 11:17:58 +01001571 call_py_exitfuncs(interp);
1572
Nick Coghland6009512014-11-20 21:39:37 +10001573 if (tstate != interp->tstate_head || tstate->next != NULL)
1574 Py_FatalError("Py_EndInterpreter: not the last thread");
1575
1576 PyImport_Cleanup();
1577 PyInterpreterState_Clear(interp);
1578 PyThreadState_Swap(NULL);
1579 PyInterpreterState_Delete(interp);
1580}
1581
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001582/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001583
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001584static _PyInitError
1585add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001586{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001587 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001588 m = PyImport_AddModule("__main__");
1589 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001590 return _Py_INIT_ERR("can't create __main__ module");
1591
Nick Coghland6009512014-11-20 21:39:37 +10001592 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001593 ann_dict = PyDict_New();
1594 if ((ann_dict == NULL) ||
1595 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001596 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001597 }
1598 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001599
Nick Coghland6009512014-11-20 21:39:37 +10001600 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1601 PyObject *bimod = PyImport_ImportModule("builtins");
1602 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001603 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001604 }
1605 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001606 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001607 }
1608 Py_DECREF(bimod);
1609 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001610
Nick Coghland6009512014-11-20 21:39:37 +10001611 /* Main is a little special - imp.is_builtin("__main__") will return
1612 * False, but BuiltinImporter is still the most appropriate initial
1613 * setting for its __loader__ attribute. A more suitable value will
1614 * be set if __main__ gets further initialized later in the startup
1615 * process.
1616 */
1617 loader = PyDict_GetItemString(d, "__loader__");
1618 if (loader == NULL || loader == Py_None) {
1619 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1620 "BuiltinImporter");
1621 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001622 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001623 }
1624 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001625 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001626 }
1627 Py_DECREF(loader);
1628 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001629 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001630}
1631
Nick Coghland6009512014-11-20 21:39:37 +10001632/* Import the site module (not into __main__ though) */
1633
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001634static _PyInitError
Victor Stinner43fc3bb2019-05-02 11:54:20 -04001635init_import_size(void)
Nick Coghland6009512014-11-20 21:39:37 +10001636{
1637 PyObject *m;
1638 m = PyImport_ImportModule("site");
1639 if (m == NULL) {
Victor Stinnerdb719752019-05-01 05:35:33 +02001640 return _Py_INIT_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001641 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001642 Py_DECREF(m);
1643 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001644}
1645
Victor Stinner874dbe82015-09-04 17:29:57 +02001646/* Check if a file descriptor is valid or not.
1647 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1648static int
1649is_valid_fd(int fd)
1650{
Victor Stinner3092d6b2019-04-17 18:09:12 +02001651/* dup() is faster than fstat(): fstat() can require input/output operations,
1652 whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python
1653 startup. Problem: dup() doesn't check if the file descriptor is valid on
1654 some platforms.
1655
1656 bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other
1657 side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with
1658 EBADF. FreeBSD has similar issue (bpo-32849).
1659
1660 Only use dup() on platforms where dup() is enough to detect invalid FD in
1661 corner cases: on Linux and Windows (bpo-32849). */
1662#if defined(__linux__) || defined(MS_WINDOWS)
1663 if (fd < 0) {
1664 return 0;
1665 }
1666 int fd2;
1667
1668 _Py_BEGIN_SUPPRESS_IPH
1669 fd2 = dup(fd);
1670 if (fd2 >= 0) {
1671 close(fd2);
1672 }
1673 _Py_END_SUPPRESS_IPH
1674
1675 return (fd2 >= 0);
1676#else
Victor Stinner1c4670e2017-05-04 00:45:56 +02001677 struct stat st;
1678 return (fstat(fd, &st) == 0);
Victor Stinner1c4670e2017-05-04 00:45:56 +02001679#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001680}
1681
1682/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001683static PyObject*
Victor Stinnerfbca9082018-08-30 00:50:45 +02001684create_stdio(const _PyCoreConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001685 int fd, int write_mode, const char* name,
Victor Stinner709d23d2019-05-02 14:56:30 -04001686 const wchar_t* encoding, const wchar_t* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001687{
1688 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1689 const char* mode;
1690 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001691 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001692 int buffering, isatty;
1693 _Py_IDENTIFIER(open);
1694 _Py_IDENTIFIER(isatty);
1695 _Py_IDENTIFIER(TextIOWrapper);
1696 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001697 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001698
Victor Stinner874dbe82015-09-04 17:29:57 +02001699 if (!is_valid_fd(fd))
1700 Py_RETURN_NONE;
1701
Nick Coghland6009512014-11-20 21:39:37 +10001702 /* stdin is always opened in buffered mode, first because it shouldn't
1703 make a difference in common use cases, second because TextIOWrapper
1704 depends on the presence of a read1() method which only exists on
1705 buffered streams.
1706 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001707 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001708 buffering = 0;
1709 else
1710 buffering = -1;
1711 if (write_mode)
1712 mode = "wb";
1713 else
1714 mode = "rb";
1715 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1716 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001717 Py_None, Py_None, /* encoding, errors */
1718 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001719 if (buf == NULL)
1720 goto error;
1721
1722 if (buffering) {
1723 _Py_IDENTIFIER(raw);
1724 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1725 if (raw == NULL)
1726 goto error;
1727 }
1728 else {
1729 raw = buf;
1730 Py_INCREF(raw);
1731 }
1732
Steve Dower39294992016-08-30 21:22:36 -07001733#ifdef MS_WINDOWS
1734 /* Windows console IO is always UTF-8 encoded */
1735 if (PyWindowsConsoleIO_Check(raw))
Victor Stinner709d23d2019-05-02 14:56:30 -04001736 encoding = L"utf-8";
Steve Dower39294992016-08-30 21:22:36 -07001737#endif
1738
Nick Coghland6009512014-11-20 21:39:37 +10001739 text = PyUnicode_FromString(name);
1740 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1741 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001742 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001743 if (res == NULL)
1744 goto error;
1745 isatty = PyObject_IsTrue(res);
1746 Py_DECREF(res);
1747 if (isatty == -1)
1748 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001749 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001750 write_through = Py_True;
1751 else
1752 write_through = Py_False;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001753 if (isatty && buffered_stdio)
Nick Coghland6009512014-11-20 21:39:37 +10001754 line_buffering = Py_True;
1755 else
1756 line_buffering = Py_False;
1757
1758 Py_CLEAR(raw);
1759 Py_CLEAR(text);
1760
1761#ifdef MS_WINDOWS
1762 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1763 newlines to "\n".
1764 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1765 newline = NULL;
1766#else
1767 /* sys.stdin: split lines at "\n".
1768 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1769 newline = "\n";
1770#endif
1771
Victor Stinner709d23d2019-05-02 14:56:30 -04001772 PyObject *encoding_str = PyUnicode_FromWideChar(encoding, -1);
1773 if (encoding_str == NULL) {
1774 Py_CLEAR(buf);
1775 goto error;
1776 }
1777
1778 PyObject *errors_str = PyUnicode_FromWideChar(errors, -1);
1779 if (errors_str == NULL) {
1780 Py_CLEAR(buf);
1781 Py_CLEAR(encoding_str);
1782 goto error;
1783 }
1784
1785 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OOOsOO",
1786 buf, encoding_str, errors_str,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001787 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001788 Py_CLEAR(buf);
Victor Stinner709d23d2019-05-02 14:56:30 -04001789 Py_CLEAR(encoding_str);
1790 Py_CLEAR(errors_str);
Nick Coghland6009512014-11-20 21:39:37 +10001791 if (stream == NULL)
1792 goto error;
1793
1794 if (write_mode)
1795 mode = "w";
1796 else
1797 mode = "r";
1798 text = PyUnicode_FromString(mode);
1799 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1800 goto error;
1801 Py_CLEAR(text);
1802 return stream;
1803
1804error:
1805 Py_XDECREF(buf);
1806 Py_XDECREF(stream);
1807 Py_XDECREF(text);
1808 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001809
Victor Stinner874dbe82015-09-04 17:29:57 +02001810 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1811 /* Issue #24891: the file descriptor was closed after the first
1812 is_valid_fd() check was called. Ignore the OSError and set the
1813 stream to None. */
1814 PyErr_Clear();
1815 Py_RETURN_NONE;
1816 }
1817 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001818}
1819
1820/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001821static _PyInitError
Victor Stinner91106cd2017-12-13 12:29:09 +01001822init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001823{
1824 PyObject *iomod = NULL, *wrapper;
1825 PyObject *bimod = NULL;
1826 PyObject *m;
1827 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001828 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001829 PyObject * encoding_attr;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001830 _PyInitError res = _Py_INIT_OK();
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001831 _PyCoreConfig *config = &interp->core_config;
1832
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001833 /* Check that stdin is not a directory
1834 Using shell redirection, you can redirect stdin to a directory,
1835 crashing the Python interpreter. Catch this common mistake here
1836 and output a useful error message. Note that under MS Windows,
1837 the shell already prevents that. */
1838#ifndef MS_WINDOWS
1839 struct _Py_stat_struct sb;
1840 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1841 S_ISDIR(sb.st_mode)) {
Victor Stinnerdb719752019-05-01 05:35:33 +02001842 return _Py_INIT_ERR("<stdin> is a directory, cannot continue");
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001843 }
1844#endif
1845
Nick Coghland6009512014-11-20 21:39:37 +10001846 /* Hack to avoid a nasty recursion issue when Python is invoked
1847 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1848 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1849 goto error;
1850 }
1851 Py_DECREF(m);
1852
1853 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1854 goto error;
1855 }
1856 Py_DECREF(m);
1857
1858 if (!(bimod = PyImport_ImportModule("builtins"))) {
1859 goto error;
1860 }
1861
1862 if (!(iomod = PyImport_ImportModule("io"))) {
1863 goto error;
1864 }
1865 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1866 goto error;
1867 }
1868
1869 /* Set builtins.open */
1870 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1871 Py_DECREF(wrapper);
1872 goto error;
1873 }
1874 Py_DECREF(wrapper);
1875
Nick Coghland6009512014-11-20 21:39:37 +10001876 /* Set sys.stdin */
1877 fd = fileno(stdin);
1878 /* Under some conditions stdin, stdout and stderr may not be connected
1879 * and fileno() may point to an invalid file descriptor. For example
1880 * GUI apps don't have valid standard streams by default.
1881 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001882 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001883 config->stdio_encoding,
1884 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001885 if (std == NULL)
1886 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001887 PySys_SetObject("__stdin__", std);
1888 _PySys_SetObjectId(&PyId_stdin, std);
1889 Py_DECREF(std);
1890
1891 /* Set sys.stdout */
1892 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001893 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001894 config->stdio_encoding,
1895 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001896 if (std == NULL)
1897 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001898 PySys_SetObject("__stdout__", std);
1899 _PySys_SetObjectId(&PyId_stdout, std);
1900 Py_DECREF(std);
1901
1902#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1903 /* Set sys.stderr, replaces the preliminary stderr */
1904 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001905 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001906 config->stdio_encoding,
Victor Stinner709d23d2019-05-02 14:56:30 -04001907 L"backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001908 if (std == NULL)
1909 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001910
1911 /* Same as hack above, pre-import stderr's codec to avoid recursion
1912 when import.c tries to write to stderr in verbose mode. */
1913 encoding_attr = PyObject_GetAttrString(std, "encoding");
1914 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001915 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001916 if (std_encoding != NULL) {
1917 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1918 Py_XDECREF(codec_info);
1919 }
1920 Py_DECREF(encoding_attr);
1921 }
1922 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1923
1924 if (PySys_SetObject("__stderr__", std) < 0) {
1925 Py_DECREF(std);
1926 goto error;
1927 }
1928 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1929 Py_DECREF(std);
1930 goto error;
1931 }
1932 Py_DECREF(std);
1933#endif
1934
Victor Stinnera7368ac2017-11-15 18:11:45 -08001935 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001936
Victor Stinnera7368ac2017-11-15 18:11:45 -08001937error:
1938 res = _Py_INIT_ERR("can't initialize sys standard streams");
1939
1940done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02001941 _Py_ClearStandardStreamEncoding();
Victor Stinner31e99082017-12-20 23:41:38 +01001942
Nick Coghland6009512014-11-20 21:39:37 +10001943 Py_XDECREF(bimod);
1944 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001945 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001946}
1947
1948
Victor Stinner10dc4842015-03-24 12:01:30 +01001949static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001950_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001951{
Victor Stinner10dc4842015-03-24 12:01:30 +01001952 fputc('\n', stderr);
1953 fflush(stderr);
1954
1955 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001956 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001957}
Victor Stinner791da1c2016-03-14 16:53:12 +01001958
1959/* Print the current exception (if an exception is set) with its traceback,
1960 or display the current Python stack.
1961
1962 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1963 called on catastrophic cases.
1964
1965 Return 1 if the traceback was displayed, 0 otherwise. */
1966
1967static int
1968_Py_FatalError_PrintExc(int fd)
1969{
1970 PyObject *ferr, *res;
1971 PyObject *exception, *v, *tb;
1972 int has_tb;
1973
Victor Stinner791da1c2016-03-14 16:53:12 +01001974 PyErr_Fetch(&exception, &v, &tb);
1975 if (exception == NULL) {
1976 /* No current exception */
1977 return 0;
1978 }
1979
1980 ferr = _PySys_GetObjectId(&PyId_stderr);
1981 if (ferr == NULL || ferr == Py_None) {
1982 /* sys.stderr is not set yet or set to None,
1983 no need to try to display the exception */
1984 return 0;
1985 }
1986
1987 PyErr_NormalizeException(&exception, &v, &tb);
1988 if (tb == NULL) {
1989 tb = Py_None;
1990 Py_INCREF(tb);
1991 }
1992 PyException_SetTraceback(v, tb);
1993 if (exception == NULL) {
1994 /* PyErr_NormalizeException() failed */
1995 return 0;
1996 }
1997
1998 has_tb = (tb != Py_None);
1999 PyErr_Display(exception, v, tb);
2000 Py_XDECREF(exception);
2001 Py_XDECREF(v);
2002 Py_XDECREF(tb);
2003
2004 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07002005 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01002006 if (res == NULL)
2007 PyErr_Clear();
2008 else
2009 Py_DECREF(res);
2010
2011 return has_tb;
2012}
2013
Nick Coghland6009512014-11-20 21:39:37 +10002014/* Print fatal error message and abort */
2015
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002016#ifdef MS_WINDOWS
2017static void
2018fatal_output_debug(const char *msg)
2019{
2020 /* buffer of 256 bytes allocated on the stack */
2021 WCHAR buffer[256 / sizeof(WCHAR)];
2022 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2023 size_t msglen;
2024
2025 OutputDebugStringW(L"Fatal Python error: ");
2026
2027 msglen = strlen(msg);
2028 while (msglen) {
2029 size_t i;
2030
2031 if (buflen > msglen) {
2032 buflen = msglen;
2033 }
2034
2035 /* Convert the message to wchar_t. This uses a simple one-to-one
2036 conversion, assuming that the this error message actually uses
2037 ASCII only. If this ceases to be true, we will have to convert. */
2038 for (i=0; i < buflen; ++i) {
2039 buffer[i] = msg[i];
2040 }
2041 buffer[i] = L'\0';
2042 OutputDebugStringW(buffer);
2043
2044 msg += buflen;
2045 msglen -= buflen;
2046 }
2047 OutputDebugStringW(L"\n");
2048}
2049#endif
2050
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002051static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002052fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002053{
2054 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01002055 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002056
2057 if (reentrant) {
2058 /* Py_FatalError() caused a second fatal error.
2059 Example: flush_std_files() raises a recursion error. */
2060 goto exit;
2061 }
2062 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002063
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002064 fprintf(stderr, "Fatal Python error: ");
2065 if (prefix) {
2066 fputs(prefix, stderr);
2067 fputs(": ", stderr);
2068 }
2069 if (msg) {
2070 fputs(msg, stderr);
2071 }
2072 else {
2073 fprintf(stderr, "<message not set>");
2074 }
2075 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10002076 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01002077
Victor Stinner3a228ab2018-11-01 00:26:41 +01002078 /* Check if the current thread has a Python thread state
2079 and holds the GIL */
2080 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2081 if (tss_tstate != NULL) {
Victor Stinner50b48572018-11-01 01:51:40 +01002082 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner3a228ab2018-11-01 00:26:41 +01002083 if (tss_tstate != tstate) {
2084 /* The Python thread does not hold the GIL */
2085 tss_tstate = NULL;
2086 }
2087 }
2088 else {
2089 /* Py_FatalError() has been called from a C thread
2090 which has no Python thread state. */
2091 }
2092 int has_tstate_and_gil = (tss_tstate != NULL);
2093
2094 if (has_tstate_and_gil) {
2095 /* If an exception is set, print the exception with its traceback */
2096 if (!_Py_FatalError_PrintExc(fd)) {
2097 /* No exception is set, or an exception is set without traceback */
2098 _Py_FatalError_DumpTracebacks(fd);
2099 }
2100 }
2101 else {
Victor Stinner791da1c2016-03-14 16:53:12 +01002102 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002103 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002104
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002105 /* The main purpose of faulthandler is to display the traceback.
2106 This function already did its best to display a traceback.
2107 Disable faulthandler to prevent writing a second traceback
2108 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002109 _PyFaulthandler_Fini();
2110
Victor Stinner791da1c2016-03-14 16:53:12 +01002111 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002112 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002113 /* Flush sys.stdout and sys.stderr */
2114 flush_std_files();
2115 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002116
Nick Coghland6009512014-11-20 21:39:37 +10002117#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002118 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002119#endif /* MS_WINDOWS */
2120
2121exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002122 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002123#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002124 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002125#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002126 abort();
2127 }
2128 else {
2129 exit(status);
2130 }
2131}
2132
Victor Stinner19760862017-12-20 01:41:59 +01002133void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002134Py_FatalError(const char *msg)
2135{
2136 fatal_error(NULL, msg, -1);
2137}
2138
Victor Stinner19760862017-12-20 01:41:59 +01002139void _Py_NO_RETURN
Victor Stinnerdfe88472019-03-01 12:14:41 +01002140_Py_ExitInitError(_PyInitError err)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002141{
Victor Stinnerdb719752019-05-01 05:35:33 +02002142 if (_Py_INIT_IS_EXIT(err)) {
Victor Stinnerdfe88472019-03-01 12:14:41 +01002143 exit(err.exitcode);
Victor Stinnerdbacfc22019-05-16 16:39:26 +02002144 }
2145 else if (_Py_INIT_IS_ERROR(err)) {
2146 fatal_error(err._func, err.err_msg, 1);
Victor Stinnerdfe88472019-03-01 12:14:41 +01002147 }
2148 else {
Victor Stinnerdbacfc22019-05-16 16:39:26 +02002149 Py_FatalError("_Py_ExitInitError() must not be called on success");
Victor Stinnerdfe88472019-03-01 12:14:41 +01002150 }
Nick Coghland6009512014-11-20 21:39:37 +10002151}
2152
2153/* Clean up and exit */
2154
Victor Stinnerd7292b52016-06-17 12:29:00 +02002155# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002156
Nick Coghland6009512014-11-20 21:39:37 +10002157/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002158void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002159{
Victor Stinnercaba55b2018-08-03 15:33:52 +02002160 PyInterpreterState *is = _PyInterpreterState_Get();
Marcel Plch776407f2017-12-20 11:17:58 +01002161
Antoine Pitroufc5db952017-12-13 02:29:07 +01002162 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002163 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2164
2165 is->pyexitfunc = func;
2166 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002167}
2168
2169static void
Marcel Plch776407f2017-12-20 11:17:58 +01002170call_py_exitfuncs(PyInterpreterState *istate)
Nick Coghland6009512014-11-20 21:39:37 +10002171{
Marcel Plch776407f2017-12-20 11:17:58 +01002172 if (istate->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002173 return;
2174
Marcel Plch776407f2017-12-20 11:17:58 +01002175 (*istate->pyexitfunc)(istate->pyexitmodule);
Nick Coghland6009512014-11-20 21:39:37 +10002176 PyErr_Clear();
2177}
2178
2179/* Wait until threading._shutdown completes, provided
2180 the threading module was imported in the first place.
2181 The shutdown routine will wait until all non-daemon
2182 "threading" threads have completed. */
2183static void
2184wait_for_thread_shutdown(void)
2185{
Nick Coghland6009512014-11-20 21:39:37 +10002186 _Py_IDENTIFIER(_shutdown);
2187 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002188 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002189 if (threading == NULL) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002190 if (PyErr_Occurred()) {
2191 PyErr_WriteUnraisable(NULL);
2192 }
2193 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002194 return;
2195 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002196 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002197 if (result == NULL) {
2198 PyErr_WriteUnraisable(threading);
2199 }
2200 else {
2201 Py_DECREF(result);
2202 }
2203 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002204}
2205
2206#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002207int Py_AtExit(void (*func)(void))
2208{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002209 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002210 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002211 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002212 return 0;
2213}
2214
2215static void
Victor Stinner8e91c242019-04-24 17:24:01 +02002216call_ll_exitfuncs(_PyRuntimeState *runtime)
Nick Coghland6009512014-11-20 21:39:37 +10002217{
Victor Stinner8e91c242019-04-24 17:24:01 +02002218 while (runtime->nexitfuncs > 0) {
Victor Stinner87d23a02019-04-26 05:49:26 +02002219 /* pop last function from the list */
2220 runtime->nexitfuncs--;
2221 void (*exitfunc)(void) = runtime->exitfuncs[runtime->nexitfuncs];
2222 runtime->exitfuncs[runtime->nexitfuncs] = NULL;
2223
2224 exitfunc();
Victor Stinner8e91c242019-04-24 17:24:01 +02002225 }
Nick Coghland6009512014-11-20 21:39:37 +10002226
2227 fflush(stdout);
2228 fflush(stderr);
2229}
2230
Victor Stinnercfc88312018-08-01 16:41:25 +02002231void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002232Py_Exit(int sts)
2233{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002234 if (Py_FinalizeEx() < 0) {
2235 sts = 120;
2236 }
Nick Coghland6009512014-11-20 21:39:37 +10002237
2238 exit(sts);
2239}
2240
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002241static _PyInitError
Victor Stinner43fc3bb2019-05-02 11:54:20 -04002242init_signals(void)
Nick Coghland6009512014-11-20 21:39:37 +10002243{
2244#ifdef SIGPIPE
2245 PyOS_setsig(SIGPIPE, SIG_IGN);
2246#endif
2247#ifdef SIGXFZ
2248 PyOS_setsig(SIGXFZ, SIG_IGN);
2249#endif
2250#ifdef SIGXFSZ
2251 PyOS_setsig(SIGXFSZ, SIG_IGN);
2252#endif
2253 PyOS_InitInterrupts(); /* May imply initsignal() */
2254 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002255 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002256 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002257 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002258}
2259
2260
2261/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2262 *
2263 * All of the code in this function must only use async-signal-safe functions,
2264 * listed at `man 7 signal` or
2265 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2266 */
2267void
2268_Py_RestoreSignals(void)
2269{
2270#ifdef SIGPIPE
2271 PyOS_setsig(SIGPIPE, SIG_DFL);
2272#endif
2273#ifdef SIGXFZ
2274 PyOS_setsig(SIGXFZ, SIG_DFL);
2275#endif
2276#ifdef SIGXFSZ
2277 PyOS_setsig(SIGXFSZ, SIG_DFL);
2278#endif
2279}
2280
2281
2282/*
2283 * The file descriptor fd is considered ``interactive'' if either
2284 * a) isatty(fd) is TRUE, or
2285 * b) the -i flag was given, and the filename associated with
2286 * the descriptor is NULL or "<stdin>" or "???".
2287 */
2288int
2289Py_FdIsInteractive(FILE *fp, const char *filename)
2290{
2291 if (isatty((int)fileno(fp)))
2292 return 1;
2293 if (!Py_InteractiveFlag)
2294 return 0;
2295 return (filename == NULL) ||
2296 (strcmp(filename, "<stdin>") == 0) ||
2297 (strcmp(filename, "???") == 0);
2298}
2299
2300
Nick Coghland6009512014-11-20 21:39:37 +10002301/* Wrappers around sigaction() or signal(). */
2302
2303PyOS_sighandler_t
2304PyOS_getsig(int sig)
2305{
2306#ifdef HAVE_SIGACTION
2307 struct sigaction context;
2308 if (sigaction(sig, NULL, &context) == -1)
2309 return SIG_ERR;
2310 return context.sa_handler;
2311#else
2312 PyOS_sighandler_t handler;
2313/* Special signal handling for the secure CRT in Visual Studio 2005 */
2314#if defined(_MSC_VER) && _MSC_VER >= 1400
2315 switch (sig) {
2316 /* Only these signals are valid */
2317 case SIGINT:
2318 case SIGILL:
2319 case SIGFPE:
2320 case SIGSEGV:
2321 case SIGTERM:
2322 case SIGBREAK:
2323 case SIGABRT:
2324 break;
2325 /* Don't call signal() with other values or it will assert */
2326 default:
2327 return SIG_ERR;
2328 }
2329#endif /* _MSC_VER && _MSC_VER >= 1400 */
2330 handler = signal(sig, SIG_IGN);
2331 if (handler != SIG_ERR)
2332 signal(sig, handler);
2333 return handler;
2334#endif
2335}
2336
2337/*
2338 * All of the code in this function must only use async-signal-safe functions,
2339 * listed at `man 7 signal` or
2340 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2341 */
2342PyOS_sighandler_t
2343PyOS_setsig(int sig, PyOS_sighandler_t handler)
2344{
2345#ifdef HAVE_SIGACTION
2346 /* Some code in Modules/signalmodule.c depends on sigaction() being
2347 * used here if HAVE_SIGACTION is defined. Fix that if this code
2348 * changes to invalidate that assumption.
2349 */
2350 struct sigaction context, ocontext;
2351 context.sa_handler = handler;
2352 sigemptyset(&context.sa_mask);
2353 context.sa_flags = 0;
2354 if (sigaction(sig, &context, &ocontext) == -1)
2355 return SIG_ERR;
2356 return ocontext.sa_handler;
2357#else
2358 PyOS_sighandler_t oldhandler;
2359 oldhandler = signal(sig, handler);
2360#ifdef HAVE_SIGINTERRUPT
2361 siginterrupt(sig, 1);
2362#endif
2363 return oldhandler;
2364#endif
2365}
2366
2367#ifdef __cplusplus
2368}
2369#endif