blob: ad1447256cc697550886b1386d46c5700abc1f90 [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 Stinner1c4670e2017-05-04 00:45:56 +02001667#ifdef __APPLE__
1668 /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe
1669 and the other side of the pipe is closed, dup(1) succeed, whereas
1670 fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect
1671 such error. */
1672 struct stat st;
1673 return (fstat(fd, &st) == 0);
1674#else
Victor Stinner874dbe82015-09-04 17:29:57 +02001675 int fd2;
Steve Dower940f33a2016-09-08 11:21:54 -07001676 if (fd < 0)
Victor Stinner874dbe82015-09-04 17:29:57 +02001677 return 0;
1678 _Py_BEGIN_SUPPRESS_IPH
Victor Stinner449b2712015-09-29 13:59:50 +02001679 /* Prefer dup() over fstat(). fstat() can require input/output whereas
1680 dup() doesn't, there is a low risk of EMFILE/ENFILE at Python
1681 startup. */
Victor Stinner874dbe82015-09-04 17:29:57 +02001682 fd2 = dup(fd);
1683 if (fd2 >= 0)
1684 close(fd2);
1685 _Py_END_SUPPRESS_IPH
1686 return fd2 >= 0;
Victor Stinner1c4670e2017-05-04 00:45:56 +02001687#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001688}
1689
1690/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001691static PyObject*
Victor Stinnerfbca9082018-08-30 00:50:45 +02001692create_stdio(const _PyCoreConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001693 int fd, int write_mode, const char* name,
1694 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001695{
1696 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1697 const char* mode;
1698 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001699 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001700 int buffering, isatty;
1701 _Py_IDENTIFIER(open);
1702 _Py_IDENTIFIER(isatty);
1703 _Py_IDENTIFIER(TextIOWrapper);
1704 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001705 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001706
Victor Stinner874dbe82015-09-04 17:29:57 +02001707 if (!is_valid_fd(fd))
1708 Py_RETURN_NONE;
1709
Nick Coghland6009512014-11-20 21:39:37 +10001710 /* stdin is always opened in buffered mode, first because it shouldn't
1711 make a difference in common use cases, second because TextIOWrapper
1712 depends on the presence of a read1() method which only exists on
1713 buffered streams.
1714 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001715 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001716 buffering = 0;
1717 else
1718 buffering = -1;
1719 if (write_mode)
1720 mode = "wb";
1721 else
1722 mode = "rb";
1723 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1724 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001725 Py_None, Py_None, /* encoding, errors */
1726 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001727 if (buf == NULL)
1728 goto error;
1729
1730 if (buffering) {
1731 _Py_IDENTIFIER(raw);
1732 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1733 if (raw == NULL)
1734 goto error;
1735 }
1736 else {
1737 raw = buf;
1738 Py_INCREF(raw);
1739 }
1740
Steve Dower39294992016-08-30 21:22:36 -07001741#ifdef MS_WINDOWS
1742 /* Windows console IO is always UTF-8 encoded */
1743 if (PyWindowsConsoleIO_Check(raw))
1744 encoding = "utf-8";
1745#endif
1746
Nick Coghland6009512014-11-20 21:39:37 +10001747 text = PyUnicode_FromString(name);
1748 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1749 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001750 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001751 if (res == NULL)
1752 goto error;
1753 isatty = PyObject_IsTrue(res);
1754 Py_DECREF(res);
1755 if (isatty == -1)
1756 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001757 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001758 write_through = Py_True;
1759 else
1760 write_through = Py_False;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001761 if (isatty && buffered_stdio)
Nick Coghland6009512014-11-20 21:39:37 +10001762 line_buffering = Py_True;
1763 else
1764 line_buffering = Py_False;
1765
1766 Py_CLEAR(raw);
1767 Py_CLEAR(text);
1768
1769#ifdef MS_WINDOWS
1770 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1771 newlines to "\n".
1772 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1773 newline = NULL;
1774#else
1775 /* sys.stdin: split lines at "\n".
1776 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1777 newline = "\n";
1778#endif
1779
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001780 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001781 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001782 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001783 Py_CLEAR(buf);
1784 if (stream == NULL)
1785 goto error;
1786
1787 if (write_mode)
1788 mode = "w";
1789 else
1790 mode = "r";
1791 text = PyUnicode_FromString(mode);
1792 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1793 goto error;
1794 Py_CLEAR(text);
1795 return stream;
1796
1797error:
1798 Py_XDECREF(buf);
1799 Py_XDECREF(stream);
1800 Py_XDECREF(text);
1801 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001802
Victor Stinner874dbe82015-09-04 17:29:57 +02001803 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1804 /* Issue #24891: the file descriptor was closed after the first
1805 is_valid_fd() check was called. Ignore the OSError and set the
1806 stream to None. */
1807 PyErr_Clear();
1808 Py_RETURN_NONE;
1809 }
1810 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001811}
1812
1813/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001814static _PyInitError
Victor Stinner91106cd2017-12-13 12:29:09 +01001815init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001816{
1817 PyObject *iomod = NULL, *wrapper;
1818 PyObject *bimod = NULL;
1819 PyObject *m;
1820 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001821 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001822 PyObject * encoding_attr;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001823 _PyInitError res = _Py_INIT_OK();
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001824 _PyCoreConfig *config = &interp->core_config;
1825
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001826 /* Check that stdin is not a directory
1827 Using shell redirection, you can redirect stdin to a directory,
1828 crashing the Python interpreter. Catch this common mistake here
1829 and output a useful error message. Note that under MS Windows,
1830 the shell already prevents that. */
1831#ifndef MS_WINDOWS
1832 struct _Py_stat_struct sb;
1833 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1834 S_ISDIR(sb.st_mode)) {
1835 return _Py_INIT_USER_ERR("<stdin> is a directory, "
1836 "cannot continue");
1837 }
1838#endif
1839
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001840 char *codec_name = get_codec_name(config->stdio_encoding);
1841 if (codec_name == NULL) {
1842 return _Py_INIT_ERR("failed to get the Python codec name "
1843 "of the stdio encoding");
1844 }
1845 PyMem_RawFree(config->stdio_encoding);
1846 config->stdio_encoding = codec_name;
Nick Coghland6009512014-11-20 21:39:37 +10001847
1848 /* Hack to avoid a nasty recursion issue when Python is invoked
1849 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1850 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1851 goto error;
1852 }
1853 Py_DECREF(m);
1854
1855 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1856 goto error;
1857 }
1858 Py_DECREF(m);
1859
1860 if (!(bimod = PyImport_ImportModule("builtins"))) {
1861 goto error;
1862 }
1863
1864 if (!(iomod = PyImport_ImportModule("io"))) {
1865 goto error;
1866 }
1867 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1868 goto error;
1869 }
1870
1871 /* Set builtins.open */
1872 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1873 Py_DECREF(wrapper);
1874 goto error;
1875 }
1876 Py_DECREF(wrapper);
1877
Nick Coghland6009512014-11-20 21:39:37 +10001878 /* Set sys.stdin */
1879 fd = fileno(stdin);
1880 /* Under some conditions stdin, stdout and stderr may not be connected
1881 * and fileno() may point to an invalid file descriptor. For example
1882 * GUI apps don't have valid standard streams by default.
1883 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001884 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001885 config->stdio_encoding,
1886 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001887 if (std == NULL)
1888 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001889 PySys_SetObject("__stdin__", std);
1890 _PySys_SetObjectId(&PyId_stdin, std);
1891 Py_DECREF(std);
1892
1893 /* Set sys.stdout */
1894 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001895 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001896 config->stdio_encoding,
1897 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001898 if (std == NULL)
1899 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001900 PySys_SetObject("__stdout__", std);
1901 _PySys_SetObjectId(&PyId_stdout, std);
1902 Py_DECREF(std);
1903
1904#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1905 /* Set sys.stderr, replaces the preliminary stderr */
1906 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001907 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001908 config->stdio_encoding,
1909 "backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001910 if (std == NULL)
1911 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001912
1913 /* Same as hack above, pre-import stderr's codec to avoid recursion
1914 when import.c tries to write to stderr in verbose mode. */
1915 encoding_attr = PyObject_GetAttrString(std, "encoding");
1916 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001917 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001918 if (std_encoding != NULL) {
1919 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1920 Py_XDECREF(codec_info);
1921 }
1922 Py_DECREF(encoding_attr);
1923 }
1924 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1925
1926 if (PySys_SetObject("__stderr__", std) < 0) {
1927 Py_DECREF(std);
1928 goto error;
1929 }
1930 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1931 Py_DECREF(std);
1932 goto error;
1933 }
1934 Py_DECREF(std);
1935#endif
1936
Victor Stinnera7368ac2017-11-15 18:11:45 -08001937 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001938
Victor Stinnera7368ac2017-11-15 18:11:45 -08001939error:
1940 res = _Py_INIT_ERR("can't initialize sys standard streams");
1941
1942done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02001943 _Py_ClearStandardStreamEncoding();
Victor Stinner31e99082017-12-20 23:41:38 +01001944
Nick Coghland6009512014-11-20 21:39:37 +10001945 Py_XDECREF(bimod);
1946 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001947 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001948}
1949
1950
Victor Stinner10dc4842015-03-24 12:01:30 +01001951static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001952_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001953{
Victor Stinner10dc4842015-03-24 12:01:30 +01001954 fputc('\n', stderr);
1955 fflush(stderr);
1956
1957 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001958 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001959}
Victor Stinner791da1c2016-03-14 16:53:12 +01001960
1961/* Print the current exception (if an exception is set) with its traceback,
1962 or display the current Python stack.
1963
1964 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1965 called on catastrophic cases.
1966
1967 Return 1 if the traceback was displayed, 0 otherwise. */
1968
1969static int
1970_Py_FatalError_PrintExc(int fd)
1971{
1972 PyObject *ferr, *res;
1973 PyObject *exception, *v, *tb;
1974 int has_tb;
1975
Victor Stinner791da1c2016-03-14 16:53:12 +01001976 PyErr_Fetch(&exception, &v, &tb);
1977 if (exception == NULL) {
1978 /* No current exception */
1979 return 0;
1980 }
1981
1982 ferr = _PySys_GetObjectId(&PyId_stderr);
1983 if (ferr == NULL || ferr == Py_None) {
1984 /* sys.stderr is not set yet or set to None,
1985 no need to try to display the exception */
1986 return 0;
1987 }
1988
1989 PyErr_NormalizeException(&exception, &v, &tb);
1990 if (tb == NULL) {
1991 tb = Py_None;
1992 Py_INCREF(tb);
1993 }
1994 PyException_SetTraceback(v, tb);
1995 if (exception == NULL) {
1996 /* PyErr_NormalizeException() failed */
1997 return 0;
1998 }
1999
2000 has_tb = (tb != Py_None);
2001 PyErr_Display(exception, v, tb);
2002 Py_XDECREF(exception);
2003 Py_XDECREF(v);
2004 Py_XDECREF(tb);
2005
2006 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07002007 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01002008 if (res == NULL)
2009 PyErr_Clear();
2010 else
2011 Py_DECREF(res);
2012
2013 return has_tb;
2014}
2015
Nick Coghland6009512014-11-20 21:39:37 +10002016/* Print fatal error message and abort */
2017
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002018#ifdef MS_WINDOWS
2019static void
2020fatal_output_debug(const char *msg)
2021{
2022 /* buffer of 256 bytes allocated on the stack */
2023 WCHAR buffer[256 / sizeof(WCHAR)];
2024 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2025 size_t msglen;
2026
2027 OutputDebugStringW(L"Fatal Python error: ");
2028
2029 msglen = strlen(msg);
2030 while (msglen) {
2031 size_t i;
2032
2033 if (buflen > msglen) {
2034 buflen = msglen;
2035 }
2036
2037 /* Convert the message to wchar_t. This uses a simple one-to-one
2038 conversion, assuming that the this error message actually uses
2039 ASCII only. If this ceases to be true, we will have to convert. */
2040 for (i=0; i < buflen; ++i) {
2041 buffer[i] = msg[i];
2042 }
2043 buffer[i] = L'\0';
2044 OutputDebugStringW(buffer);
2045
2046 msg += buflen;
2047 msglen -= buflen;
2048 }
2049 OutputDebugStringW(L"\n");
2050}
2051#endif
2052
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002053static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002054fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002055{
2056 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01002057 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002058
2059 if (reentrant) {
2060 /* Py_FatalError() caused a second fatal error.
2061 Example: flush_std_files() raises a recursion error. */
2062 goto exit;
2063 }
2064 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002065
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002066 fprintf(stderr, "Fatal Python error: ");
2067 if (prefix) {
2068 fputs(prefix, stderr);
2069 fputs(": ", stderr);
2070 }
2071 if (msg) {
2072 fputs(msg, stderr);
2073 }
2074 else {
2075 fprintf(stderr, "<message not set>");
2076 }
2077 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10002078 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01002079
Victor Stinner3a228ab2018-11-01 00:26:41 +01002080 /* Check if the current thread has a Python thread state
2081 and holds the GIL */
2082 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2083 if (tss_tstate != NULL) {
Victor Stinner50b48572018-11-01 01:51:40 +01002084 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner3a228ab2018-11-01 00:26:41 +01002085 if (tss_tstate != tstate) {
2086 /* The Python thread does not hold the GIL */
2087 tss_tstate = NULL;
2088 }
2089 }
2090 else {
2091 /* Py_FatalError() has been called from a C thread
2092 which has no Python thread state. */
2093 }
2094 int has_tstate_and_gil = (tss_tstate != NULL);
2095
2096 if (has_tstate_and_gil) {
2097 /* If an exception is set, print the exception with its traceback */
2098 if (!_Py_FatalError_PrintExc(fd)) {
2099 /* No exception is set, or an exception is set without traceback */
2100 _Py_FatalError_DumpTracebacks(fd);
2101 }
2102 }
2103 else {
Victor Stinner791da1c2016-03-14 16:53:12 +01002104 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002105 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002106
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002107 /* The main purpose of faulthandler is to display the traceback.
2108 This function already did its best to display a traceback.
2109 Disable faulthandler to prevent writing a second traceback
2110 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002111 _PyFaulthandler_Fini();
2112
Victor Stinner791da1c2016-03-14 16:53:12 +01002113 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002114 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002115 /* Flush sys.stdout and sys.stderr */
2116 flush_std_files();
2117 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002118
Nick Coghland6009512014-11-20 21:39:37 +10002119#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002120 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002121#endif /* MS_WINDOWS */
2122
2123exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002124 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002125#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002126 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002127#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002128 abort();
2129 }
2130 else {
2131 exit(status);
2132 }
2133}
2134
Victor Stinner19760862017-12-20 01:41:59 +01002135void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002136Py_FatalError(const char *msg)
2137{
2138 fatal_error(NULL, msg, -1);
2139}
2140
Victor Stinner19760862017-12-20 01:41:59 +01002141void _Py_NO_RETURN
Victor Stinnerdfe88472019-03-01 12:14:41 +01002142_Py_ExitInitError(_PyInitError err)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002143{
Victor Stinnerdfe88472019-03-01 12:14:41 +01002144 if (err.exitcode >= 0) {
2145 exit(err.exitcode);
2146 }
2147 else {
2148 /* On "user" error: exit with status 1.
2149 For all other errors, call abort(). */
2150 int status = err.user_err ? 1 : -1;
2151 fatal_error(err.prefix, err.msg, status);
2152 }
Nick Coghland6009512014-11-20 21:39:37 +10002153}
2154
2155/* Clean up and exit */
2156
Victor Stinnerd7292b52016-06-17 12:29:00 +02002157# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002158
Nick Coghland6009512014-11-20 21:39:37 +10002159/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002160void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002161{
Victor Stinnercaba55b2018-08-03 15:33:52 +02002162 PyInterpreterState *is = _PyInterpreterState_Get();
Marcel Plch776407f2017-12-20 11:17:58 +01002163
Antoine Pitroufc5db952017-12-13 02:29:07 +01002164 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002165 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2166
2167 is->pyexitfunc = func;
2168 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002169}
2170
2171static void
Marcel Plch776407f2017-12-20 11:17:58 +01002172call_py_exitfuncs(PyInterpreterState *istate)
Nick Coghland6009512014-11-20 21:39:37 +10002173{
Marcel Plch776407f2017-12-20 11:17:58 +01002174 if (istate->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002175 return;
2176
Marcel Plch776407f2017-12-20 11:17:58 +01002177 (*istate->pyexitfunc)(istate->pyexitmodule);
Nick Coghland6009512014-11-20 21:39:37 +10002178 PyErr_Clear();
2179}
2180
2181/* Wait until threading._shutdown completes, provided
2182 the threading module was imported in the first place.
2183 The shutdown routine will wait until all non-daemon
2184 "threading" threads have completed. */
2185static void
2186wait_for_thread_shutdown(void)
2187{
Nick Coghland6009512014-11-20 21:39:37 +10002188 _Py_IDENTIFIER(_shutdown);
2189 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002190 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002191 if (threading == NULL) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002192 if (PyErr_Occurred()) {
2193 PyErr_WriteUnraisable(NULL);
2194 }
2195 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002196 return;
2197 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002198 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002199 if (result == NULL) {
2200 PyErr_WriteUnraisable(threading);
2201 }
2202 else {
2203 Py_DECREF(result);
2204 }
2205 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002206}
2207
2208#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002209int Py_AtExit(void (*func)(void))
2210{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002211 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002212 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002213 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002214 return 0;
2215}
2216
2217static void
2218call_ll_exitfuncs(void)
2219{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002220 while (_PyRuntime.nexitfuncs > 0)
2221 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002222
2223 fflush(stdout);
2224 fflush(stderr);
2225}
2226
Victor Stinnercfc88312018-08-01 16:41:25 +02002227void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002228Py_Exit(int sts)
2229{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002230 if (Py_FinalizeEx() < 0) {
2231 sts = 120;
2232 }
Nick Coghland6009512014-11-20 21:39:37 +10002233
2234 exit(sts);
2235}
2236
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002237static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002238initsigs(void)
2239{
2240#ifdef SIGPIPE
2241 PyOS_setsig(SIGPIPE, SIG_IGN);
2242#endif
2243#ifdef SIGXFZ
2244 PyOS_setsig(SIGXFZ, SIG_IGN);
2245#endif
2246#ifdef SIGXFSZ
2247 PyOS_setsig(SIGXFSZ, SIG_IGN);
2248#endif
2249 PyOS_InitInterrupts(); /* May imply initsignal() */
2250 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002251 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002252 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002253 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002254}
2255
2256
2257/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2258 *
2259 * All of the code in this function must only use async-signal-safe functions,
2260 * listed at `man 7 signal` or
2261 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2262 */
2263void
2264_Py_RestoreSignals(void)
2265{
2266#ifdef SIGPIPE
2267 PyOS_setsig(SIGPIPE, SIG_DFL);
2268#endif
2269#ifdef SIGXFZ
2270 PyOS_setsig(SIGXFZ, SIG_DFL);
2271#endif
2272#ifdef SIGXFSZ
2273 PyOS_setsig(SIGXFSZ, SIG_DFL);
2274#endif
2275}
2276
2277
2278/*
2279 * The file descriptor fd is considered ``interactive'' if either
2280 * a) isatty(fd) is TRUE, or
2281 * b) the -i flag was given, and the filename associated with
2282 * the descriptor is NULL or "<stdin>" or "???".
2283 */
2284int
2285Py_FdIsInteractive(FILE *fp, const char *filename)
2286{
2287 if (isatty((int)fileno(fp)))
2288 return 1;
2289 if (!Py_InteractiveFlag)
2290 return 0;
2291 return (filename == NULL) ||
2292 (strcmp(filename, "<stdin>") == 0) ||
2293 (strcmp(filename, "???") == 0);
2294}
2295
2296
Nick Coghland6009512014-11-20 21:39:37 +10002297/* Wrappers around sigaction() or signal(). */
2298
2299PyOS_sighandler_t
2300PyOS_getsig(int sig)
2301{
2302#ifdef HAVE_SIGACTION
2303 struct sigaction context;
2304 if (sigaction(sig, NULL, &context) == -1)
2305 return SIG_ERR;
2306 return context.sa_handler;
2307#else
2308 PyOS_sighandler_t handler;
2309/* Special signal handling for the secure CRT in Visual Studio 2005 */
2310#if defined(_MSC_VER) && _MSC_VER >= 1400
2311 switch (sig) {
2312 /* Only these signals are valid */
2313 case SIGINT:
2314 case SIGILL:
2315 case SIGFPE:
2316 case SIGSEGV:
2317 case SIGTERM:
2318 case SIGBREAK:
2319 case SIGABRT:
2320 break;
2321 /* Don't call signal() with other values or it will assert */
2322 default:
2323 return SIG_ERR;
2324 }
2325#endif /* _MSC_VER && _MSC_VER >= 1400 */
2326 handler = signal(sig, SIG_IGN);
2327 if (handler != SIG_ERR)
2328 signal(sig, handler);
2329 return handler;
2330#endif
2331}
2332
2333/*
2334 * All of the code in this function must only use async-signal-safe functions,
2335 * listed at `man 7 signal` or
2336 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2337 */
2338PyOS_sighandler_t
2339PyOS_setsig(int sig, PyOS_sighandler_t handler)
2340{
2341#ifdef HAVE_SIGACTION
2342 /* Some code in Modules/signalmodule.c depends on sigaction() being
2343 * used here if HAVE_SIGACTION is defined. Fix that if this code
2344 * changes to invalidate that assumption.
2345 */
2346 struct sigaction context, ocontext;
2347 context.sa_handler = handler;
2348 sigemptyset(&context.sa_mask);
2349 context.sa_flags = 0;
2350 if (sigaction(sig, &context, &ocontext) == -1)
2351 return SIG_ERR;
2352 return ocontext.sa_handler;
2353#else
2354 PyOS_sighandler_t oldhandler;
2355 oldhandler = signal(sig, handler);
2356#ifdef HAVE_SIGINTERRUPT
2357 siginterrupt(sig, 1);
2358#endif
2359 return oldhandler;
2360#endif
2361}
2362
2363#ifdef __cplusplus
2364}
2365#endif