blob: c7920ef6262d3c509f4d648f9076042edafb5a59 [file] [log] [blame]
Nick Coghland6009512014-11-20 21:39:37 +10001/* Python interpreter top-level routines, including init/exit */
2
3#include "Python.h"
4
5#include "Python-ast.h"
Victor Stinner3bb183d2018-11-22 18:38:38 +01006#undef Yield /* undefine macro conflicting with <winbase.h> */
Victor Stinnerf684d832019-03-01 03:44:13 +01007#include "pycore_coreconfig.h"
Victor Stinner27e2d1f2018-11-01 00:52:28 +01008#include "pycore_context.h"
Victor Stinner353933e2018-11-23 13:08:26 +01009#include "pycore_fileutils.h"
Victor Stinner27e2d1f2018-11-01 00:52:28 +010010#include "pycore_hamt.h"
Victor Stinnera1c249c2018-11-01 03:15:58 +010011#include "pycore_pathconfig.h"
Victor Stinner621cebe2018-11-12 16:53:38 +010012#include "pycore_pylifecycle.h"
13#include "pycore_pymem.h"
14#include "pycore_pystate.h"
Nick Coghland6009512014-11-20 21:39:37 +100015#include "grammar.h"
16#include "node.h"
17#include "token.h"
18#include "parsetok.h"
19#include "errcode.h"
20#include "code.h"
21#include "symtable.h"
22#include "ast.h"
23#include "marshal.h"
24#include "osdefs.h"
25#include <locale.h>
26
27#ifdef HAVE_SIGNAL_H
28#include <signal.h>
29#endif
30
31#ifdef MS_WINDOWS
32#include "malloc.h" /* for alloca */
33#endif
34
35#ifdef HAVE_LANGINFO_H
36#include <langinfo.h>
37#endif
38
39#ifdef MS_WINDOWS
40#undef BYTE
41#include "windows.h"
Steve Dower39294992016-08-30 21:22:36 -070042
43extern PyTypeObject PyWindowsConsoleIO_Type;
44#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
Nick Coghland6009512014-11-20 21:39:37 +100045#endif
46
47_Py_IDENTIFIER(flush);
48_Py_IDENTIFIER(name);
49_Py_IDENTIFIER(stdin);
50_Py_IDENTIFIER(stdout);
51_Py_IDENTIFIER(stderr);
Eric Snow3f9eee62017-09-15 16:35:20 -060052_Py_IDENTIFIER(threading);
Nick Coghland6009512014-11-20 21:39:37 +100053
54#ifdef __cplusplus
55extern "C" {
56#endif
57
Nick Coghland6009512014-11-20 21:39:37 +100058extern grammar _PyParser_Grammar; /* From graminit.c */
59
60/* Forward */
Victor Stinnerf7e5b562017-11-15 15:48:08 -080061static _PyInitError add_main_module(PyInterpreterState *interp);
62static _PyInitError initfsencoding(PyInterpreterState *interp);
63static _PyInitError initsite(void);
Victor Stinner91106cd2017-12-13 12:29:09 +010064static _PyInitError init_sys_streams(PyInterpreterState *interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -080065static _PyInitError initsigs(void);
Marcel Plch776407f2017-12-20 11:17:58 +010066static void call_py_exitfuncs(PyInterpreterState *);
Nick Coghland6009512014-11-20 21:39:37 +100067static void wait_for_thread_shutdown(void);
68static void call_ll_exitfuncs(void);
Nick Coghland6009512014-11-20 21:39:37 +100069
Gregory P. Smith38f11cc2019-02-16 12:57:40 -080070int _Py_UnhandledKeyboardInterrupt = 0;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080071_PyRuntimeState _PyRuntime = _PyRuntimeState_INIT;
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
Nick Coghland6009512014-11-20 21:39:37 +1000147static char*
148get_codec_name(const char *encoding)
149{
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +0200150 const char *name_utf8;
151 char *name_str;
Nick Coghland6009512014-11-20 21:39:37 +1000152 PyObject *codec, *name = NULL;
153
154 codec = _PyCodec_Lookup(encoding);
155 if (!codec)
156 goto error;
157
158 name = _PyObject_GetAttrId(codec, &PyId_name);
159 Py_CLEAR(codec);
160 if (!name)
161 goto error;
162
Serhiy Storchaka06515832016-11-20 09:13:07 +0200163 name_utf8 = PyUnicode_AsUTF8(name);
Nick Coghland6009512014-11-20 21:39:37 +1000164 if (name_utf8 == NULL)
165 goto error;
166 name_str = _PyMem_RawStrdup(name_utf8);
167 Py_DECREF(name);
168 if (name_str == NULL) {
169 PyErr_NoMemory();
170 return NULL;
171 }
172 return name_str;
173
174error:
175 Py_XDECREF(codec);
176 Py_XDECREF(name);
177 return NULL;
178}
179
Nick Coghland6009512014-11-20 21:39:37 +1000180
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800181static _PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700182initimport(PyInterpreterState *interp, PyObject *sysmod)
Nick Coghland6009512014-11-20 21:39:37 +1000183{
184 PyObject *importlib;
185 PyObject *impmod;
Nick Coghland6009512014-11-20 21:39:37 +1000186 PyObject *value;
187
188 /* Import _importlib through its frozen version, _frozen_importlib. */
189 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800190 return _Py_INIT_ERR("can't import _frozen_importlib");
Nick Coghland6009512014-11-20 21:39:37 +1000191 }
192 else if (Py_VerboseFlag) {
193 PySys_FormatStderr("import _frozen_importlib # frozen\n");
194 }
195 importlib = PyImport_AddModule("_frozen_importlib");
196 if (importlib == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800197 return _Py_INIT_ERR("couldn't get _frozen_importlib from sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000198 }
199 interp->importlib = importlib;
200 Py_INCREF(interp->importlib);
201
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300202 interp->import_func = PyDict_GetItemString(interp->builtins, "__import__");
203 if (interp->import_func == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800204 return _Py_INIT_ERR("__import__ not found");
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300205 Py_INCREF(interp->import_func);
206
Victor Stinnercd6e6942015-09-18 09:11:57 +0200207 /* Import the _imp module */
Benjamin Petersonc65ef772018-01-29 11:33:57 -0800208 impmod = PyInit__imp();
Nick Coghland6009512014-11-20 21:39:37 +1000209 if (impmod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800210 return _Py_INIT_ERR("can't import _imp");
Nick Coghland6009512014-11-20 21:39:37 +1000211 }
212 else if (Py_VerboseFlag) {
Victor Stinnercd6e6942015-09-18 09:11:57 +0200213 PySys_FormatStderr("import _imp # builtin\n");
Nick Coghland6009512014-11-20 21:39:37 +1000214 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600215 if (_PyImport_SetModuleString("_imp", impmod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800216 return _Py_INIT_ERR("can't save _imp to sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000217 }
218
Victor Stinnercd6e6942015-09-18 09:11:57 +0200219 /* Install importlib as the implementation of import */
Nick Coghland6009512014-11-20 21:39:37 +1000220 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
221 if (value == NULL) {
222 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800223 return _Py_INIT_ERR("importlib install failed");
Nick Coghland6009512014-11-20 21:39:37 +1000224 }
225 Py_DECREF(value);
226 Py_DECREF(impmod);
227
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800228 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000229}
230
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800231static _PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700232initexternalimport(PyInterpreterState *interp)
233{
234 PyObject *value;
235 value = PyObject_CallMethod(interp->importlib,
236 "_install_external_importers", "");
237 if (value == NULL) {
238 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800239 return _Py_INIT_ERR("external importer setup failed");
Eric Snow1abcf672017-05-23 21:46:51 -0700240 }
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200241 Py_DECREF(value);
Serhiy Storchaka79d1c2e2018-09-18 22:22:29 +0300242 return _PyImportZip_Init();
Eric Snow1abcf672017-05-23 21:46:51 -0700243}
Nick Coghland6009512014-11-20 21:39:37 +1000244
Nick Coghlan6ea41862017-06-11 13:16:15 +1000245/* Helper functions to better handle the legacy C locale
246 *
247 * The legacy C locale assumes ASCII as the default text encoding, which
248 * causes problems not only for the CPython runtime, but also other
249 * components like GNU readline.
250 *
251 * Accordingly, when the CLI detects it, it attempts to coerce it to a
252 * more capable UTF-8 based alternative as follows:
253 *
254 * if (_Py_LegacyLocaleDetected()) {
255 * _Py_CoerceLegacyLocale();
256 * }
257 *
258 * See the documentation of the PYTHONCOERCECLOCALE setting for more details.
259 *
260 * Locale coercion also impacts the default error handler for the standard
261 * streams: while the usual default is "strict", the default for the legacy
262 * C locale and for any of the coercion target locales is "surrogateescape".
263 */
264
265int
266_Py_LegacyLocaleDetected(void)
267{
268#ifndef MS_WINDOWS
269 /* On non-Windows systems, the C locale is considered a legacy locale */
Nick Coghlaneb817952017-06-18 12:29:42 +1000270 /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat
271 * the POSIX locale as a simple alias for the C locale, so
272 * we may also want to check for that explicitly.
273 */
Nick Coghlan6ea41862017-06-11 13:16:15 +1000274 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
275 return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
276#else
277 /* Windows uses code pages instead of locales, so no locale is legacy */
278 return 0;
279#endif
280}
281
Nick Coghlaneb817952017-06-18 12:29:42 +1000282static const char *_C_LOCALE_WARNING =
283 "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
284 "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
285 "C.utf8, or UTF-8 (if available) as alternative Unicode-compatible "
286 "locales is recommended.\n";
287
Nick Coghlaneb817952017-06-18 12:29:42 +1000288static void
Victor Stinner20004952019-03-26 02:31:11 +0100289_emit_stderr_warning_for_legacy_locale(void)
Nick Coghlaneb817952017-06-18 12:29:42 +1000290{
Victor Stinner20004952019-03-26 02:31:11 +0100291 const _PyPreConfig *preconfig = &_PyRuntime.preconfig;
292 if (preconfig->coerce_c_locale_warn && _Py_LegacyLocaleDetected()) {
Victor Stinnercf215042018-08-29 22:56:06 +0200293 PySys_FormatStderr("%s", _C_LOCALE_WARNING);
Nick Coghlaneb817952017-06-18 12:29:42 +1000294 }
295}
296
Nick Coghlan6ea41862017-06-11 13:16:15 +1000297typedef struct _CandidateLocale {
298 const char *locale_name; /* The locale to try as a coercion target */
299} _LocaleCoercionTarget;
300
301static _LocaleCoercionTarget _TARGET_LOCALES[] = {
302 {"C.UTF-8"},
303 {"C.utf8"},
Nick Coghlan18974c32017-06-30 00:48:14 +1000304 {"UTF-8"},
Nick Coghlan6ea41862017-06-11 13:16:15 +1000305 {NULL}
306};
307
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200308
309int
310_Py_IsLocaleCoercionTarget(const char *ctype_loc)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000311{
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200312 const _LocaleCoercionTarget *target = NULL;
313 for (target = _TARGET_LOCALES; target->locale_name; target++) {
314 if (strcmp(ctype_loc, target->locale_name) == 0) {
315 return 1;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000316 }
Victor Stinner124b9eb2018-08-29 01:29:06 +0200317 }
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200318 return 0;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000319}
320
Victor Stinnerdfe0dc72018-08-29 11:47:29 +0200321
Nick Coghlan6ea41862017-06-11 13:16:15 +1000322#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100323static const char C_LOCALE_COERCION_WARNING[] =
Nick Coghlan6ea41862017-06-11 13:16:15 +1000324 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale "
325 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n";
326
327static void
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200328_coerce_default_locale_settings(int warn, const _LocaleCoercionTarget *target)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000329{
330 const char *newloc = target->locale_name;
331
332 /* Reset locale back to currently configured defaults */
xdegaye1588be62017-11-12 12:45:59 +0100333 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000334
335 /* Set the relevant locale environment variable */
336 if (setenv("LC_CTYPE", newloc, 1)) {
337 fprintf(stderr,
338 "Error setting LC_CTYPE, skipping C locale coercion\n");
339 return;
340 }
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200341 if (warn) {
Victor Stinner94540602017-12-16 04:54:22 +0100342 fprintf(stderr, C_LOCALE_COERCION_WARNING, newloc);
Nick Coghlaneb817952017-06-18 12:29:42 +1000343 }
Nick Coghlan6ea41862017-06-11 13:16:15 +1000344
345 /* Reconfigure with the overridden environment variables */
xdegaye1588be62017-11-12 12:45:59 +0100346 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000347}
348#endif
349
350void
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200351_Py_CoerceLegacyLocale(int warn)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000352{
353#ifdef PY_COERCE_C_LOCALE
Victor Stinner8ea09112018-09-03 17:05:18 +0200354 char *oldloc = NULL;
355
356 oldloc = _PyMem_RawStrdup(setlocale(LC_CTYPE, NULL));
357 if (oldloc == NULL) {
358 return;
359 }
360
Victor Stinner94540602017-12-16 04:54:22 +0100361 const char *locale_override = getenv("LC_ALL");
362 if (locale_override == NULL || *locale_override == '\0') {
363 /* LC_ALL is also not set (or is set to an empty string) */
364 const _LocaleCoercionTarget *target = NULL;
365 for (target = _TARGET_LOCALES; target->locale_name; target++) {
366 const char *new_locale = setlocale(LC_CTYPE,
367 target->locale_name);
368 if (new_locale != NULL) {
xdegaye1588be62017-11-12 12:45:59 +0100369#if !defined(__APPLE__) && !defined(__ANDROID__) && \
Victor Stinner94540602017-12-16 04:54:22 +0100370defined(HAVE_LANGINFO_H) && defined(CODESET)
371 /* Also ensure that nl_langinfo works in this locale */
372 char *codeset = nl_langinfo(CODESET);
373 if (!codeset || *codeset == '\0') {
374 /* CODESET is not set or empty, so skip coercion */
375 new_locale = NULL;
376 _Py_SetLocaleFromEnv(LC_CTYPE);
377 continue;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000378 }
Victor Stinner94540602017-12-16 04:54:22 +0100379#endif
380 /* Successfully configured locale, so make it the default */
Victor Stinnerb2457ef2018-08-29 13:25:36 +0200381 _coerce_default_locale_settings(warn, target);
Victor Stinner8ea09112018-09-03 17:05:18 +0200382 goto done;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000383 }
384 }
385 }
386 /* No C locale warning here, as Py_Initialize will emit one later */
Victor Stinner8ea09112018-09-03 17:05:18 +0200387
388 setlocale(LC_CTYPE, oldloc);
389
390done:
391 PyMem_RawFree(oldloc);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000392#endif
393}
394
xdegaye1588be62017-11-12 12:45:59 +0100395/* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to
396 * isolate the idiosyncrasies of different libc implementations. It reads the
397 * appropriate environment variable and uses its value to select the locale for
398 * 'category'. */
399char *
400_Py_SetLocaleFromEnv(int category)
401{
Victor Stinner353933e2018-11-23 13:08:26 +0100402 char *res;
xdegaye1588be62017-11-12 12:45:59 +0100403#ifdef __ANDROID__
404 const char *locale;
405 const char **pvar;
406#ifdef PY_COERCE_C_LOCALE
407 const char *coerce_c_locale;
408#endif
409 const char *utf8_locale = "C.UTF-8";
410 const char *env_var_set[] = {
411 "LC_ALL",
412 "LC_CTYPE",
413 "LANG",
414 NULL,
415 };
416
417 /* Android setlocale(category, "") doesn't check the environment variables
418 * and incorrectly sets the "C" locale at API 24 and older APIs. We only
419 * check the environment variables listed in env_var_set. */
420 for (pvar=env_var_set; *pvar; pvar++) {
421 locale = getenv(*pvar);
422 if (locale != NULL && *locale != '\0') {
423 if (strcmp(locale, utf8_locale) == 0 ||
424 strcmp(locale, "en_US.UTF-8") == 0) {
425 return setlocale(category, utf8_locale);
426 }
427 return setlocale(category, "C");
428 }
429 }
430
431 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
432 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
433 * Quote from POSIX section "8.2 Internationalization Variables":
434 * "4. If the LANG environment variable is not set or is set to the empty
435 * string, the implementation-defined default locale shall be used." */
436
437#ifdef PY_COERCE_C_LOCALE
438 coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
439 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
440 /* Some other ported code may check the environment variables (e.g. in
441 * extension modules), so we make sure that they match the locale
442 * configuration */
443 if (setenv("LC_CTYPE", utf8_locale, 1)) {
444 fprintf(stderr, "Warning: failed setting the LC_CTYPE "
445 "environment variable to %s\n", utf8_locale);
446 }
447 }
448#endif
Victor Stinner353933e2018-11-23 13:08:26 +0100449 res = setlocale(category, utf8_locale);
450#else /* !defined(__ANDROID__) */
451 res = setlocale(category, "");
452#endif
453 _Py_ResetForceASCII();
454 return res;
xdegaye1588be62017-11-12 12:45:59 +0100455}
456
Nick Coghlan6ea41862017-06-11 13:16:15 +1000457
Eric Snow1abcf672017-05-23 21:46:51 -0700458/* Global initializations. Can be undone by Py_Finalize(). Don't
459 call this twice without an intervening Py_Finalize() call.
460
Victor Stinner484f20d2019-03-27 02:04:16 +0100461 Every call to _Py_InitializeFromConfig, Py_Initialize or Py_InitializeEx
Eric Snow1abcf672017-05-23 21:46:51 -0700462 must have a corresponding call to Py_Finalize.
463
464 Locking: you must hold the interpreter lock while calling these APIs.
465 (If the lock has not yet been initialized, that's equivalent to
466 having the lock, but you cannot use multiple threads.)
467
468*/
469
Victor Stinner1dc6e392018-07-25 02:49:17 +0200470static _PyInitError
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100471_Py_Initialize_ReconfigureCore(PyInterpreterState **interp_p,
Victor Stinner1dc6e392018-07-25 02:49:17 +0200472 const _PyCoreConfig *core_config)
473{
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100474 PyThreadState *tstate = _PyThreadState_GET();
475 if (!tstate) {
476 return _Py_INIT_ERR("failed to read thread state");
477 }
478
479 PyInterpreterState *interp = tstate->interp;
480 if (interp == NULL) {
481 return _Py_INIT_ERR("can't make main interpreter");
482 }
483 *interp_p = interp;
484
Victor Stinnerf8ba6f52019-03-26 16:58:50 +0100485 _PyCoreConfig_Write(core_config);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200486
487 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
Victor Stinnerd929f182019-03-27 18:28:46 +0100488 return _Py_INIT_NO_MEMORY();
Victor Stinner1dc6e392018-07-25 02:49:17 +0200489 }
490 core_config = &interp->core_config;
491
492 if (core_config->_install_importlib) {
493 _PyInitError err = _PyCoreConfig_SetPathConfig(core_config);
494 if (_Py_INIT_FAILED(err)) {
495 return err;
496 }
497 }
498 return _Py_INIT_OK();
499}
500
501
Victor Stinner1dc6e392018-07-25 02:49:17 +0200502static _PyInitError
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100503pycore_init_runtime(const _PyCoreConfig *core_config)
Nick Coghland6009512014-11-20 21:39:37 +1000504{
Victor Stinner1dc6e392018-07-25 02:49:17 +0200505 if (_PyRuntime.initialized) {
506 return _Py_INIT_ERR("main interpreter already initialized");
507 }
Victor Stinnerda273412017-12-15 01:46:02 +0100508
Victor Stinnerf8ba6f52019-03-26 16:58:50 +0100509 _PyCoreConfig_Write(core_config);
Nick Coghland6009512014-11-20 21:39:37 +1000510
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100511 _PyInitError err = _PyRuntime_Initialize();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800512 if (_Py_INIT_FAILED(err)) {
513 return err;
514 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600515
Eric Snow1abcf672017-05-23 21:46:51 -0700516 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
517 * threads behave a little more gracefully at interpreter shutdown.
518 * We clobber it here so the new interpreter can start with a clean
519 * slate.
520 *
521 * However, this may still lead to misbehaviour if there are daemon
522 * threads still hanging around from a previous Py_Initialize/Finalize
523 * pair :(
524 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600525 _PyRuntime.finalizing = NULL;
526
Victor Stinnerda273412017-12-15 01:46:02 +0100527 err = _Py_HashRandomization_Init(core_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800528 if (_Py_INIT_FAILED(err)) {
529 return err;
530 }
531
Victor Stinnera7368ac2017-11-15 18:11:45 -0800532 err = _PyInterpreterState_Enable(&_PyRuntime);
533 if (_Py_INIT_FAILED(err)) {
534 return err;
535 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100536 return _Py_INIT_OK();
537}
Victor Stinnera7368ac2017-11-15 18:11:45 -0800538
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100539
540static _PyInitError
541pycore_create_interpreter(const _PyCoreConfig *core_config,
542 PyInterpreterState **interp_p)
543{
544 PyInterpreterState *interp = PyInterpreterState_New();
Victor Stinnerda273412017-12-15 01:46:02 +0100545 if (interp == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800546 return _Py_INIT_ERR("can't make main interpreter");
Victor Stinnerda273412017-12-15 01:46:02 +0100547 }
Victor Stinner1dc6e392018-07-25 02:49:17 +0200548 *interp_p = interp;
Victor Stinnerda273412017-12-15 01:46:02 +0100549
550 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
Victor Stinnerd929f182019-03-27 18:28:46 +0100551 return _Py_INIT_NO_MEMORY();
Victor Stinnerda273412017-12-15 01:46:02 +0100552 }
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200553 core_config = &interp->core_config;
Nick Coghland6009512014-11-20 21:39:37 +1000554
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200555 PyThreadState *tstate = PyThreadState_New(interp);
Nick Coghland6009512014-11-20 21:39:37 +1000556 if (tstate == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800557 return _Py_INIT_ERR("can't make first thread");
Nick Coghland6009512014-11-20 21:39:37 +1000558 (void) PyThreadState_Swap(tstate);
559
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000560 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
Nick Coghland6009512014-11-20 21:39:37 +1000561 destroying the GIL might fail when it is being referenced from
562 another running thread (see issue #9901).
563 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000564 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Nick Coghland6009512014-11-20 21:39:37 +1000565 _PyEval_FiniThreads();
Victor Stinner2914bb32018-01-29 11:57:45 +0100566
Nick Coghland6009512014-11-20 21:39:37 +1000567 /* Auto-thread-state API */
568 _PyGILState_Init(interp, tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000569
Victor Stinner2914bb32018-01-29 11:57:45 +0100570 /* Create the GIL */
571 PyEval_InitThreads();
572
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100573 return _Py_INIT_OK();
574}
Nick Coghland6009512014-11-20 21:39:37 +1000575
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100576
577static _PyInitError
578pycore_init_types(void)
579{
Victor Stinnerab672812019-01-23 15:04:40 +0100580 _PyInitError err = _PyTypes_Init();
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100581 if (_Py_INIT_FAILED(err)) {
582 return err;
583 }
584
585 err = _PyUnicode_Init();
586 if (_Py_INIT_FAILED(err)) {
587 return err;
588 }
589
590 if (_PyStructSequence_Init() < 0) {
591 return _Py_INIT_ERR("can't initialize structseq");
592 }
593
594 if (!_PyLong_Init()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800595 return _Py_INIT_ERR("can't init longs");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100596 }
Nick Coghland6009512014-11-20 21:39:37 +1000597
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100598 err = _PyExc_Init();
599 if (_Py_INIT_FAILED(err)) {
600 return err;
601 }
602
603 if (!_PyFloat_Init()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800604 return _Py_INIT_ERR("can't init float");
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100605 }
Nick Coghland6009512014-11-20 21:39:37 +1000606
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100607 if (!_PyContext_Init()) {
608 return _Py_INIT_ERR("can't init context");
609 }
610 return _Py_INIT_OK();
611}
612
613
614static _PyInitError
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100615pycore_init_builtins(PyInterpreterState *interp)
616{
617 PyObject *bimod = _PyBuiltin_Init();
618 if (bimod == NULL) {
619 return _Py_INIT_ERR("can't initialize builtins modules");
620 }
621 _PyImport_FixupBuiltin(bimod, "builtins", interp->modules);
622
623 interp->builtins = PyModule_GetDict(bimod);
624 if (interp->builtins == NULL) {
625 return _Py_INIT_ERR("can't initialize builtins dict");
626 }
627 Py_INCREF(interp->builtins);
628
629 _PyInitError err = _PyBuiltins_AddExceptions(bimod);
630 if (_Py_INIT_FAILED(err)) {
631 return err;
632 }
633 return _Py_INIT_OK();
634}
635
636
637static _PyInitError
638pycore_init_import_warnings(PyInterpreterState *interp, PyObject *sysmod)
639{
640 _PyInitError err = _PyImport_Init(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800641 if (_Py_INIT_FAILED(err)) {
642 return err;
643 }
Nick Coghland6009512014-11-20 21:39:37 +1000644
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800645 err = _PyImportHooks_Init();
646 if (_Py_INIT_FAILED(err)) {
647 return err;
648 }
Nick Coghland6009512014-11-20 21:39:37 +1000649
650 /* Initialize _warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100651 if (_PyWarnings_Init() == NULL) {
Victor Stinner1f151112017-11-23 10:43:14 +0100652 return _Py_INIT_ERR("can't initialize warnings");
653 }
Nick Coghland6009512014-11-20 21:39:37 +1000654
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100655 if (interp->core_config._install_importlib) {
656 err = _PyCoreConfig_SetPathConfig(&interp->core_config);
Victor Stinnerb1147e42018-07-21 02:06:16 +0200657 if (_Py_INIT_FAILED(err)) {
658 return err;
659 }
660 }
661
Eric Snow1abcf672017-05-23 21:46:51 -0700662 /* This call sets up builtin and frozen import support */
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100663 if (interp->core_config._install_importlib) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800664 err = initimport(interp, sysmod);
665 if (_Py_INIT_FAILED(err)) {
666 return err;
667 }
Eric Snow1abcf672017-05-23 21:46:51 -0700668 }
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100669 return _Py_INIT_OK();
670}
671
672
673static _PyInitError
674_Py_InitializeCore_impl(PyInterpreterState **interp_p,
675 const _PyCoreConfig *core_config)
676{
677 PyInterpreterState *interp;
678
Victor Stinner20004952019-03-26 02:31:11 +0100679 _PyCoreConfig_Write(core_config);
680
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100681 _PyInitError err = pycore_init_runtime(core_config);
682 if (_Py_INIT_FAILED(err)) {
683 return err;
684 }
685
686 err = pycore_create_interpreter(core_config, &interp);
687 if (_Py_INIT_FAILED(err)) {
688 return err;
689 }
690 core_config = &interp->core_config;
691 *interp_p = interp;
692
693 err = pycore_init_types();
694 if (_Py_INIT_FAILED(err)) {
695 return err;
696 }
697
698 PyObject *sysmod;
Victor Stinnerab672812019-01-23 15:04:40 +0100699 err = _PySys_Create(interp, &sysmod);
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100700 if (_Py_INIT_FAILED(err)) {
701 return err;
702 }
703
704 err = pycore_init_builtins(interp);
705 if (_Py_INIT_FAILED(err)) {
706 return err;
707 }
708
709 err = pycore_init_import_warnings(interp, sysmod);
710 if (_Py_INIT_FAILED(err)) {
711 return err;
712 }
Eric Snow1abcf672017-05-23 21:46:51 -0700713
714 /* Only when we get here is the runtime core fully initialized */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600715 _PyRuntime.core_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800716 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700717}
718
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100719
Victor Stinnerf29084d2019-03-20 02:20:13 +0100720static _PyInitError
Victor Stinner5ac27a52019-03-27 13:40:14 +0100721preinit(const _PyPreConfig *src_config, const _PyArgv *args)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100722{
723 _PyInitError err;
724
725 err = _PyRuntime_Initialize();
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100726 if (_Py_INIT_FAILED(err)) {
Victor Stinner5ac27a52019-03-27 13:40:14 +0100727 return err;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100728 }
729
Victor Stinnerf72346c2019-03-25 17:54:58 +0100730 if (_PyRuntime.pre_initialized) {
731 /* If it's already configured: ignored the new configuration */
Victor Stinner5ac27a52019-03-27 13:40:14 +0100732 return _Py_INIT_OK();
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100733 }
734
Victor Stinner5ac27a52019-03-27 13:40:14 +0100735 _PyPreConfig config = _PyPreConfig_INIT;
736
Victor Stinnerf72346c2019-03-25 17:54:58 +0100737 if (src_config) {
Victor Stinner5ac27a52019-03-27 13:40:14 +0100738 if (_PyPreConfig_Copy(&config, src_config) < 0) {
739 err = _Py_INIT_NO_MEMORY();
Victor Stinner20004952019-03-26 02:31:11 +0100740 goto done;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100741 }
742 }
743
Victor Stinner5ac27a52019-03-27 13:40:14 +0100744 err = _PyPreConfig_Read(&config, args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100745 if (_Py_INIT_FAILED(err)) {
Victor Stinner20004952019-03-26 02:31:11 +0100746 goto done;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100747 }
748
Victor Stinner5ac27a52019-03-27 13:40:14 +0100749 err = _PyPreConfig_Write(&config);
Victor Stinnerf72346c2019-03-25 17:54:58 +0100750 if (_Py_INIT_FAILED(err)) {
Victor Stinner20004952019-03-26 02:31:11 +0100751 goto done;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100752 }
753
754 _PyRuntime.pre_initialized = 1;
Victor Stinner20004952019-03-26 02:31:11 +0100755 err = _Py_INIT_OK();
756
757done:
Victor Stinner5ac27a52019-03-27 13:40:14 +0100758 _PyPreConfig_Clear(&config);
Victor Stinner20004952019-03-26 02:31:11 +0100759 return err;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100760}
761
Victor Stinnerf72346c2019-03-25 17:54:58 +0100762_PyInitError
Victor Stinner5ac27a52019-03-27 13:40:14 +0100763_Py_PreInitializeFromArgs(const _PyPreConfig *src_config, int argc, char **argv)
Victor Stinnerf72346c2019-03-25 17:54:58 +0100764{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100765 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
766 return preinit(src_config, &args);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100767}
768
769
770_PyInitError
Victor Stinner5ac27a52019-03-27 13:40:14 +0100771_Py_PreInitializeFromWideArgs(const _PyPreConfig *src_config, int argc, wchar_t **argv)
Victor Stinner20004952019-03-26 02:31:11 +0100772{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100773 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
774 return preinit(src_config, &args);
Victor Stinner20004952019-03-26 02:31:11 +0100775}
776
777
778_PyInitError
Victor Stinner5ac27a52019-03-27 13:40:14 +0100779_Py_PreInitialize(const _PyPreConfig *src_config)
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100780{
Victor Stinner5ac27a52019-03-27 13:40:14 +0100781 return preinit(src_config, NULL);
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100782}
783
784
785_PyInitError
Victor Stinner5ac27a52019-03-27 13:40:14 +0100786_Py_PreInitializeFromCoreConfig(const _PyCoreConfig *coreconfig)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100787{
Victor Stinnerd929f182019-03-27 18:28:46 +0100788 assert(coreconfig != NULL);
Victor Stinner5ac27a52019-03-27 13:40:14 +0100789 _PyPreConfig config = _PyPreConfig_INIT;
790 _PyCoreConfig_GetCoreConfig(&config, coreconfig);
791 return _Py_PreInitialize(&config);
792 /* No need to clear config:
793 _PyCoreConfig_GetCoreConfig() doesn't allocate memory */
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100794}
795
796
797static _PyInitError
Victor Stinner5ac27a52019-03-27 13:40:14 +0100798pyinit_coreconfig(_PyCoreConfig *config,
799 const _PyCoreConfig *src_config,
800 const _PyArgv *args,
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100801 PyInterpreterState **interp_p)
802{
Victor Stinnerd929f182019-03-27 18:28:46 +0100803 if (src_config) {
804 if (_PyCoreConfig_Copy(config, src_config) < 0) {
805 return _Py_INIT_NO_MEMORY();
806 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100807 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100808
Victor Stinner5ac27a52019-03-27 13:40:14 +0100809 _PyInitError err = _PyCoreConfig_Read(config, args);
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100810 if (_Py_INIT_FAILED(err)) {
811 return err;
812 }
813
814 if (!_PyRuntime.core_initialized) {
815 return _Py_InitializeCore_impl(interp_p, config);
816 }
817 else {
818 return _Py_Initialize_ReconfigureCore(interp_p, config);
819 }
820}
821
822
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100823/* Begin interpreter initialization
824 *
825 * On return, the first thread and interpreter state have been created,
826 * but the compiler, signal handling, multithreading and
827 * multiple interpreter support, and codec infrastructure are not yet
828 * available.
829 *
830 * The import system will support builtin and frozen modules only.
831 * The only supported io is writing to sys.stderr
832 *
833 * If any operation invoked by this function fails, a fatal error is
834 * issued and the function does not return.
835 *
836 * Any code invoked from this function should *not* assume it has access
837 * to the Python C API (unless the API is explicitly listed as being
838 * safe to call without calling Py_Initialize first)
839 */
Victor Stinner484f20d2019-03-27 02:04:16 +0100840static _PyInitError
Victor Stinnerf8ba6f52019-03-26 16:58:50 +0100841_Py_InitializeCore(const _PyCoreConfig *src_config,
Victor Stinner5ac27a52019-03-27 13:40:14 +0100842 const _PyArgv *args,
Victor Stinnerf8ba6f52019-03-26 16:58:50 +0100843 PyInterpreterState **interp_p)
Victor Stinner1dc6e392018-07-25 02:49:17 +0200844{
Victor Stinnerd929f182019-03-27 18:28:46 +0100845 _PyInitError err;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200846
Victor Stinnerd929f182019-03-27 18:28:46 +0100847 if (src_config) {
848 err = _Py_PreInitializeFromCoreConfig(src_config);
849 }
850 else {
851 err = _Py_PreInitialize(NULL);
852 }
Victor Stinner1dc6e392018-07-25 02:49:17 +0200853 if (_Py_INIT_FAILED(err)) {
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100854 return err;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200855 }
856
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100857 _PyCoreConfig local_config = _PyCoreConfig_INIT;
Victor Stinner5ac27a52019-03-27 13:40:14 +0100858 err = pyinit_coreconfig(&local_config, src_config, args, interp_p);
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100859 _PyCoreConfig_Clear(&local_config);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200860 return err;
861}
862
Victor Stinner5ac27a52019-03-27 13:40:14 +0100863
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200864/* Py_Initialize() has already been called: update the main interpreter
865 configuration. Example of bpo-34008: Py_Main() called after
866 Py_Initialize(). */
867static _PyInitError
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100868_Py_ReconfigureMainInterpreter(PyInterpreterState *interp)
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200869{
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100870 _PyCoreConfig *core_config = &interp->core_config;
871
872 PyObject *argv = _PyWstrList_AsList(&core_config->argv);
873 if (argv == NULL) {
874 return _Py_INIT_NO_MEMORY(); \
875 }
876
877 int res = PyDict_SetItemString(interp->sysdict, "argv", argv);
878 Py_DECREF(argv);
879 if (res < 0) {
880 return _Py_INIT_ERR("fail to set sys.argv");
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200881 }
882 return _Py_INIT_OK();
883}
884
Eric Snowc7ec9982017-05-23 23:00:52 -0700885/* Update interpreter state based on supplied configuration settings
886 *
887 * After calling this function, most of the restrictions on the interpreter
888 * are lifted. The only remaining incomplete settings are those related
889 * to the main module (sys.argv[0], __main__ metadata)
890 *
891 * Calling this when the interpreter is not initializing, is already
892 * initialized or without a valid current thread state is a fatal error.
893 * Other errors should be reported as normal Python exceptions with a
894 * non-zero return code.
895 */
Victor Stinner5ac27a52019-03-27 13:40:14 +0100896static _PyInitError
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100897_Py_InitializeMainInterpreter(PyInterpreterState *interp)
Eric Snow1abcf672017-05-23 21:46:51 -0700898{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600899 if (!_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800900 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700901 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700902
Victor Stinner1dc6e392018-07-25 02:49:17 +0200903 /* Configure the main interpreter */
Victor Stinner1dc6e392018-07-25 02:49:17 +0200904 _PyCoreConfig *core_config = &interp->core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700905
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200906 if (_PyRuntime.initialized) {
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100907 return _Py_ReconfigureMainInterpreter(interp);
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200908 }
909
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200910 if (!core_config->_install_importlib) {
Eric Snow1abcf672017-05-23 21:46:51 -0700911 /* Special mode for freeze_importlib: run with no import system
912 *
913 * This means anything which needs support from extension modules
914 * or pure Python code in the standard library won't work.
915 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600916 _PyRuntime.initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800917 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700918 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100919
Victor Stinner33c377e2017-12-05 15:12:41 +0100920 if (_PyTime_Init() < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800921 return _Py_INIT_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100922 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200923
Victor Stinnerab672812019-01-23 15:04:40 +0100924 if (_PySys_InitMain(interp) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800925 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100926 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800927
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200928 _PyInitError err = initexternalimport(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800929 if (_Py_INIT_FAILED(err)) {
930 return err;
931 }
Nick Coghland6009512014-11-20 21:39:37 +1000932
933 /* initialize the faulthandler module */
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200934 err = _PyFaulthandler_Init(core_config->faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800935 if (_Py_INIT_FAILED(err)) {
936 return err;
937 }
Nick Coghland6009512014-11-20 21:39:37 +1000938
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800939 err = initfsencoding(interp);
940 if (_Py_INIT_FAILED(err)) {
941 return err;
942 }
Nick Coghland6009512014-11-20 21:39:37 +1000943
Victor Stinner8b9dbc02019-03-27 01:36:16 +0100944 if (core_config->install_signal_handlers) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800945 err = initsigs(); /* Signal handling stuff, including initintr() */
946 if (_Py_INIT_FAILED(err)) {
947 return err;
948 }
949 }
Nick Coghland6009512014-11-20 21:39:37 +1000950
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200951 if (_PyTraceMalloc_Init(core_config->tracemalloc) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800952 return _Py_INIT_ERR("can't initialize tracemalloc");
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200953 }
Nick Coghland6009512014-11-20 21:39:37 +1000954
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800955 err = add_main_module(interp);
956 if (_Py_INIT_FAILED(err)) {
957 return err;
958 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800959
Victor Stinner91106cd2017-12-13 12:29:09 +0100960 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -0800961 if (_Py_INIT_FAILED(err)) {
962 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800963 }
Nick Coghland6009512014-11-20 21:39:37 +1000964
965 /* Initialize warnings. */
Victor Stinner37cd9822018-11-16 11:55:35 +0100966 PyObject *warnoptions = PySys_GetObject("warnoptions");
967 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
Victor Stinner5d862462017-12-19 11:35:58 +0100968 {
Nick Coghland6009512014-11-20 21:39:37 +1000969 PyObject *warnings_module = PyImport_ImportModule("warnings");
970 if (warnings_module == NULL) {
971 fprintf(stderr, "'import warnings' failed; traceback:\n");
972 PyErr_Print();
973 }
974 Py_XDECREF(warnings_module);
975 }
976
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600977 _PyRuntime.initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700978
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200979 if (core_config->site_import) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800980 err = initsite(); /* Module site */
981 if (_Py_INIT_FAILED(err)) {
982 return err;
983 }
984 }
Victor Stinnercf215042018-08-29 22:56:06 +0200985
986#ifndef MS_WINDOWS
Victor Stinner20004952019-03-26 02:31:11 +0100987 _emit_stderr_warning_for_legacy_locale();
Victor Stinnercf215042018-08-29 22:56:06 +0200988#endif
989
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800990 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000991}
992
Eric Snowc7ec9982017-05-23 23:00:52 -0700993#undef _INIT_DEBUG_PRINT
994
Victor Stinner5ac27a52019-03-27 13:40:14 +0100995static _PyInitError
996init_python(const _PyCoreConfig *config, const _PyArgv *args)
Eric Snow1abcf672017-05-23 21:46:51 -0700997{
Benjamin Petersonacd282f2018-09-11 15:11:06 -0700998 PyInterpreterState *interp = NULL;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800999 _PyInitError err;
Victor Stinner5ac27a52019-03-27 13:40:14 +01001000 err = _Py_InitializeCore(config, args, &interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001001 if (_Py_INIT_FAILED(err)) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001002 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001003 }
Victor Stinner1dc6e392018-07-25 02:49:17 +02001004 config = &interp->core_config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +01001005
Victor Stinner484f20d2019-03-27 02:04:16 +01001006 if (config->_init_main) {
1007 err = _Py_InitializeMainInterpreter(interp);
1008 if (_Py_INIT_FAILED(err)) {
1009 return err;
1010 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001011 }
Victor Stinner484f20d2019-03-27 02:04:16 +01001012
Victor Stinner1dc6e392018-07-25 02:49:17 +02001013 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -07001014}
1015
1016
Victor Stinner5ac27a52019-03-27 13:40:14 +01001017_PyInitError
1018_Py_InitializeFromArgs(const _PyCoreConfig *config, int argc, char **argv)
1019{
1020 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv};
1021 return init_python(config, &args);
1022}
1023
1024
1025_PyInitError
1026_Py_InitializeFromWideArgs(const _PyCoreConfig *config, int argc, wchar_t **argv)
1027{
1028 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv};
1029 return init_python(config, &args);
1030}
1031
1032
1033_PyInitError
1034_Py_InitializeFromConfig(const _PyCoreConfig *config)
1035{
1036 return init_python(config, NULL);
1037}
1038
1039
Eric Snow1abcf672017-05-23 21:46:51 -07001040void
Nick Coghland6009512014-11-20 21:39:37 +10001041Py_InitializeEx(int install_sigs)
1042{
Victor Stinner1dc6e392018-07-25 02:49:17 +02001043 if (_PyRuntime.initialized) {
1044 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
1045 return;
1046 }
1047
Victor Stinner1dc6e392018-07-25 02:49:17 +02001048 _PyCoreConfig config = _PyCoreConfig_INIT;
1049 config.install_signal_handlers = install_sigs;
1050
Victor Stinner5ac27a52019-03-27 13:40:14 +01001051 _PyInitError err = _Py_InitializeFromConfig(&config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001052 if (_Py_INIT_FAILED(err)) {
Victor Stinnerdfe88472019-03-01 12:14:41 +01001053 _Py_ExitInitError(err);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001054 }
Nick Coghland6009512014-11-20 21:39:37 +10001055}
1056
1057void
1058Py_Initialize(void)
1059{
1060 Py_InitializeEx(1);
1061}
1062
1063
1064#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001065extern void _Py_dump_counts(FILE*);
Nick Coghland6009512014-11-20 21:39:37 +10001066#endif
1067
1068/* Flush stdout and stderr */
1069
1070static int
1071file_is_closed(PyObject *fobj)
1072{
1073 int r;
1074 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1075 if (tmp == NULL) {
1076 PyErr_Clear();
1077 return 0;
1078 }
1079 r = PyObject_IsTrue(tmp);
1080 Py_DECREF(tmp);
1081 if (r < 0)
1082 PyErr_Clear();
1083 return r > 0;
1084}
1085
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001086static int
Nick Coghland6009512014-11-20 21:39:37 +10001087flush_std_files(void)
1088{
1089 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1090 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1091 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001092 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001093
1094 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001095 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001096 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001097 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001098 status = -1;
1099 }
Nick Coghland6009512014-11-20 21:39:37 +10001100 else
1101 Py_DECREF(tmp);
1102 }
1103
1104 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001105 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001106 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001107 PyErr_Clear();
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 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001113
1114 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001115}
1116
1117/* Undo the effect of Py_Initialize().
1118
1119 Beware: if multiple interpreter and/or thread states exist, these
1120 are not wiped out; only the current thread and interpreter state
1121 are deleted. But since everything else is deleted, those other
1122 interpreter and thread states should no longer be used.
1123
1124 (XXX We should do better, e.g. wipe out all interpreters and
1125 threads.)
1126
1127 Locking: as above.
1128
1129*/
1130
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001131int
1132Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001133{
1134 PyInterpreterState *interp;
1135 PyThreadState *tstate;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001136 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001137
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001138 if (!_PyRuntime.initialized)
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001139 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001140
Eric Snow842a2f02019-03-15 15:47:51 -06001141 // Wrap up existing "threading"-module-created, non-daemon threads.
Nick Coghland6009512014-11-20 21:39:37 +10001142 wait_for_thread_shutdown();
1143
Marcel Plch776407f2017-12-20 11:17:58 +01001144 /* Get current thread state and interpreter pointer */
Victor Stinner50b48572018-11-01 01:51:40 +01001145 tstate = _PyThreadState_GET();
Marcel Plch776407f2017-12-20 11:17:58 +01001146 interp = tstate->interp;
1147
Eric Snow842a2f02019-03-15 15:47:51 -06001148 // Make any remaining pending calls.
Eric Snowb75b1a352019-04-12 10:20:10 -06001149 _Py_FinishPendingCalls();
Eric Snow842a2f02019-03-15 15:47:51 -06001150
Nick Coghland6009512014-11-20 21:39:37 +10001151 /* The interpreter is still entirely intact at this point, and the
1152 * exit funcs may be relying on that. In particular, if some thread
1153 * or exit func is still waiting to do an import, the import machinery
1154 * expects Py_IsInitialized() to return true. So don't say the
Eric Snow842a2f02019-03-15 15:47:51 -06001155 * runtime is uninitialized until after the exit funcs have run.
Nick Coghland6009512014-11-20 21:39:37 +10001156 * Note that Threading.py uses an exit func to do a join on all the
1157 * threads created thru it, so this also protects pending imports in
1158 * the threads created via Threading.
1159 */
Nick Coghland6009512014-11-20 21:39:37 +10001160
Marcel Plch776407f2017-12-20 11:17:58 +01001161 call_py_exitfuncs(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001162
Victor Stinnerda273412017-12-15 01:46:02 +01001163 /* Copy the core config, PyInterpreterState_Delete() free
1164 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001165#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001166 int show_ref_count = interp->core_config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001167#endif
1168#ifdef Py_TRACE_REFS
Victor Stinnerda273412017-12-15 01:46:02 +01001169 int dump_refs = interp->core_config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001170#endif
1171#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001172 int malloc_stats = interp->core_config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001173#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001174
Nick Coghland6009512014-11-20 21:39:37 +10001175 /* Remaining threads (e.g. daemon threads) will automatically exit
1176 after taking the GIL (in PyEval_RestoreThread()). */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001177 _PyRuntime.finalizing = tstate;
1178 _PyRuntime.initialized = 0;
1179 _PyRuntime.core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001180
Victor Stinnere0deff32015-03-24 13:46:18 +01001181 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001182 if (flush_std_files() < 0) {
1183 status = -1;
1184 }
Nick Coghland6009512014-11-20 21:39:37 +10001185
1186 /* Disable signal handling */
1187 PyOS_FiniInterrupts();
1188
1189 /* Collect garbage. This may call finalizers; it's nice to call these
1190 * before all modules are destroyed.
1191 * XXX If a __del__ or weakref callback is triggered here, and tries to
1192 * XXX import a module, bad things can happen, because Python no
1193 * XXX longer believes it's initialized.
1194 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1195 * XXX is easy to provoke that way. I've also seen, e.g.,
1196 * XXX Exception exceptions.ImportError: 'No module named sha'
1197 * XXX in <function callback at 0x008F5718> ignored
1198 * XXX but I'm unclear on exactly how that one happens. In any case,
1199 * XXX I haven't seen a real-life report of either of these.
1200 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001201 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001202#ifdef COUNT_ALLOCS
1203 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1204 each collection might release some types from the type
1205 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001206 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001207 /* nothing */;
1208#endif
Eric Snowdae02762017-09-14 00:35:58 -07001209
Nick Coghland6009512014-11-20 21:39:37 +10001210 /* Destroy all modules */
1211 PyImport_Cleanup();
1212
Victor Stinnere0deff32015-03-24 13:46:18 +01001213 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001214 if (flush_std_files() < 0) {
1215 status = -1;
1216 }
Nick Coghland6009512014-11-20 21:39:37 +10001217
1218 /* Collect final garbage. This disposes of cycles created by
1219 * class definitions, for example.
1220 * XXX This is disabled because it caused too many problems. If
1221 * XXX a __del__ or weakref callback triggers here, Python code has
1222 * XXX a hard time running, because even the sys module has been
1223 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1224 * XXX One symptom is a sequence of information-free messages
1225 * XXX coming from threads (if a __del__ or callback is invoked,
1226 * XXX other threads can execute too, and any exception they encounter
1227 * XXX triggers a comedy of errors as subsystem after subsystem
1228 * XXX fails to find what it *expects* to find in sys to help report
1229 * XXX the exception and consequent unexpected failures). I've also
1230 * XXX seen segfaults then, after adding print statements to the
1231 * XXX Python code getting called.
1232 */
1233#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001234 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001235#endif
1236
1237 /* Disable tracemalloc after all Python objects have been destroyed,
1238 so it is possible to use tracemalloc in objects destructor. */
1239 _PyTraceMalloc_Fini();
1240
1241 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1242 _PyImport_Fini();
1243
1244 /* Cleanup typeobject.c's internal caches. */
1245 _PyType_Fini();
1246
1247 /* unload faulthandler module */
1248 _PyFaulthandler_Fini();
1249
1250 /* Debugging stuff */
1251#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001252 _Py_dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001253#endif
1254 /* dump hash stats */
1255 _PyHash_Fini();
1256
Eric Snowdae02762017-09-14 00:35:58 -07001257#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001258 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001259 _PyDebug_PrintTotalRefs();
1260 }
Eric Snowdae02762017-09-14 00:35:58 -07001261#endif
Nick Coghland6009512014-11-20 21:39:37 +10001262
1263#ifdef Py_TRACE_REFS
1264 /* Display all objects still alive -- this can invoke arbitrary
1265 * __repr__ overrides, so requires a mostly-intact interpreter.
1266 * Alas, a lot of stuff may still be alive now that will be cleaned
1267 * up later.
1268 */
Victor Stinnerda273412017-12-15 01:46:02 +01001269 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001270 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001271 }
Nick Coghland6009512014-11-20 21:39:37 +10001272#endif /* Py_TRACE_REFS */
1273
1274 /* Clear interpreter state and all thread states. */
1275 PyInterpreterState_Clear(interp);
1276
1277 /* Now we decref the exception classes. After this point nothing
1278 can raise an exception. That's okay, because each Fini() method
1279 below has been checked to make sure no exceptions are ever
1280 raised.
1281 */
1282
1283 _PyExc_Fini();
1284
1285 /* Sundry finalizers */
1286 PyMethod_Fini();
1287 PyFrame_Fini();
1288 PyCFunction_Fini();
1289 PyTuple_Fini();
1290 PyList_Fini();
1291 PySet_Fini();
1292 PyBytes_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001293 PyLong_Fini();
1294 PyFloat_Fini();
1295 PyDict_Fini();
1296 PySlice_Fini();
1297 _PyGC_Fini();
Eric Snow6b4be192017-05-22 21:36:03 -07001298 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001299 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001300 PyAsyncGen_Fini();
Yury Selivanovf23746a2018-01-22 19:11:18 -05001301 _PyContext_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001302
1303 /* Cleanup Unicode implementation */
1304 _PyUnicode_Fini();
1305
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001306 _Py_ClearFileSystemEncoding();
Nick Coghland6009512014-11-20 21:39:37 +10001307
1308 /* XXX Still allocated:
1309 - various static ad-hoc pointers to interned strings
1310 - int and float free list blocks
1311 - whatever various modules and libraries allocate
1312 */
1313
1314 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1315
1316 /* Cleanup auto-thread-state */
Nick Coghland6009512014-11-20 21:39:37 +10001317 _PyGILState_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001318
1319 /* Delete current thread. After this, many C API calls become crashy. */
1320 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001321
Nick Coghland6009512014-11-20 21:39:37 +10001322 PyInterpreterState_Delete(interp);
1323
1324#ifdef Py_TRACE_REFS
1325 /* Display addresses (& refcnts) of all objects still alive.
1326 * An address can be used to find the repr of the object, printed
1327 * above by _Py_PrintReferences.
1328 */
Victor Stinnerda273412017-12-15 01:46:02 +01001329 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001330 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001331 }
Nick Coghland6009512014-11-20 21:39:37 +10001332#endif /* Py_TRACE_REFS */
Victor Stinner34be807c2016-03-14 12:04:26 +01001333#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001334 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001335 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be807c2016-03-14 12:04:26 +01001336 }
Nick Coghland6009512014-11-20 21:39:37 +10001337#endif
1338
1339 call_ll_exitfuncs();
Victor Stinner9316ee42017-11-25 03:17:57 +01001340
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001341 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001342 return status;
1343}
1344
1345void
1346Py_Finalize(void)
1347{
1348 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001349}
1350
1351/* Create and initialize a new interpreter and thread, and return the
1352 new thread. This requires that Py_Initialize() has been called
1353 first.
1354
1355 Unsuccessful initialization yields a NULL pointer. Note that *no*
1356 exception information is available even in this case -- the
1357 exception information is held in the thread, and there is no
1358 thread.
1359
1360 Locking: as above.
1361
1362*/
1363
Victor Stinnera7368ac2017-11-15 18:11:45 -08001364static _PyInitError
1365new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001366{
1367 PyInterpreterState *interp;
1368 PyThreadState *tstate, *save_tstate;
1369 PyObject *bimod, *sysmod;
Victor Stinner9316ee42017-11-25 03:17:57 +01001370 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001371
Victor Stinnera7368ac2017-11-15 18:11:45 -08001372 if (!_PyRuntime.initialized) {
1373 return _Py_INIT_ERR("Py_Initialize must be called first");
1374 }
Nick Coghland6009512014-11-20 21:39:37 +10001375
Victor Stinner8a1be612016-03-14 22:07:55 +01001376 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1377 interpreters: disable PyGILState_Check(). */
1378 _PyGILState_check_enabled = 0;
1379
Nick Coghland6009512014-11-20 21:39:37 +10001380 interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001381 if (interp == NULL) {
1382 *tstate_p = NULL;
1383 return _Py_INIT_OK();
1384 }
Nick Coghland6009512014-11-20 21:39:37 +10001385
1386 tstate = PyThreadState_New(interp);
1387 if (tstate == NULL) {
1388 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001389 *tstate_p = NULL;
1390 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001391 }
1392
1393 save_tstate = PyThreadState_Swap(tstate);
1394
Eric Snow1abcf672017-05-23 21:46:51 -07001395 /* Copy the current interpreter config into the new interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +01001396 _PyCoreConfig *core_config;
Eric Snow1abcf672017-05-23 21:46:51 -07001397 if (save_tstate != NULL) {
Victor Stinnerda273412017-12-15 01:46:02 +01001398 core_config = &save_tstate->interp->core_config;
Eric Snow1abcf672017-05-23 21:46:51 -07001399 } else {
1400 /* No current thread state, copy from the main interpreter */
1401 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinnerda273412017-12-15 01:46:02 +01001402 core_config = &main_interp->core_config;
Victor Stinnerda273412017-12-15 01:46:02 +01001403 }
1404
1405 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
Victor Stinnerd929f182019-03-27 18:28:46 +01001406 return _Py_INIT_NO_MEMORY();
Victor Stinnerda273412017-12-15 01:46:02 +01001407 }
Victor Stinnerd19d8d52018-07-24 13:55:48 +02001408 core_config = &interp->core_config;
Eric Snow1abcf672017-05-23 21:46:51 -07001409
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001410 err = _PyExc_Init();
1411 if (_Py_INIT_FAILED(err)) {
1412 return err;
1413 }
1414
Nick Coghland6009512014-11-20 21:39:37 +10001415 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001416 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001417 if (modules == NULL) {
1418 return _Py_INIT_ERR("can't make modules dictionary");
1419 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001420 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001421
Eric Snowd393c1b2017-09-14 12:18:12 -06001422 sysmod = _PyImport_FindBuiltin("sys", modules);
1423 if (sysmod != NULL) {
1424 interp->sysdict = PyModule_GetDict(sysmod);
1425 if (interp->sysdict == NULL)
1426 goto handle_error;
1427 Py_INCREF(interp->sysdict);
1428 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinnerab672812019-01-23 15:04:40 +01001429 if (_PySys_InitMain(interp) < 0) {
1430 return _Py_INIT_ERR("can't finish initializing sys");
1431 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001432 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001433 else if (PyErr_Occurred()) {
1434 goto handle_error;
1435 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001436
1437 bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001438 if (bimod != NULL) {
1439 interp->builtins = PyModule_GetDict(bimod);
1440 if (interp->builtins == NULL)
1441 goto handle_error;
1442 Py_INCREF(interp->builtins);
1443 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001444 else if (PyErr_Occurred()) {
1445 goto handle_error;
1446 }
Nick Coghland6009512014-11-20 21:39:37 +10001447
Nick Coghland6009512014-11-20 21:39:37 +10001448 if (bimod != NULL && sysmod != NULL) {
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001449 err = _PyBuiltins_AddExceptions(bimod);
1450 if (_Py_INIT_FAILED(err)) {
1451 return err;
1452 }
Nick Coghland6009512014-11-20 21:39:37 +10001453
Victor Stinnerab672812019-01-23 15:04:40 +01001454 err = _PySys_SetPreliminaryStderr(interp->sysdict);
1455 if (_Py_INIT_FAILED(err)) {
1456 return err;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001457 }
Nick Coghland6009512014-11-20 21:39:37 +10001458
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001459 err = _PyImportHooks_Init();
1460 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001461 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001462 }
Nick Coghland6009512014-11-20 21:39:37 +10001463
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001464 err = initimport(interp, sysmod);
1465 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001466 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001467 }
Nick Coghland6009512014-11-20 21:39:37 +10001468
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001469 err = initexternalimport(interp);
1470 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001471 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001472 }
Nick Coghland6009512014-11-20 21:39:37 +10001473
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001474 err = initfsencoding(interp);
1475 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001476 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001477 }
1478
Victor Stinner91106cd2017-12-13 12:29:09 +01001479 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001480 if (_Py_INIT_FAILED(err)) {
1481 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001482 }
1483
1484 err = add_main_module(interp);
1485 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001486 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001487 }
1488
Victor Stinnerd19d8d52018-07-24 13:55:48 +02001489 if (core_config->site_import) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001490 err = initsite();
1491 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001492 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001493 }
1494 }
Nick Coghland6009512014-11-20 21:39:37 +10001495 }
1496
Victor Stinnera7368ac2017-11-15 18:11:45 -08001497 if (PyErr_Occurred()) {
1498 goto handle_error;
1499 }
Nick Coghland6009512014-11-20 21:39:37 +10001500
Victor Stinnera7368ac2017-11-15 18:11:45 -08001501 *tstate_p = tstate;
1502 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001503
Nick Coghland6009512014-11-20 21:39:37 +10001504handle_error:
1505 /* Oops, it didn't work. Undo it all. */
1506
1507 PyErr_PrintEx(0);
1508 PyThreadState_Clear(tstate);
1509 PyThreadState_Swap(save_tstate);
1510 PyThreadState_Delete(tstate);
1511 PyInterpreterState_Delete(interp);
1512
Victor Stinnera7368ac2017-11-15 18:11:45 -08001513 *tstate_p = NULL;
1514 return _Py_INIT_OK();
1515}
1516
1517PyThreadState *
1518Py_NewInterpreter(void)
1519{
Stéphane Wirtel9e06d2b2019-03-18 17:10:29 +01001520 PyThreadState *tstate = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001521 _PyInitError err = new_interpreter(&tstate);
1522 if (_Py_INIT_FAILED(err)) {
Victor Stinnerdfe88472019-03-01 12:14:41 +01001523 _Py_ExitInitError(err);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001524 }
1525 return tstate;
1526
Nick Coghland6009512014-11-20 21:39:37 +10001527}
1528
1529/* Delete an interpreter and its last thread. This requires that the
1530 given thread state is current, that the thread has no remaining
1531 frames, and that it is its interpreter's only remaining thread.
1532 It is a fatal error to violate these constraints.
1533
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001534 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001535 everything, regardless.)
1536
1537 Locking: as above.
1538
1539*/
1540
1541void
1542Py_EndInterpreter(PyThreadState *tstate)
1543{
1544 PyInterpreterState *interp = tstate->interp;
1545
Victor Stinner50b48572018-11-01 01:51:40 +01001546 if (tstate != _PyThreadState_GET())
Nick Coghland6009512014-11-20 21:39:37 +10001547 Py_FatalError("Py_EndInterpreter: thread is not current");
1548 if (tstate->frame != NULL)
1549 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Eric Snow5be45a62019-03-08 22:47:07 -07001550 interp->finalizing = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001551
Eric Snow842a2f02019-03-15 15:47:51 -06001552 // Wrap up existing "threading"-module-created, non-daemon threads.
Nick Coghland6009512014-11-20 21:39:37 +10001553 wait_for_thread_shutdown();
1554
Marcel Plch776407f2017-12-20 11:17:58 +01001555 call_py_exitfuncs(interp);
1556
Nick Coghland6009512014-11-20 21:39:37 +10001557 if (tstate != interp->tstate_head || tstate->next != NULL)
1558 Py_FatalError("Py_EndInterpreter: not the last thread");
1559
1560 PyImport_Cleanup();
1561 PyInterpreterState_Clear(interp);
1562 PyThreadState_Swap(NULL);
1563 PyInterpreterState_Delete(interp);
1564}
1565
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001566/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001567
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001568static _PyInitError
1569add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001570{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001571 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001572 m = PyImport_AddModule("__main__");
1573 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001574 return _Py_INIT_ERR("can't create __main__ module");
1575
Nick Coghland6009512014-11-20 21:39:37 +10001576 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001577 ann_dict = PyDict_New();
1578 if ((ann_dict == NULL) ||
1579 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001580 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001581 }
1582 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001583
Nick Coghland6009512014-11-20 21:39:37 +10001584 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1585 PyObject *bimod = PyImport_ImportModule("builtins");
1586 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001587 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001588 }
1589 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001590 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001591 }
1592 Py_DECREF(bimod);
1593 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001594
Nick Coghland6009512014-11-20 21:39:37 +10001595 /* Main is a little special - imp.is_builtin("__main__") will return
1596 * False, but BuiltinImporter is still the most appropriate initial
1597 * setting for its __loader__ attribute. A more suitable value will
1598 * be set if __main__ gets further initialized later in the startup
1599 * process.
1600 */
1601 loader = PyDict_GetItemString(d, "__loader__");
1602 if (loader == NULL || loader == Py_None) {
1603 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1604 "BuiltinImporter");
1605 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001606 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001607 }
1608 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001609 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001610 }
1611 Py_DECREF(loader);
1612 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001613 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001614}
1615
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001616static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001617initfsencoding(PyInterpreterState *interp)
1618{
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001619 _PyCoreConfig *config = &interp->core_config;
Nick Coghland6009512014-11-20 21:39:37 +10001620
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001621 char *encoding = get_codec_name(config->filesystem_encoding);
1622 if (encoding == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001623 /* Such error can only occurs in critical situations: no more
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001624 memory, import a module of the standard library failed, etc. */
1625 return _Py_INIT_ERR("failed to get the Python codec "
1626 "of the filesystem encoding");
Nick Coghland6009512014-11-20 21:39:37 +10001627 }
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001628
1629 /* Update the filesystem encoding to the normalized Python codec name.
1630 For example, replace "ANSI_X3.4-1968" (locale encoding) with "ascii"
1631 (Python codec name). */
1632 PyMem_RawFree(config->filesystem_encoding);
1633 config->filesystem_encoding = encoding;
1634
1635 /* Set Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors
1636 global configuration variables. */
1637 if (_Py_SetFileSystemEncoding(config->filesystem_encoding,
1638 config->filesystem_errors) < 0) {
1639 return _Py_INIT_NO_MEMORY();
1640 }
1641
1642 /* PyUnicode can now use the Python codec rather than C implementation
1643 for the filesystem encoding */
Nick Coghland6009512014-11-20 21:39:37 +10001644 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001645 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001646}
1647
1648/* Import the site module (not into __main__ though) */
1649
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001650static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001651initsite(void)
1652{
1653 PyObject *m;
1654 m = PyImport_ImportModule("site");
1655 if (m == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001656 return _Py_INIT_USER_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001657 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001658 Py_DECREF(m);
1659 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001660}
1661
Victor Stinner874dbe82015-09-04 17:29:57 +02001662/* Check if a file descriptor is valid or not.
1663 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1664static int
1665is_valid_fd(int fd)
1666{
Victor Stinner3092d6b2019-04-17 18:09:12 +02001667/* dup() is faster than fstat(): fstat() can require input/output operations,
1668 whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python
1669 startup. Problem: dup() doesn't check if the file descriptor is valid on
1670 some platforms.
1671
1672 bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other
1673 side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with
1674 EBADF. FreeBSD has similar issue (bpo-32849).
1675
1676 Only use dup() on platforms where dup() is enough to detect invalid FD in
1677 corner cases: on Linux and Windows (bpo-32849). */
1678#if defined(__linux__) || defined(MS_WINDOWS)
1679 if (fd < 0) {
1680 return 0;
1681 }
1682 int fd2;
1683
1684 _Py_BEGIN_SUPPRESS_IPH
1685 fd2 = dup(fd);
1686 if (fd2 >= 0) {
1687 close(fd2);
1688 }
1689 _Py_END_SUPPRESS_IPH
1690
1691 return (fd2 >= 0);
1692#else
Victor Stinner1c4670e2017-05-04 00:45:56 +02001693 struct stat st;
1694 return (fstat(fd, &st) == 0);
Victor Stinner1c4670e2017-05-04 00:45:56 +02001695#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001696}
1697
1698/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001699static PyObject*
Victor Stinnerfbca9082018-08-30 00:50:45 +02001700create_stdio(const _PyCoreConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001701 int fd, int write_mode, const char* name,
1702 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001703{
1704 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1705 const char* mode;
1706 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001707 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001708 int buffering, isatty;
1709 _Py_IDENTIFIER(open);
1710 _Py_IDENTIFIER(isatty);
1711 _Py_IDENTIFIER(TextIOWrapper);
1712 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001713 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001714
Victor Stinner874dbe82015-09-04 17:29:57 +02001715 if (!is_valid_fd(fd))
1716 Py_RETURN_NONE;
1717
Nick Coghland6009512014-11-20 21:39:37 +10001718 /* stdin is always opened in buffered mode, first because it shouldn't
1719 make a difference in common use cases, second because TextIOWrapper
1720 depends on the presence of a read1() method which only exists on
1721 buffered streams.
1722 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001723 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001724 buffering = 0;
1725 else
1726 buffering = -1;
1727 if (write_mode)
1728 mode = "wb";
1729 else
1730 mode = "rb";
1731 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1732 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001733 Py_None, Py_None, /* encoding, errors */
1734 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001735 if (buf == NULL)
1736 goto error;
1737
1738 if (buffering) {
1739 _Py_IDENTIFIER(raw);
1740 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1741 if (raw == NULL)
1742 goto error;
1743 }
1744 else {
1745 raw = buf;
1746 Py_INCREF(raw);
1747 }
1748
Steve Dower39294992016-08-30 21:22:36 -07001749#ifdef MS_WINDOWS
1750 /* Windows console IO is always UTF-8 encoded */
1751 if (PyWindowsConsoleIO_Check(raw))
1752 encoding = "utf-8";
1753#endif
1754
Nick Coghland6009512014-11-20 21:39:37 +10001755 text = PyUnicode_FromString(name);
1756 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1757 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001758 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001759 if (res == NULL)
1760 goto error;
1761 isatty = PyObject_IsTrue(res);
1762 Py_DECREF(res);
1763 if (isatty == -1)
1764 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001765 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001766 write_through = Py_True;
1767 else
1768 write_through = Py_False;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001769 if (isatty && buffered_stdio)
Nick Coghland6009512014-11-20 21:39:37 +10001770 line_buffering = Py_True;
1771 else
1772 line_buffering = Py_False;
1773
1774 Py_CLEAR(raw);
1775 Py_CLEAR(text);
1776
1777#ifdef MS_WINDOWS
1778 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1779 newlines to "\n".
1780 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1781 newline = NULL;
1782#else
1783 /* sys.stdin: split lines at "\n".
1784 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1785 newline = "\n";
1786#endif
1787
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001788 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001789 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001790 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001791 Py_CLEAR(buf);
1792 if (stream == NULL)
1793 goto error;
1794
1795 if (write_mode)
1796 mode = "w";
1797 else
1798 mode = "r";
1799 text = PyUnicode_FromString(mode);
1800 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1801 goto error;
1802 Py_CLEAR(text);
1803 return stream;
1804
1805error:
1806 Py_XDECREF(buf);
1807 Py_XDECREF(stream);
1808 Py_XDECREF(text);
1809 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001810
Victor Stinner874dbe82015-09-04 17:29:57 +02001811 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1812 /* Issue #24891: the file descriptor was closed after the first
1813 is_valid_fd() check was called. Ignore the OSError and set the
1814 stream to None. */
1815 PyErr_Clear();
1816 Py_RETURN_NONE;
1817 }
1818 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001819}
1820
1821/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001822static _PyInitError
Victor Stinner91106cd2017-12-13 12:29:09 +01001823init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001824{
1825 PyObject *iomod = NULL, *wrapper;
1826 PyObject *bimod = NULL;
1827 PyObject *m;
1828 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001829 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001830 PyObject * encoding_attr;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001831 _PyInitError res = _Py_INIT_OK();
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001832 _PyCoreConfig *config = &interp->core_config;
1833
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001834 /* Check that stdin is not a directory
1835 Using shell redirection, you can redirect stdin to a directory,
1836 crashing the Python interpreter. Catch this common mistake here
1837 and output a useful error message. Note that under MS Windows,
1838 the shell already prevents that. */
1839#ifndef MS_WINDOWS
1840 struct _Py_stat_struct sb;
1841 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1842 S_ISDIR(sb.st_mode)) {
1843 return _Py_INIT_USER_ERR("<stdin> is a directory, "
1844 "cannot continue");
1845 }
1846#endif
1847
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001848 char *codec_name = get_codec_name(config->stdio_encoding);
1849 if (codec_name == NULL) {
1850 return _Py_INIT_ERR("failed to get the Python codec name "
1851 "of the stdio encoding");
1852 }
1853 PyMem_RawFree(config->stdio_encoding);
1854 config->stdio_encoding = codec_name;
Nick Coghland6009512014-11-20 21:39:37 +10001855
1856 /* Hack to avoid a nasty recursion issue when Python is invoked
1857 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1858 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1859 goto error;
1860 }
1861 Py_DECREF(m);
1862
1863 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1864 goto error;
1865 }
1866 Py_DECREF(m);
1867
1868 if (!(bimod = PyImport_ImportModule("builtins"))) {
1869 goto error;
1870 }
1871
1872 if (!(iomod = PyImport_ImportModule("io"))) {
1873 goto error;
1874 }
1875 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1876 goto error;
1877 }
1878
1879 /* Set builtins.open */
1880 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1881 Py_DECREF(wrapper);
1882 goto error;
1883 }
1884 Py_DECREF(wrapper);
1885
Nick Coghland6009512014-11-20 21:39:37 +10001886 /* Set sys.stdin */
1887 fd = fileno(stdin);
1888 /* Under some conditions stdin, stdout and stderr may not be connected
1889 * and fileno() may point to an invalid file descriptor. For example
1890 * GUI apps don't have valid standard streams by default.
1891 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001892 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001893 config->stdio_encoding,
1894 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001895 if (std == NULL)
1896 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001897 PySys_SetObject("__stdin__", std);
1898 _PySys_SetObjectId(&PyId_stdin, std);
1899 Py_DECREF(std);
1900
1901 /* Set sys.stdout */
1902 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001903 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001904 config->stdio_encoding,
1905 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001906 if (std == NULL)
1907 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001908 PySys_SetObject("__stdout__", std);
1909 _PySys_SetObjectId(&PyId_stdout, std);
1910 Py_DECREF(std);
1911
1912#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1913 /* Set sys.stderr, replaces the preliminary stderr */
1914 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001915 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001916 config->stdio_encoding,
1917 "backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001918 if (std == NULL)
1919 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001920
1921 /* Same as hack above, pre-import stderr's codec to avoid recursion
1922 when import.c tries to write to stderr in verbose mode. */
1923 encoding_attr = PyObject_GetAttrString(std, "encoding");
1924 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001925 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001926 if (std_encoding != NULL) {
1927 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1928 Py_XDECREF(codec_info);
1929 }
1930 Py_DECREF(encoding_attr);
1931 }
1932 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1933
1934 if (PySys_SetObject("__stderr__", std) < 0) {
1935 Py_DECREF(std);
1936 goto error;
1937 }
1938 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1939 Py_DECREF(std);
1940 goto error;
1941 }
1942 Py_DECREF(std);
1943#endif
1944
Victor Stinnera7368ac2017-11-15 18:11:45 -08001945 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001946
Victor Stinnera7368ac2017-11-15 18:11:45 -08001947error:
1948 res = _Py_INIT_ERR("can't initialize sys standard streams");
1949
1950done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02001951 _Py_ClearStandardStreamEncoding();
Victor Stinner31e99082017-12-20 23:41:38 +01001952
Nick Coghland6009512014-11-20 21:39:37 +10001953 Py_XDECREF(bimod);
1954 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001955 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001956}
1957
1958
Victor Stinner10dc4842015-03-24 12:01:30 +01001959static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001960_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001961{
Victor Stinner10dc4842015-03-24 12:01:30 +01001962 fputc('\n', stderr);
1963 fflush(stderr);
1964
1965 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001966 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001967}
Victor Stinner791da1c2016-03-14 16:53:12 +01001968
1969/* Print the current exception (if an exception is set) with its traceback,
1970 or display the current Python stack.
1971
1972 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1973 called on catastrophic cases.
1974
1975 Return 1 if the traceback was displayed, 0 otherwise. */
1976
1977static int
1978_Py_FatalError_PrintExc(int fd)
1979{
1980 PyObject *ferr, *res;
1981 PyObject *exception, *v, *tb;
1982 int has_tb;
1983
Victor Stinner791da1c2016-03-14 16:53:12 +01001984 PyErr_Fetch(&exception, &v, &tb);
1985 if (exception == NULL) {
1986 /* No current exception */
1987 return 0;
1988 }
1989
1990 ferr = _PySys_GetObjectId(&PyId_stderr);
1991 if (ferr == NULL || ferr == Py_None) {
1992 /* sys.stderr is not set yet or set to None,
1993 no need to try to display the exception */
1994 return 0;
1995 }
1996
1997 PyErr_NormalizeException(&exception, &v, &tb);
1998 if (tb == NULL) {
1999 tb = Py_None;
2000 Py_INCREF(tb);
2001 }
2002 PyException_SetTraceback(v, tb);
2003 if (exception == NULL) {
2004 /* PyErr_NormalizeException() failed */
2005 return 0;
2006 }
2007
2008 has_tb = (tb != Py_None);
2009 PyErr_Display(exception, v, tb);
2010 Py_XDECREF(exception);
2011 Py_XDECREF(v);
2012 Py_XDECREF(tb);
2013
2014 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07002015 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01002016 if (res == NULL)
2017 PyErr_Clear();
2018 else
2019 Py_DECREF(res);
2020
2021 return has_tb;
2022}
2023
Nick Coghland6009512014-11-20 21:39:37 +10002024/* Print fatal error message and abort */
2025
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002026#ifdef MS_WINDOWS
2027static void
2028fatal_output_debug(const char *msg)
2029{
2030 /* buffer of 256 bytes allocated on the stack */
2031 WCHAR buffer[256 / sizeof(WCHAR)];
2032 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2033 size_t msglen;
2034
2035 OutputDebugStringW(L"Fatal Python error: ");
2036
2037 msglen = strlen(msg);
2038 while (msglen) {
2039 size_t i;
2040
2041 if (buflen > msglen) {
2042 buflen = msglen;
2043 }
2044
2045 /* Convert the message to wchar_t. This uses a simple one-to-one
2046 conversion, assuming that the this error message actually uses
2047 ASCII only. If this ceases to be true, we will have to convert. */
2048 for (i=0; i < buflen; ++i) {
2049 buffer[i] = msg[i];
2050 }
2051 buffer[i] = L'\0';
2052 OutputDebugStringW(buffer);
2053
2054 msg += buflen;
2055 msglen -= buflen;
2056 }
2057 OutputDebugStringW(L"\n");
2058}
2059#endif
2060
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002061static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002062fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002063{
2064 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01002065 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002066
2067 if (reentrant) {
2068 /* Py_FatalError() caused a second fatal error.
2069 Example: flush_std_files() raises a recursion error. */
2070 goto exit;
2071 }
2072 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002073
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002074 fprintf(stderr, "Fatal Python error: ");
2075 if (prefix) {
2076 fputs(prefix, stderr);
2077 fputs(": ", stderr);
2078 }
2079 if (msg) {
2080 fputs(msg, stderr);
2081 }
2082 else {
2083 fprintf(stderr, "<message not set>");
2084 }
2085 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10002086 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01002087
Victor Stinner3a228ab2018-11-01 00:26:41 +01002088 /* Check if the current thread has a Python thread state
2089 and holds the GIL */
2090 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2091 if (tss_tstate != NULL) {
Victor Stinner50b48572018-11-01 01:51:40 +01002092 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner3a228ab2018-11-01 00:26:41 +01002093 if (tss_tstate != tstate) {
2094 /* The Python thread does not hold the GIL */
2095 tss_tstate = NULL;
2096 }
2097 }
2098 else {
2099 /* Py_FatalError() has been called from a C thread
2100 which has no Python thread state. */
2101 }
2102 int has_tstate_and_gil = (tss_tstate != NULL);
2103
2104 if (has_tstate_and_gil) {
2105 /* If an exception is set, print the exception with its traceback */
2106 if (!_Py_FatalError_PrintExc(fd)) {
2107 /* No exception is set, or an exception is set without traceback */
2108 _Py_FatalError_DumpTracebacks(fd);
2109 }
2110 }
2111 else {
Victor Stinner791da1c2016-03-14 16:53:12 +01002112 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002113 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002114
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002115 /* The main purpose of faulthandler is to display the traceback.
2116 This function already did its best to display a traceback.
2117 Disable faulthandler to prevent writing a second traceback
2118 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002119 _PyFaulthandler_Fini();
2120
Victor Stinner791da1c2016-03-14 16:53:12 +01002121 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002122 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002123 /* Flush sys.stdout and sys.stderr */
2124 flush_std_files();
2125 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002126
Nick Coghland6009512014-11-20 21:39:37 +10002127#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002128 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002129#endif /* MS_WINDOWS */
2130
2131exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002132 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002133#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002134 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002135#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002136 abort();
2137 }
2138 else {
2139 exit(status);
2140 }
2141}
2142
Victor Stinner19760862017-12-20 01:41:59 +01002143void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002144Py_FatalError(const char *msg)
2145{
2146 fatal_error(NULL, msg, -1);
2147}
2148
Victor Stinner19760862017-12-20 01:41:59 +01002149void _Py_NO_RETURN
Victor Stinnerdfe88472019-03-01 12:14:41 +01002150_Py_ExitInitError(_PyInitError err)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002151{
Victor Stinnerdfe88472019-03-01 12:14:41 +01002152 if (err.exitcode >= 0) {
2153 exit(err.exitcode);
2154 }
2155 else {
2156 /* On "user" error: exit with status 1.
2157 For all other errors, call abort(). */
2158 int status = err.user_err ? 1 : -1;
2159 fatal_error(err.prefix, err.msg, status);
2160 }
Nick Coghland6009512014-11-20 21:39:37 +10002161}
2162
2163/* Clean up and exit */
2164
Victor Stinnerd7292b52016-06-17 12:29:00 +02002165# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002166
Nick Coghland6009512014-11-20 21:39:37 +10002167/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002168void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002169{
Victor Stinnercaba55b2018-08-03 15:33:52 +02002170 PyInterpreterState *is = _PyInterpreterState_Get();
Marcel Plch776407f2017-12-20 11:17:58 +01002171
Antoine Pitroufc5db952017-12-13 02:29:07 +01002172 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002173 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2174
2175 is->pyexitfunc = func;
2176 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002177}
2178
2179static void
Marcel Plch776407f2017-12-20 11:17:58 +01002180call_py_exitfuncs(PyInterpreterState *istate)
Nick Coghland6009512014-11-20 21:39:37 +10002181{
Marcel Plch776407f2017-12-20 11:17:58 +01002182 if (istate->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002183 return;
2184
Marcel Plch776407f2017-12-20 11:17:58 +01002185 (*istate->pyexitfunc)(istate->pyexitmodule);
Nick Coghland6009512014-11-20 21:39:37 +10002186 PyErr_Clear();
2187}
2188
2189/* Wait until threading._shutdown completes, provided
2190 the threading module was imported in the first place.
2191 The shutdown routine will wait until all non-daemon
2192 "threading" threads have completed. */
2193static void
2194wait_for_thread_shutdown(void)
2195{
Nick Coghland6009512014-11-20 21:39:37 +10002196 _Py_IDENTIFIER(_shutdown);
2197 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002198 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002199 if (threading == NULL) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002200 if (PyErr_Occurred()) {
2201 PyErr_WriteUnraisable(NULL);
2202 }
2203 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002204 return;
2205 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002206 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002207 if (result == NULL) {
2208 PyErr_WriteUnraisable(threading);
2209 }
2210 else {
2211 Py_DECREF(result);
2212 }
2213 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002214}
2215
2216#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002217int Py_AtExit(void (*func)(void))
2218{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002219 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002220 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002221 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002222 return 0;
2223}
2224
2225static void
2226call_ll_exitfuncs(void)
2227{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002228 while (_PyRuntime.nexitfuncs > 0)
2229 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002230
2231 fflush(stdout);
2232 fflush(stderr);
2233}
2234
Victor Stinnercfc88312018-08-01 16:41:25 +02002235void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002236Py_Exit(int sts)
2237{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002238 if (Py_FinalizeEx() < 0) {
2239 sts = 120;
2240 }
Nick Coghland6009512014-11-20 21:39:37 +10002241
2242 exit(sts);
2243}
2244
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002245static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002246initsigs(void)
2247{
2248#ifdef SIGPIPE
2249 PyOS_setsig(SIGPIPE, SIG_IGN);
2250#endif
2251#ifdef SIGXFZ
2252 PyOS_setsig(SIGXFZ, SIG_IGN);
2253#endif
2254#ifdef SIGXFSZ
2255 PyOS_setsig(SIGXFSZ, SIG_IGN);
2256#endif
2257 PyOS_InitInterrupts(); /* May imply initsignal() */
2258 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002259 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002260 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002261 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002262}
2263
2264
2265/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2266 *
2267 * All of the code in this function must only use async-signal-safe functions,
2268 * listed at `man 7 signal` or
2269 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2270 */
2271void
2272_Py_RestoreSignals(void)
2273{
2274#ifdef SIGPIPE
2275 PyOS_setsig(SIGPIPE, SIG_DFL);
2276#endif
2277#ifdef SIGXFZ
2278 PyOS_setsig(SIGXFZ, SIG_DFL);
2279#endif
2280#ifdef SIGXFSZ
2281 PyOS_setsig(SIGXFSZ, SIG_DFL);
2282#endif
2283}
2284
2285
2286/*
2287 * The file descriptor fd is considered ``interactive'' if either
2288 * a) isatty(fd) is TRUE, or
2289 * b) the -i flag was given, and the filename associated with
2290 * the descriptor is NULL or "<stdin>" or "???".
2291 */
2292int
2293Py_FdIsInteractive(FILE *fp, const char *filename)
2294{
2295 if (isatty((int)fileno(fp)))
2296 return 1;
2297 if (!Py_InteractiveFlag)
2298 return 0;
2299 return (filename == NULL) ||
2300 (strcmp(filename, "<stdin>") == 0) ||
2301 (strcmp(filename, "???") == 0);
2302}
2303
2304
Nick Coghland6009512014-11-20 21:39:37 +10002305/* Wrappers around sigaction() or signal(). */
2306
2307PyOS_sighandler_t
2308PyOS_getsig(int sig)
2309{
2310#ifdef HAVE_SIGACTION
2311 struct sigaction context;
2312 if (sigaction(sig, NULL, &context) == -1)
2313 return SIG_ERR;
2314 return context.sa_handler;
2315#else
2316 PyOS_sighandler_t handler;
2317/* Special signal handling for the secure CRT in Visual Studio 2005 */
2318#if defined(_MSC_VER) && _MSC_VER >= 1400
2319 switch (sig) {
2320 /* Only these signals are valid */
2321 case SIGINT:
2322 case SIGILL:
2323 case SIGFPE:
2324 case SIGSEGV:
2325 case SIGTERM:
2326 case SIGBREAK:
2327 case SIGABRT:
2328 break;
2329 /* Don't call signal() with other values or it will assert */
2330 default:
2331 return SIG_ERR;
2332 }
2333#endif /* _MSC_VER && _MSC_VER >= 1400 */
2334 handler = signal(sig, SIG_IGN);
2335 if (handler != SIG_ERR)
2336 signal(sig, handler);
2337 return handler;
2338#endif
2339}
2340
2341/*
2342 * All of the code in this function must only use async-signal-safe functions,
2343 * listed at `man 7 signal` or
2344 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2345 */
2346PyOS_sighandler_t
2347PyOS_setsig(int sig, PyOS_sighandler_t handler)
2348{
2349#ifdef HAVE_SIGACTION
2350 /* Some code in Modules/signalmodule.c depends on sigaction() being
2351 * used here if HAVE_SIGACTION is defined. Fix that if this code
2352 * changes to invalidate that assumption.
2353 */
2354 struct sigaction context, ocontext;
2355 context.sa_handler = handler;
2356 sigemptyset(&context.sa_mask);
2357 context.sa_flags = 0;
2358 if (sigaction(sig, &context, &ocontext) == -1)
2359 return SIG_ERR;
2360 return ocontext.sa_handler;
2361#else
2362 PyOS_sighandler_t oldhandler;
2363 oldhandler = signal(sig, handler);
2364#ifdef HAVE_SIGINTERRUPT
2365 siginterrupt(sig, 1);
2366#endif
2367 return oldhandler;
2368#endif
2369}
2370
2371#ifdef __cplusplus
2372}
2373#endif