blob: b12fa820e9cab7f42625080ab144e808b5b3743a [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 Stinner1dc6e392018-07-25 02:49:17 +0200461 Every call to _Py_InitializeCore, 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 Stinner1dc6e392018-07-25 02:49:17 +0200485 _PyCoreConfig_SetGlobalConfig(core_config);
486
487 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
488 return _Py_INIT_ERR("failed to copy core config");
489 }
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 Stinnerd19d8d52018-07-24 13:55:48 +0200509 _PyCoreConfig_SetGlobalConfig(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) {
551 return _Py_INIT_ERR("failed to copy core config");
552 }
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 Stinnera6fbc4e2019-03-25 18:37:10 +0100721pyinit_preinit(_PyPreConfig *config,
722 const _PyPreConfig *src_config,
723 const _PyCoreConfig *coreconfig)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100724{
725 _PyInitError err;
Victor Stinner20004952019-03-26 02:31:11 +0100726 _PyPreConfig local_config = _PyPreConfig_INIT;
727 if (!config) {
728 config = &local_config;
729 }
Victor Stinnerf29084d2019-03-20 02:20:13 +0100730
731 err = _PyRuntime_Initialize();
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100732 if (_Py_INIT_FAILED(err)) {
Victor Stinner20004952019-03-26 02:31:11 +0100733 goto done;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100734 }
735
Victor Stinnerf72346c2019-03-25 17:54:58 +0100736 if (_PyRuntime.pre_initialized) {
737 /* If it's already configured: ignored the new configuration */
Victor Stinner20004952019-03-26 02:31:11 +0100738 err = _Py_INIT_OK();
739 goto done;
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100740 }
741
Victor Stinnerf72346c2019-03-25 17:54:58 +0100742 if (src_config) {
743 if (_PyPreConfig_Copy(config, src_config) < 0) {
Victor Stinner20004952019-03-26 02:31:11 +0100744 err = _Py_INIT_ERR("failed to copy pre config");
745 goto done;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100746 }
747 }
748
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100749 err = _PyPreConfig_Read(config, NULL, coreconfig);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100750 if (_Py_INIT_FAILED(err)) {
Victor Stinner20004952019-03-26 02:31:11 +0100751 goto done;
Victor Stinnerf29084d2019-03-20 02:20:13 +0100752 }
753
Victor Stinnerf72346c2019-03-25 17:54:58 +0100754 err = _PyPreConfig_Write(config);
755 if (_Py_INIT_FAILED(err)) {
Victor Stinner20004952019-03-26 02:31:11 +0100756 goto done;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100757 }
758
759 _PyRuntime.pre_initialized = 1;
Victor Stinner20004952019-03-26 02:31:11 +0100760 err = _Py_INIT_OK();
761
762done:
763 _PyPreConfig_Clear(&local_config);
764 return err;
Victor Stinnerf72346c2019-03-25 17:54:58 +0100765}
766
767
768_PyInitError
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100769_Py_PreInitialize(void)
Victor Stinnerf72346c2019-03-25 17:54:58 +0100770{
Victor Stinner20004952019-03-26 02:31:11 +0100771 return pyinit_preinit(NULL, NULL, NULL);
Victor Stinnerf29084d2019-03-20 02:20:13 +0100772}
773
774
775_PyInitError
Victor Stinner20004952019-03-26 02:31:11 +0100776_Py_PreInitializeFromPreConfig(const _PyPreConfig *src_config)
777{
778 return pyinit_preinit(NULL, src_config, NULL);
779}
780
781
782_PyInitError
783_Py_PreInitializeInPlace(_PyPreConfig *config)
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100784{
785 return pyinit_preinit(config, NULL, NULL);
786}
787
788
789_PyInitError
790_Py_PreInitializeFromConfig(const _PyCoreConfig *coreconfig)
Victor Stinnerf29084d2019-03-20 02:20:13 +0100791{
Victor Stinner20004952019-03-26 02:31:11 +0100792 return pyinit_preinit(NULL, NULL, coreconfig);
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100793}
794
795
796static _PyInitError
797pyinit_coreconfig(_PyCoreConfig *config, const _PyCoreConfig *src_config,
798 PyInterpreterState **interp_p)
799{
Victor Stinnerc656e252019-03-06 01:13:43 +0100800 if (_PyCoreConfig_Copy(config, src_config) < 0) {
801 return _Py_INIT_ERR("failed to copy core config");
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100802 }
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100803
Victor Stinnerf72346c2019-03-25 17:54:58 +0100804 _PyInitError err = _PyCoreConfig_Read(config);
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100805 if (_Py_INIT_FAILED(err)) {
806 return err;
807 }
808
809 if (!_PyRuntime.core_initialized) {
810 return _Py_InitializeCore_impl(interp_p, config);
811 }
812 else {
813 return _Py_Initialize_ReconfigureCore(interp_p, config);
814 }
815}
816
817
Victor Stinner6d43f6f2019-01-22 21:18:05 +0100818/* Begin interpreter initialization
819 *
820 * On return, the first thread and interpreter state have been created,
821 * but the compiler, signal handling, multithreading and
822 * multiple interpreter support, and codec infrastructure are not yet
823 * available.
824 *
825 * The import system will support builtin and frozen modules only.
826 * The only supported io is writing to sys.stderr
827 *
828 * If any operation invoked by this function fails, a fatal error is
829 * issued and the function does not return.
830 *
831 * Any code invoked from this function should *not* assume it has access
832 * to the Python C API (unless the API is explicitly listed as being
833 * safe to call without calling Py_Initialize first)
834 */
Victor Stinner1dc6e392018-07-25 02:49:17 +0200835_PyInitError
836_Py_InitializeCore(PyInterpreterState **interp_p,
837 const _PyCoreConfig *src_config)
838{
Victor Stinner1dc6e392018-07-25 02:49:17 +0200839 _PyInitError err;
840
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100841 assert(src_config != NULL);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200842
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100843 err = _Py_PreInitializeFromConfig(src_config);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200844 if (_Py_INIT_FAILED(err)) {
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100845 return err;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200846 }
847
Victor Stinnera6fbc4e2019-03-25 18:37:10 +0100848 _PyCoreConfig local_config = _PyCoreConfig_INIT;
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100849 err = pyinit_coreconfig(&local_config, src_config, interp_p);
Victor Stinner7d2ef3e2019-03-06 00:36:56 +0100850 _PyCoreConfig_Clear(&local_config);
Victor Stinner1dc6e392018-07-25 02:49:17 +0200851 return err;
852}
853
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200854/* Py_Initialize() has already been called: update the main interpreter
855 configuration. Example of bpo-34008: Py_Main() called after
856 Py_Initialize(). */
857static _PyInitError
858_Py_ReconfigureMainInterpreter(PyInterpreterState *interp,
859 const _PyMainInterpreterConfig *config)
860{
861 if (config->argv != NULL) {
862 int res = PyDict_SetItemString(interp->sysdict, "argv", config->argv);
863 if (res < 0) {
864 return _Py_INIT_ERR("fail to set sys.argv");
865 }
866 }
867 return _Py_INIT_OK();
868}
869
Eric Snowc7ec9982017-05-23 23:00:52 -0700870/* Update interpreter state based on supplied configuration settings
871 *
872 * After calling this function, most of the restrictions on the interpreter
873 * are lifted. The only remaining incomplete settings are those related
874 * to the main module (sys.argv[0], __main__ metadata)
875 *
876 * Calling this when the interpreter is not initializing, is already
877 * initialized or without a valid current thread state is a fatal error.
878 * Other errors should be reported as normal Python exceptions with a
879 * non-zero return code.
880 */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800881_PyInitError
Victor Stinner1dc6e392018-07-25 02:49:17 +0200882_Py_InitializeMainInterpreter(PyInterpreterState *interp,
883 const _PyMainInterpreterConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -0700884{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600885 if (!_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800886 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700887 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700888
Victor Stinner1dc6e392018-07-25 02:49:17 +0200889 /* Configure the main interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +0100890 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
891 return _Py_INIT_ERR("failed to copy main interpreter config");
892 }
Victor Stinner1dc6e392018-07-25 02:49:17 +0200893 config = &interp->config;
894 _PyCoreConfig *core_config = &interp->core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700895
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200896 if (_PyRuntime.initialized) {
897 return _Py_ReconfigureMainInterpreter(interp, config);
898 }
899
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200900 if (!core_config->_install_importlib) {
Eric Snow1abcf672017-05-23 21:46:51 -0700901 /* Special mode for freeze_importlib: run with no import system
902 *
903 * This means anything which needs support from extension modules
904 * or pure Python code in the standard library won't work.
905 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600906 _PyRuntime.initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800907 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700908 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100909
Victor Stinner33c377e2017-12-05 15:12:41 +0100910 if (_PyTime_Init() < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800911 return _Py_INIT_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100912 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200913
Victor Stinnerab672812019-01-23 15:04:40 +0100914 if (_PySys_InitMain(interp) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800915 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100916 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800917
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200918 _PyInitError err = initexternalimport(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800919 if (_Py_INIT_FAILED(err)) {
920 return err;
921 }
Nick Coghland6009512014-11-20 21:39:37 +1000922
923 /* initialize the faulthandler module */
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200924 err = _PyFaulthandler_Init(core_config->faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800925 if (_Py_INIT_FAILED(err)) {
926 return err;
927 }
Nick Coghland6009512014-11-20 21:39:37 +1000928
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800929 err = initfsencoding(interp);
930 if (_Py_INIT_FAILED(err)) {
931 return err;
932 }
Nick Coghland6009512014-11-20 21:39:37 +1000933
Victor Stinner1f151112017-11-23 10:43:14 +0100934 if (interp->config.install_signal_handlers) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800935 err = initsigs(); /* Signal handling stuff, including initintr() */
936 if (_Py_INIT_FAILED(err)) {
937 return err;
938 }
939 }
Nick Coghland6009512014-11-20 21:39:37 +1000940
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200941 if (_PyTraceMalloc_Init(core_config->tracemalloc) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800942 return _Py_INIT_ERR("can't initialize tracemalloc");
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200943 }
Nick Coghland6009512014-11-20 21:39:37 +1000944
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800945 err = add_main_module(interp);
946 if (_Py_INIT_FAILED(err)) {
947 return err;
948 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800949
Victor Stinner91106cd2017-12-13 12:29:09 +0100950 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -0800951 if (_Py_INIT_FAILED(err)) {
952 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800953 }
Nick Coghland6009512014-11-20 21:39:37 +1000954
955 /* Initialize warnings. */
Victor Stinner37cd9822018-11-16 11:55:35 +0100956 PyObject *warnoptions = PySys_GetObject("warnoptions");
957 if (warnoptions != NULL && PyList_Size(warnoptions) > 0)
Victor Stinner5d862462017-12-19 11:35:58 +0100958 {
Nick Coghland6009512014-11-20 21:39:37 +1000959 PyObject *warnings_module = PyImport_ImportModule("warnings");
960 if (warnings_module == NULL) {
961 fprintf(stderr, "'import warnings' failed; traceback:\n");
962 PyErr_Print();
963 }
964 Py_XDECREF(warnings_module);
965 }
966
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600967 _PyRuntime.initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700968
Victor Stinnerd19d8d52018-07-24 13:55:48 +0200969 if (core_config->site_import) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800970 err = initsite(); /* Module site */
971 if (_Py_INIT_FAILED(err)) {
972 return err;
973 }
974 }
Victor Stinnercf215042018-08-29 22:56:06 +0200975
976#ifndef MS_WINDOWS
Victor Stinner20004952019-03-26 02:31:11 +0100977 _emit_stderr_warning_for_legacy_locale();
Victor Stinnercf215042018-08-29 22:56:06 +0200978#endif
979
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800980 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000981}
982
Eric Snowc7ec9982017-05-23 23:00:52 -0700983#undef _INIT_DEBUG_PRINT
984
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800985_PyInitError
Victor Stinner1dc6e392018-07-25 02:49:17 +0200986_Py_InitializeFromConfig(const _PyCoreConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -0700987{
Benjamin Petersonacd282f2018-09-11 15:11:06 -0700988 PyInterpreterState *interp = NULL;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800989 _PyInitError err;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200990 err = _Py_InitializeCore(&interp, config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800991 if (_Py_INIT_FAILED(err)) {
Victor Stinner1dc6e392018-07-25 02:49:17 +0200992 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800993 }
Victor Stinner1dc6e392018-07-25 02:49:17 +0200994 config = &interp->core_config;
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100995
Victor Stinner9cfc0022017-12-20 19:36:46 +0100996 _PyMainInterpreterConfig main_config = _PyMainInterpreterConfig_INIT;
Victor Stinner1dc6e392018-07-25 02:49:17 +0200997 err = _PyMainInterpreterConfig_Read(&main_config, config);
Victor Stinner9cfc0022017-12-20 19:36:46 +0100998 if (!_Py_INIT_FAILED(err)) {
Victor Stinner1dc6e392018-07-25 02:49:17 +0200999 err = _Py_InitializeMainInterpreter(interp, &main_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001000 }
Victor Stinner9cfc0022017-12-20 19:36:46 +01001001 _PyMainInterpreterConfig_Clear(&main_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001002 if (_Py_INIT_FAILED(err)) {
Victor Stinner1dc6e392018-07-25 02:49:17 +02001003 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001004 }
Victor Stinner1dc6e392018-07-25 02:49:17 +02001005 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -07001006}
1007
1008
1009void
Nick Coghland6009512014-11-20 21:39:37 +10001010Py_InitializeEx(int install_sigs)
1011{
Victor Stinner1dc6e392018-07-25 02:49:17 +02001012 if (_PyRuntime.initialized) {
1013 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
1014 return;
1015 }
1016
1017 _PyInitError err;
1018 _PyCoreConfig config = _PyCoreConfig_INIT;
1019 config.install_signal_handlers = install_sigs;
1020
1021 err = _Py_InitializeFromConfig(&config);
1022 _PyCoreConfig_Clear(&config);
1023
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001024 if (_Py_INIT_FAILED(err)) {
Victor Stinnerdfe88472019-03-01 12:14:41 +01001025 _Py_ExitInitError(err);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001026 }
Nick Coghland6009512014-11-20 21:39:37 +10001027}
1028
1029void
1030Py_Initialize(void)
1031{
1032 Py_InitializeEx(1);
1033}
1034
1035
1036#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001037extern void _Py_dump_counts(FILE*);
Nick Coghland6009512014-11-20 21:39:37 +10001038#endif
1039
1040/* Flush stdout and stderr */
1041
1042static int
1043file_is_closed(PyObject *fobj)
1044{
1045 int r;
1046 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1047 if (tmp == NULL) {
1048 PyErr_Clear();
1049 return 0;
1050 }
1051 r = PyObject_IsTrue(tmp);
1052 Py_DECREF(tmp);
1053 if (r < 0)
1054 PyErr_Clear();
1055 return r > 0;
1056}
1057
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001058static int
Nick Coghland6009512014-11-20 21:39:37 +10001059flush_std_files(void)
1060{
1061 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1062 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1063 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001064 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001065
1066 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001067 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001068 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001069 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001070 status = -1;
1071 }
Nick Coghland6009512014-11-20 21:39:37 +10001072 else
1073 Py_DECREF(tmp);
1074 }
1075
1076 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001077 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001078 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001079 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001080 status = -1;
1081 }
Nick Coghland6009512014-11-20 21:39:37 +10001082 else
1083 Py_DECREF(tmp);
1084 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001085
1086 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001087}
1088
1089/* Undo the effect of Py_Initialize().
1090
1091 Beware: if multiple interpreter and/or thread states exist, these
1092 are not wiped out; only the current thread and interpreter state
1093 are deleted. But since everything else is deleted, those other
1094 interpreter and thread states should no longer be used.
1095
1096 (XXX We should do better, e.g. wipe out all interpreters and
1097 threads.)
1098
1099 Locking: as above.
1100
1101*/
1102
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001103int
1104Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001105{
1106 PyInterpreterState *interp;
1107 PyThreadState *tstate;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001108 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001109
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001110 if (!_PyRuntime.initialized)
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001111 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001112
Eric Snow842a2f02019-03-15 15:47:51 -06001113 // Wrap up existing "threading"-module-created, non-daemon threads.
Nick Coghland6009512014-11-20 21:39:37 +10001114 wait_for_thread_shutdown();
1115
Marcel Plch776407f2017-12-20 11:17:58 +01001116 /* Get current thread state and interpreter pointer */
Victor Stinner50b48572018-11-01 01:51:40 +01001117 tstate = _PyThreadState_GET();
Marcel Plch776407f2017-12-20 11:17:58 +01001118 interp = tstate->interp;
1119
Eric Snow842a2f02019-03-15 15:47:51 -06001120 // Make any remaining pending calls.
1121 _Py_FinishPendingCalls();
1122
Nick Coghland6009512014-11-20 21:39:37 +10001123 /* The interpreter is still entirely intact at this point, and the
1124 * exit funcs may be relying on that. In particular, if some thread
1125 * or exit func is still waiting to do an import, the import machinery
1126 * expects Py_IsInitialized() to return true. So don't say the
Eric Snow842a2f02019-03-15 15:47:51 -06001127 * runtime is uninitialized until after the exit funcs have run.
Nick Coghland6009512014-11-20 21:39:37 +10001128 * Note that Threading.py uses an exit func to do a join on all the
1129 * threads created thru it, so this also protects pending imports in
1130 * the threads created via Threading.
1131 */
Nick Coghland6009512014-11-20 21:39:37 +10001132
Marcel Plch776407f2017-12-20 11:17:58 +01001133 call_py_exitfuncs(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001134
Victor Stinnerda273412017-12-15 01:46:02 +01001135 /* Copy the core config, PyInterpreterState_Delete() free
1136 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001137#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001138 int show_ref_count = interp->core_config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001139#endif
1140#ifdef Py_TRACE_REFS
Victor Stinnerda273412017-12-15 01:46:02 +01001141 int dump_refs = interp->core_config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001142#endif
1143#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001144 int malloc_stats = interp->core_config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001145#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001146
Nick Coghland6009512014-11-20 21:39:37 +10001147 /* Remaining threads (e.g. daemon threads) will automatically exit
1148 after taking the GIL (in PyEval_RestoreThread()). */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001149 _PyRuntime.finalizing = tstate;
1150 _PyRuntime.initialized = 0;
1151 _PyRuntime.core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001152
Victor Stinnere0deff32015-03-24 13:46:18 +01001153 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001154 if (flush_std_files() < 0) {
1155 status = -1;
1156 }
Nick Coghland6009512014-11-20 21:39:37 +10001157
1158 /* Disable signal handling */
1159 PyOS_FiniInterrupts();
1160
1161 /* Collect garbage. This may call finalizers; it's nice to call these
1162 * before all modules are destroyed.
1163 * XXX If a __del__ or weakref callback is triggered here, and tries to
1164 * XXX import a module, bad things can happen, because Python no
1165 * XXX longer believes it's initialized.
1166 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1167 * XXX is easy to provoke that way. I've also seen, e.g.,
1168 * XXX Exception exceptions.ImportError: 'No module named sha'
1169 * XXX in <function callback at 0x008F5718> ignored
1170 * XXX but I'm unclear on exactly how that one happens. In any case,
1171 * XXX I haven't seen a real-life report of either of these.
1172 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001173 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001174#ifdef COUNT_ALLOCS
1175 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1176 each collection might release some types from the type
1177 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001178 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001179 /* nothing */;
1180#endif
Eric Snowdae02762017-09-14 00:35:58 -07001181
Nick Coghland6009512014-11-20 21:39:37 +10001182 /* Destroy all modules */
1183 PyImport_Cleanup();
1184
Victor Stinnere0deff32015-03-24 13:46:18 +01001185 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001186 if (flush_std_files() < 0) {
1187 status = -1;
1188 }
Nick Coghland6009512014-11-20 21:39:37 +10001189
1190 /* Collect final garbage. This disposes of cycles created by
1191 * class definitions, for example.
1192 * XXX This is disabled because it caused too many problems. If
1193 * XXX a __del__ or weakref callback triggers here, Python code has
1194 * XXX a hard time running, because even the sys module has been
1195 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1196 * XXX One symptom is a sequence of information-free messages
1197 * XXX coming from threads (if a __del__ or callback is invoked,
1198 * XXX other threads can execute too, and any exception they encounter
1199 * XXX triggers a comedy of errors as subsystem after subsystem
1200 * XXX fails to find what it *expects* to find in sys to help report
1201 * XXX the exception and consequent unexpected failures). I've also
1202 * XXX seen segfaults then, after adding print statements to the
1203 * XXX Python code getting called.
1204 */
1205#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001206 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001207#endif
1208
1209 /* Disable tracemalloc after all Python objects have been destroyed,
1210 so it is possible to use tracemalloc in objects destructor. */
1211 _PyTraceMalloc_Fini();
1212
1213 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1214 _PyImport_Fini();
1215
1216 /* Cleanup typeobject.c's internal caches. */
1217 _PyType_Fini();
1218
1219 /* unload faulthandler module */
1220 _PyFaulthandler_Fini();
1221
1222 /* Debugging stuff */
1223#ifdef COUNT_ALLOCS
Pablo Galindo49c75a82018-10-28 15:02:17 +00001224 _Py_dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001225#endif
1226 /* dump hash stats */
1227 _PyHash_Fini();
1228
Eric Snowdae02762017-09-14 00:35:58 -07001229#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001230 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001231 _PyDebug_PrintTotalRefs();
1232 }
Eric Snowdae02762017-09-14 00:35:58 -07001233#endif
Nick Coghland6009512014-11-20 21:39:37 +10001234
1235#ifdef Py_TRACE_REFS
1236 /* Display all objects still alive -- this can invoke arbitrary
1237 * __repr__ overrides, so requires a mostly-intact interpreter.
1238 * Alas, a lot of stuff may still be alive now that will be cleaned
1239 * up later.
1240 */
Victor Stinnerda273412017-12-15 01:46:02 +01001241 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001242 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001243 }
Nick Coghland6009512014-11-20 21:39:37 +10001244#endif /* Py_TRACE_REFS */
1245
1246 /* Clear interpreter state and all thread states. */
1247 PyInterpreterState_Clear(interp);
1248
1249 /* Now we decref the exception classes. After this point nothing
1250 can raise an exception. That's okay, because each Fini() method
1251 below has been checked to make sure no exceptions are ever
1252 raised.
1253 */
1254
1255 _PyExc_Fini();
1256
1257 /* Sundry finalizers */
1258 PyMethod_Fini();
1259 PyFrame_Fini();
1260 PyCFunction_Fini();
1261 PyTuple_Fini();
1262 PyList_Fini();
1263 PySet_Fini();
1264 PyBytes_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001265 PyLong_Fini();
1266 PyFloat_Fini();
1267 PyDict_Fini();
1268 PySlice_Fini();
1269 _PyGC_Fini();
Eric Snow6b4be192017-05-22 21:36:03 -07001270 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001271 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001272 PyAsyncGen_Fini();
Yury Selivanovf23746a2018-01-22 19:11:18 -05001273 _PyContext_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001274
1275 /* Cleanup Unicode implementation */
1276 _PyUnicode_Fini();
1277
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001278 _Py_ClearFileSystemEncoding();
Nick Coghland6009512014-11-20 21:39:37 +10001279
1280 /* XXX Still allocated:
1281 - various static ad-hoc pointers to interned strings
1282 - int and float free list blocks
1283 - whatever various modules and libraries allocate
1284 */
1285
1286 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1287
1288 /* Cleanup auto-thread-state */
Nick Coghland6009512014-11-20 21:39:37 +10001289 _PyGILState_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001290
1291 /* Delete current thread. After this, many C API calls become crashy. */
1292 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001293
Nick Coghland6009512014-11-20 21:39:37 +10001294 PyInterpreterState_Delete(interp);
1295
1296#ifdef Py_TRACE_REFS
1297 /* Display addresses (& refcnts) of all objects still alive.
1298 * An address can be used to find the repr of the object, printed
1299 * above by _Py_PrintReferences.
1300 */
Victor Stinnerda273412017-12-15 01:46:02 +01001301 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001302 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001303 }
Nick Coghland6009512014-11-20 21:39:37 +10001304#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001305#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001306 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001307 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be8072016-03-14 12:04:26 +01001308 }
Nick Coghland6009512014-11-20 21:39:37 +10001309#endif
1310
1311 call_ll_exitfuncs();
Victor Stinner9316ee42017-11-25 03:17:57 +01001312
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001313 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001314 return status;
1315}
1316
1317void
1318Py_Finalize(void)
1319{
1320 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001321}
1322
1323/* Create and initialize a new interpreter and thread, and return the
1324 new thread. This requires that Py_Initialize() has been called
1325 first.
1326
1327 Unsuccessful initialization yields a NULL pointer. Note that *no*
1328 exception information is available even in this case -- the
1329 exception information is held in the thread, and there is no
1330 thread.
1331
1332 Locking: as above.
1333
1334*/
1335
Victor Stinnera7368ac2017-11-15 18:11:45 -08001336static _PyInitError
1337new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001338{
1339 PyInterpreterState *interp;
1340 PyThreadState *tstate, *save_tstate;
1341 PyObject *bimod, *sysmod;
Victor Stinner9316ee42017-11-25 03:17:57 +01001342 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001343
Victor Stinnera7368ac2017-11-15 18:11:45 -08001344 if (!_PyRuntime.initialized) {
1345 return _Py_INIT_ERR("Py_Initialize must be called first");
1346 }
Nick Coghland6009512014-11-20 21:39:37 +10001347
Victor Stinner8a1be612016-03-14 22:07:55 +01001348 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1349 interpreters: disable PyGILState_Check(). */
1350 _PyGILState_check_enabled = 0;
1351
Nick Coghland6009512014-11-20 21:39:37 +10001352 interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001353 if (interp == NULL) {
1354 *tstate_p = NULL;
1355 return _Py_INIT_OK();
1356 }
Nick Coghland6009512014-11-20 21:39:37 +10001357
1358 tstate = PyThreadState_New(interp);
1359 if (tstate == NULL) {
1360 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001361 *tstate_p = NULL;
1362 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001363 }
1364
1365 save_tstate = PyThreadState_Swap(tstate);
1366
Eric Snow1abcf672017-05-23 21:46:51 -07001367 /* Copy the current interpreter config into the new interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +01001368 _PyCoreConfig *core_config;
1369 _PyMainInterpreterConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001370 if (save_tstate != NULL) {
Victor Stinnerda273412017-12-15 01:46:02 +01001371 core_config = &save_tstate->interp->core_config;
1372 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001373 } else {
1374 /* No current thread state, copy from the main interpreter */
1375 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinnerda273412017-12-15 01:46:02 +01001376 core_config = &main_interp->core_config;
1377 config = &main_interp->config;
1378 }
1379
1380 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
1381 return _Py_INIT_ERR("failed to copy core config");
1382 }
Victor Stinnerd19d8d52018-07-24 13:55:48 +02001383 core_config = &interp->core_config;
Victor Stinnerda273412017-12-15 01:46:02 +01001384 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
1385 return _Py_INIT_ERR("failed to copy main interpreter config");
Eric Snow1abcf672017-05-23 21:46:51 -07001386 }
1387
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001388 err = _PyExc_Init();
1389 if (_Py_INIT_FAILED(err)) {
1390 return err;
1391 }
1392
Nick Coghland6009512014-11-20 21:39:37 +10001393 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001394 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001395 if (modules == NULL) {
1396 return _Py_INIT_ERR("can't make modules dictionary");
1397 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001398 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001399
Eric Snowd393c1b2017-09-14 12:18:12 -06001400 sysmod = _PyImport_FindBuiltin("sys", modules);
1401 if (sysmod != NULL) {
1402 interp->sysdict = PyModule_GetDict(sysmod);
1403 if (interp->sysdict == NULL)
1404 goto handle_error;
1405 Py_INCREF(interp->sysdict);
1406 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinnerab672812019-01-23 15:04:40 +01001407 if (_PySys_InitMain(interp) < 0) {
1408 return _Py_INIT_ERR("can't finish initializing sys");
1409 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001410 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001411 else if (PyErr_Occurred()) {
1412 goto handle_error;
1413 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001414
1415 bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001416 if (bimod != NULL) {
1417 interp->builtins = PyModule_GetDict(bimod);
1418 if (interp->builtins == NULL)
1419 goto handle_error;
1420 Py_INCREF(interp->builtins);
1421 }
Serhiy Storchaka8905fcc2018-12-11 08:38:03 +02001422 else if (PyErr_Occurred()) {
1423 goto handle_error;
1424 }
Nick Coghland6009512014-11-20 21:39:37 +10001425
Nick Coghland6009512014-11-20 21:39:37 +10001426 if (bimod != NULL && sysmod != NULL) {
Victor Stinner6d43f6f2019-01-22 21:18:05 +01001427 err = _PyBuiltins_AddExceptions(bimod);
1428 if (_Py_INIT_FAILED(err)) {
1429 return err;
1430 }
Nick Coghland6009512014-11-20 21:39:37 +10001431
Victor Stinnerab672812019-01-23 15:04:40 +01001432 err = _PySys_SetPreliminaryStderr(interp->sysdict);
1433 if (_Py_INIT_FAILED(err)) {
1434 return err;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001435 }
Nick Coghland6009512014-11-20 21:39:37 +10001436
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001437 err = _PyImportHooks_Init();
1438 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001439 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001440 }
Nick Coghland6009512014-11-20 21:39:37 +10001441
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001442 err = initimport(interp, sysmod);
1443 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001444 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001445 }
Nick Coghland6009512014-11-20 21:39:37 +10001446
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001447 err = initexternalimport(interp);
1448 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001449 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001450 }
Nick Coghland6009512014-11-20 21:39:37 +10001451
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001452 err = initfsencoding(interp);
1453 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001454 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001455 }
1456
Victor Stinner91106cd2017-12-13 12:29:09 +01001457 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001458 if (_Py_INIT_FAILED(err)) {
1459 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001460 }
1461
1462 err = add_main_module(interp);
1463 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001464 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001465 }
1466
Victor Stinnerd19d8d52018-07-24 13:55:48 +02001467 if (core_config->site_import) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001468 err = initsite();
1469 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001470 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001471 }
1472 }
Nick Coghland6009512014-11-20 21:39:37 +10001473 }
1474
Victor Stinnera7368ac2017-11-15 18:11:45 -08001475 if (PyErr_Occurred()) {
1476 goto handle_error;
1477 }
Nick Coghland6009512014-11-20 21:39:37 +10001478
Victor Stinnera7368ac2017-11-15 18:11:45 -08001479 *tstate_p = tstate;
1480 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001481
Nick Coghland6009512014-11-20 21:39:37 +10001482handle_error:
1483 /* Oops, it didn't work. Undo it all. */
1484
1485 PyErr_PrintEx(0);
1486 PyThreadState_Clear(tstate);
1487 PyThreadState_Swap(save_tstate);
1488 PyThreadState_Delete(tstate);
1489 PyInterpreterState_Delete(interp);
1490
Victor Stinnera7368ac2017-11-15 18:11:45 -08001491 *tstate_p = NULL;
1492 return _Py_INIT_OK();
1493}
1494
1495PyThreadState *
1496Py_NewInterpreter(void)
1497{
Stéphane Wirtel9e06d2b2019-03-18 17:10:29 +01001498 PyThreadState *tstate = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001499 _PyInitError err = new_interpreter(&tstate);
1500 if (_Py_INIT_FAILED(err)) {
Victor Stinnerdfe88472019-03-01 12:14:41 +01001501 _Py_ExitInitError(err);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001502 }
1503 return tstate;
1504
Nick Coghland6009512014-11-20 21:39:37 +10001505}
1506
1507/* Delete an interpreter and its last thread. This requires that the
1508 given thread state is current, that the thread has no remaining
1509 frames, and that it is its interpreter's only remaining thread.
1510 It is a fatal error to violate these constraints.
1511
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001512 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001513 everything, regardless.)
1514
1515 Locking: as above.
1516
1517*/
1518
1519void
1520Py_EndInterpreter(PyThreadState *tstate)
1521{
1522 PyInterpreterState *interp = tstate->interp;
1523
Victor Stinner50b48572018-11-01 01:51:40 +01001524 if (tstate != _PyThreadState_GET())
Nick Coghland6009512014-11-20 21:39:37 +10001525 Py_FatalError("Py_EndInterpreter: thread is not current");
1526 if (tstate->frame != NULL)
1527 Py_FatalError("Py_EndInterpreter: thread still has a frame");
Eric Snow5be45a62019-03-08 22:47:07 -07001528 interp->finalizing = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001529
Eric Snow842a2f02019-03-15 15:47:51 -06001530 // Wrap up existing "threading"-module-created, non-daemon threads.
Nick Coghland6009512014-11-20 21:39:37 +10001531 wait_for_thread_shutdown();
1532
Marcel Plch776407f2017-12-20 11:17:58 +01001533 call_py_exitfuncs(interp);
1534
Nick Coghland6009512014-11-20 21:39:37 +10001535 if (tstate != interp->tstate_head || tstate->next != NULL)
1536 Py_FatalError("Py_EndInterpreter: not the last thread");
1537
1538 PyImport_Cleanup();
1539 PyInterpreterState_Clear(interp);
1540 PyThreadState_Swap(NULL);
1541 PyInterpreterState_Delete(interp);
1542}
1543
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001544/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001545
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001546static _PyInitError
1547add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001548{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001549 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001550 m = PyImport_AddModule("__main__");
1551 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001552 return _Py_INIT_ERR("can't create __main__ module");
1553
Nick Coghland6009512014-11-20 21:39:37 +10001554 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001555 ann_dict = PyDict_New();
1556 if ((ann_dict == NULL) ||
1557 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001558 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001559 }
1560 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001561
Nick Coghland6009512014-11-20 21:39:37 +10001562 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1563 PyObject *bimod = PyImport_ImportModule("builtins");
1564 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001565 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001566 }
1567 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001568 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001569 }
1570 Py_DECREF(bimod);
1571 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001572
Nick Coghland6009512014-11-20 21:39:37 +10001573 /* Main is a little special - imp.is_builtin("__main__") will return
1574 * False, but BuiltinImporter is still the most appropriate initial
1575 * setting for its __loader__ attribute. A more suitable value will
1576 * be set if __main__ gets further initialized later in the startup
1577 * process.
1578 */
1579 loader = PyDict_GetItemString(d, "__loader__");
1580 if (loader == NULL || loader == Py_None) {
1581 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1582 "BuiltinImporter");
1583 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001584 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001585 }
1586 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001587 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001588 }
1589 Py_DECREF(loader);
1590 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001591 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001592}
1593
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001594static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001595initfsencoding(PyInterpreterState *interp)
1596{
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001597 _PyCoreConfig *config = &interp->core_config;
Nick Coghland6009512014-11-20 21:39:37 +10001598
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001599 char *encoding = get_codec_name(config->filesystem_encoding);
1600 if (encoding == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001601 /* Such error can only occurs in critical situations: no more
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001602 memory, import a module of the standard library failed, etc. */
1603 return _Py_INIT_ERR("failed to get the Python codec "
1604 "of the filesystem encoding");
Nick Coghland6009512014-11-20 21:39:37 +10001605 }
Victor Stinnerb2457ef2018-08-29 13:25:36 +02001606
1607 /* Update the filesystem encoding to the normalized Python codec name.
1608 For example, replace "ANSI_X3.4-1968" (locale encoding) with "ascii"
1609 (Python codec name). */
1610 PyMem_RawFree(config->filesystem_encoding);
1611 config->filesystem_encoding = encoding;
1612
1613 /* Set Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors
1614 global configuration variables. */
1615 if (_Py_SetFileSystemEncoding(config->filesystem_encoding,
1616 config->filesystem_errors) < 0) {
1617 return _Py_INIT_NO_MEMORY();
1618 }
1619
1620 /* PyUnicode can now use the Python codec rather than C implementation
1621 for the filesystem encoding */
Nick Coghland6009512014-11-20 21:39:37 +10001622 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001623 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001624}
1625
1626/* Import the site module (not into __main__ though) */
1627
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001628static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001629initsite(void)
1630{
1631 PyObject *m;
1632 m = PyImport_ImportModule("site");
1633 if (m == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001634 return _Py_INIT_USER_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001635 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001636 Py_DECREF(m);
1637 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001638}
1639
Victor Stinner874dbe82015-09-04 17:29:57 +02001640/* Check if a file descriptor is valid or not.
1641 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1642static int
1643is_valid_fd(int fd)
1644{
Victor Stinner1c4670e2017-05-04 00:45:56 +02001645#ifdef __APPLE__
1646 /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe
1647 and the other side of the pipe is closed, dup(1) succeed, whereas
1648 fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect
1649 such error. */
1650 struct stat st;
1651 return (fstat(fd, &st) == 0);
1652#else
Victor Stinner874dbe82015-09-04 17:29:57 +02001653 int fd2;
Steve Dower940f33a2016-09-08 11:21:54 -07001654 if (fd < 0)
Victor Stinner874dbe82015-09-04 17:29:57 +02001655 return 0;
1656 _Py_BEGIN_SUPPRESS_IPH
Victor Stinner449b2712015-09-29 13:59:50 +02001657 /* Prefer dup() over fstat(). fstat() can require input/output whereas
1658 dup() doesn't, there is a low risk of EMFILE/ENFILE at Python
1659 startup. */
Victor Stinner874dbe82015-09-04 17:29:57 +02001660 fd2 = dup(fd);
1661 if (fd2 >= 0)
1662 close(fd2);
1663 _Py_END_SUPPRESS_IPH
1664 return fd2 >= 0;
Victor Stinner1c4670e2017-05-04 00:45:56 +02001665#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001666}
1667
1668/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001669static PyObject*
Victor Stinnerfbca9082018-08-30 00:50:45 +02001670create_stdio(const _PyCoreConfig *config, PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001671 int fd, int write_mode, const char* name,
1672 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001673{
1674 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1675 const char* mode;
1676 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001677 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001678 int buffering, isatty;
1679 _Py_IDENTIFIER(open);
1680 _Py_IDENTIFIER(isatty);
1681 _Py_IDENTIFIER(TextIOWrapper);
1682 _Py_IDENTIFIER(mode);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001683 const int buffered_stdio = config->buffered_stdio;
Nick Coghland6009512014-11-20 21:39:37 +10001684
Victor Stinner874dbe82015-09-04 17:29:57 +02001685 if (!is_valid_fd(fd))
1686 Py_RETURN_NONE;
1687
Nick Coghland6009512014-11-20 21:39:37 +10001688 /* stdin is always opened in buffered mode, first because it shouldn't
1689 make a difference in common use cases, second because TextIOWrapper
1690 depends on the presence of a read1() method which only exists on
1691 buffered streams.
1692 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001693 if (!buffered_stdio && write_mode)
Nick Coghland6009512014-11-20 21:39:37 +10001694 buffering = 0;
1695 else
1696 buffering = -1;
1697 if (write_mode)
1698 mode = "wb";
1699 else
1700 mode = "rb";
1701 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1702 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001703 Py_None, Py_None, /* encoding, errors */
1704 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001705 if (buf == NULL)
1706 goto error;
1707
1708 if (buffering) {
1709 _Py_IDENTIFIER(raw);
1710 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1711 if (raw == NULL)
1712 goto error;
1713 }
1714 else {
1715 raw = buf;
1716 Py_INCREF(raw);
1717 }
1718
Steve Dower39294992016-08-30 21:22:36 -07001719#ifdef MS_WINDOWS
1720 /* Windows console IO is always UTF-8 encoded */
1721 if (PyWindowsConsoleIO_Check(raw))
1722 encoding = "utf-8";
1723#endif
1724
Nick Coghland6009512014-11-20 21:39:37 +10001725 text = PyUnicode_FromString(name);
1726 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1727 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001728 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001729 if (res == NULL)
1730 goto error;
1731 isatty = PyObject_IsTrue(res);
1732 Py_DECREF(res);
1733 if (isatty == -1)
1734 goto error;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001735 if (!buffered_stdio)
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001736 write_through = Py_True;
1737 else
1738 write_through = Py_False;
Victor Stinnerfbca9082018-08-30 00:50:45 +02001739 if (isatty && buffered_stdio)
Nick Coghland6009512014-11-20 21:39:37 +10001740 line_buffering = Py_True;
1741 else
1742 line_buffering = Py_False;
1743
1744 Py_CLEAR(raw);
1745 Py_CLEAR(text);
1746
1747#ifdef MS_WINDOWS
1748 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1749 newlines to "\n".
1750 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1751 newline = NULL;
1752#else
1753 /* sys.stdin: split lines at "\n".
1754 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1755 newline = "\n";
1756#endif
1757
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001758 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001759 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001760 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001761 Py_CLEAR(buf);
1762 if (stream == NULL)
1763 goto error;
1764
1765 if (write_mode)
1766 mode = "w";
1767 else
1768 mode = "r";
1769 text = PyUnicode_FromString(mode);
1770 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1771 goto error;
1772 Py_CLEAR(text);
1773 return stream;
1774
1775error:
1776 Py_XDECREF(buf);
1777 Py_XDECREF(stream);
1778 Py_XDECREF(text);
1779 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001780
Victor Stinner874dbe82015-09-04 17:29:57 +02001781 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1782 /* Issue #24891: the file descriptor was closed after the first
1783 is_valid_fd() check was called. Ignore the OSError and set the
1784 stream to None. */
1785 PyErr_Clear();
1786 Py_RETURN_NONE;
1787 }
1788 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001789}
1790
1791/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001792static _PyInitError
Victor Stinner91106cd2017-12-13 12:29:09 +01001793init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001794{
1795 PyObject *iomod = NULL, *wrapper;
1796 PyObject *bimod = NULL;
1797 PyObject *m;
1798 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001799 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001800 PyObject * encoding_attr;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001801 _PyInitError res = _Py_INIT_OK();
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001802 _PyCoreConfig *config = &interp->core_config;
1803
Victor Stinnerbf4ac2d2019-01-22 17:39:03 +01001804 /* Check that stdin is not a directory
1805 Using shell redirection, you can redirect stdin to a directory,
1806 crashing the Python interpreter. Catch this common mistake here
1807 and output a useful error message. Note that under MS Windows,
1808 the shell already prevents that. */
1809#ifndef MS_WINDOWS
1810 struct _Py_stat_struct sb;
1811 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 &&
1812 S_ISDIR(sb.st_mode)) {
1813 return _Py_INIT_USER_ERR("<stdin> is a directory, "
1814 "cannot continue");
1815 }
1816#endif
1817
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001818 char *codec_name = get_codec_name(config->stdio_encoding);
1819 if (codec_name == NULL) {
1820 return _Py_INIT_ERR("failed to get the Python codec name "
1821 "of the stdio encoding");
1822 }
1823 PyMem_RawFree(config->stdio_encoding);
1824 config->stdio_encoding = codec_name;
Nick Coghland6009512014-11-20 21:39:37 +10001825
1826 /* Hack to avoid a nasty recursion issue when Python is invoked
1827 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1828 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1829 goto error;
1830 }
1831 Py_DECREF(m);
1832
1833 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1834 goto error;
1835 }
1836 Py_DECREF(m);
1837
1838 if (!(bimod = PyImport_ImportModule("builtins"))) {
1839 goto error;
1840 }
1841
1842 if (!(iomod = PyImport_ImportModule("io"))) {
1843 goto error;
1844 }
1845 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1846 goto error;
1847 }
1848
1849 /* Set builtins.open */
1850 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1851 Py_DECREF(wrapper);
1852 goto error;
1853 }
1854 Py_DECREF(wrapper);
1855
Nick Coghland6009512014-11-20 21:39:37 +10001856 /* Set sys.stdin */
1857 fd = fileno(stdin);
1858 /* Under some conditions stdin, stdout and stderr may not be connected
1859 * and fileno() may point to an invalid file descriptor. For example
1860 * GUI apps don't have valid standard streams by default.
1861 */
Victor Stinnerfbca9082018-08-30 00:50:45 +02001862 std = create_stdio(config, iomod, fd, 0, "<stdin>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001863 config->stdio_encoding,
1864 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001865 if (std == NULL)
1866 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001867 PySys_SetObject("__stdin__", std);
1868 _PySys_SetObjectId(&PyId_stdin, std);
1869 Py_DECREF(std);
1870
1871 /* Set sys.stdout */
1872 fd = fileno(stdout);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001873 std = create_stdio(config, iomod, fd, 1, "<stdout>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001874 config->stdio_encoding,
1875 config->stdio_errors);
Victor Stinner874dbe82015-09-04 17:29:57 +02001876 if (std == NULL)
1877 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001878 PySys_SetObject("__stdout__", std);
1879 _PySys_SetObjectId(&PyId_stdout, std);
1880 Py_DECREF(std);
1881
1882#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1883 /* Set sys.stderr, replaces the preliminary stderr */
1884 fd = fileno(stderr);
Victor Stinnerfbca9082018-08-30 00:50:45 +02001885 std = create_stdio(config, iomod, fd, 1, "<stderr>",
Victor Stinnerdfe0dc72018-08-29 11:47:29 +02001886 config->stdio_encoding,
1887 "backslashreplace");
Victor Stinner874dbe82015-09-04 17:29:57 +02001888 if (std == NULL)
1889 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001890
1891 /* Same as hack above, pre-import stderr's codec to avoid recursion
1892 when import.c tries to write to stderr in verbose mode. */
1893 encoding_attr = PyObject_GetAttrString(std, "encoding");
1894 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001895 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001896 if (std_encoding != NULL) {
1897 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1898 Py_XDECREF(codec_info);
1899 }
1900 Py_DECREF(encoding_attr);
1901 }
1902 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1903
1904 if (PySys_SetObject("__stderr__", std) < 0) {
1905 Py_DECREF(std);
1906 goto error;
1907 }
1908 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1909 Py_DECREF(std);
1910 goto error;
1911 }
1912 Py_DECREF(std);
1913#endif
1914
Victor Stinnera7368ac2017-11-15 18:11:45 -08001915 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001916
Victor Stinnera7368ac2017-11-15 18:11:45 -08001917error:
1918 res = _Py_INIT_ERR("can't initialize sys standard streams");
1919
1920done:
Victor Stinner124b9eb2018-08-29 01:29:06 +02001921 _Py_ClearStandardStreamEncoding();
Victor Stinner31e99082017-12-20 23:41:38 +01001922
Nick Coghland6009512014-11-20 21:39:37 +10001923 Py_XDECREF(bimod);
1924 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001925 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001926}
1927
1928
Victor Stinner10dc4842015-03-24 12:01:30 +01001929static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001930_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001931{
Victor Stinner10dc4842015-03-24 12:01:30 +01001932 fputc('\n', stderr);
1933 fflush(stderr);
1934
1935 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001936 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001937}
Victor Stinner791da1c2016-03-14 16:53:12 +01001938
1939/* Print the current exception (if an exception is set) with its traceback,
1940 or display the current Python stack.
1941
1942 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1943 called on catastrophic cases.
1944
1945 Return 1 if the traceback was displayed, 0 otherwise. */
1946
1947static int
1948_Py_FatalError_PrintExc(int fd)
1949{
1950 PyObject *ferr, *res;
1951 PyObject *exception, *v, *tb;
1952 int has_tb;
1953
Victor Stinner791da1c2016-03-14 16:53:12 +01001954 PyErr_Fetch(&exception, &v, &tb);
1955 if (exception == NULL) {
1956 /* No current exception */
1957 return 0;
1958 }
1959
1960 ferr = _PySys_GetObjectId(&PyId_stderr);
1961 if (ferr == NULL || ferr == Py_None) {
1962 /* sys.stderr is not set yet or set to None,
1963 no need to try to display the exception */
1964 return 0;
1965 }
1966
1967 PyErr_NormalizeException(&exception, &v, &tb);
1968 if (tb == NULL) {
1969 tb = Py_None;
1970 Py_INCREF(tb);
1971 }
1972 PyException_SetTraceback(v, tb);
1973 if (exception == NULL) {
1974 /* PyErr_NormalizeException() failed */
1975 return 0;
1976 }
1977
1978 has_tb = (tb != Py_None);
1979 PyErr_Display(exception, v, tb);
1980 Py_XDECREF(exception);
1981 Py_XDECREF(v);
1982 Py_XDECREF(tb);
1983
1984 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07001985 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01001986 if (res == NULL)
1987 PyErr_Clear();
1988 else
1989 Py_DECREF(res);
1990
1991 return has_tb;
1992}
1993
Nick Coghland6009512014-11-20 21:39:37 +10001994/* Print fatal error message and abort */
1995
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001996#ifdef MS_WINDOWS
1997static void
1998fatal_output_debug(const char *msg)
1999{
2000 /* buffer of 256 bytes allocated on the stack */
2001 WCHAR buffer[256 / sizeof(WCHAR)];
2002 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2003 size_t msglen;
2004
2005 OutputDebugStringW(L"Fatal Python error: ");
2006
2007 msglen = strlen(msg);
2008 while (msglen) {
2009 size_t i;
2010
2011 if (buflen > msglen) {
2012 buflen = msglen;
2013 }
2014
2015 /* Convert the message to wchar_t. This uses a simple one-to-one
2016 conversion, assuming that the this error message actually uses
2017 ASCII only. If this ceases to be true, we will have to convert. */
2018 for (i=0; i < buflen; ++i) {
2019 buffer[i] = msg[i];
2020 }
2021 buffer[i] = L'\0';
2022 OutputDebugStringW(buffer);
2023
2024 msg += buflen;
2025 msglen -= buflen;
2026 }
2027 OutputDebugStringW(L"\n");
2028}
2029#endif
2030
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002031static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002032fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002033{
2034 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01002035 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002036
2037 if (reentrant) {
2038 /* Py_FatalError() caused a second fatal error.
2039 Example: flush_std_files() raises a recursion error. */
2040 goto exit;
2041 }
2042 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002043
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002044 fprintf(stderr, "Fatal Python error: ");
2045 if (prefix) {
2046 fputs(prefix, stderr);
2047 fputs(": ", stderr);
2048 }
2049 if (msg) {
2050 fputs(msg, stderr);
2051 }
2052 else {
2053 fprintf(stderr, "<message not set>");
2054 }
2055 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10002056 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01002057
Victor Stinner3a228ab2018-11-01 00:26:41 +01002058 /* Check if the current thread has a Python thread state
2059 and holds the GIL */
2060 PyThreadState *tss_tstate = PyGILState_GetThisThreadState();
2061 if (tss_tstate != NULL) {
Victor Stinner50b48572018-11-01 01:51:40 +01002062 PyThreadState *tstate = _PyThreadState_GET();
Victor Stinner3a228ab2018-11-01 00:26:41 +01002063 if (tss_tstate != tstate) {
2064 /* The Python thread does not hold the GIL */
2065 tss_tstate = NULL;
2066 }
2067 }
2068 else {
2069 /* Py_FatalError() has been called from a C thread
2070 which has no Python thread state. */
2071 }
2072 int has_tstate_and_gil = (tss_tstate != NULL);
2073
2074 if (has_tstate_and_gil) {
2075 /* If an exception is set, print the exception with its traceback */
2076 if (!_Py_FatalError_PrintExc(fd)) {
2077 /* No exception is set, or an exception is set without traceback */
2078 _Py_FatalError_DumpTracebacks(fd);
2079 }
2080 }
2081 else {
Victor Stinner791da1c2016-03-14 16:53:12 +01002082 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002083 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002084
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002085 /* The main purpose of faulthandler is to display the traceback.
2086 This function already did its best to display a traceback.
2087 Disable faulthandler to prevent writing a second traceback
2088 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002089 _PyFaulthandler_Fini();
2090
Victor Stinner791da1c2016-03-14 16:53:12 +01002091 /* Check if the current Python thread hold the GIL */
Victor Stinner3a228ab2018-11-01 00:26:41 +01002092 if (has_tstate_and_gil) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002093 /* Flush sys.stdout and sys.stderr */
2094 flush_std_files();
2095 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002096
Nick Coghland6009512014-11-20 21:39:37 +10002097#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002098 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002099#endif /* MS_WINDOWS */
2100
2101exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002102 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002103#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002104 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002105#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002106 abort();
2107 }
2108 else {
2109 exit(status);
2110 }
2111}
2112
Victor Stinner19760862017-12-20 01:41:59 +01002113void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002114Py_FatalError(const char *msg)
2115{
2116 fatal_error(NULL, msg, -1);
2117}
2118
Victor Stinner19760862017-12-20 01:41:59 +01002119void _Py_NO_RETURN
Victor Stinnerdfe88472019-03-01 12:14:41 +01002120_Py_ExitInitError(_PyInitError err)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002121{
Victor Stinnerdfe88472019-03-01 12:14:41 +01002122 if (err.exitcode >= 0) {
2123 exit(err.exitcode);
2124 }
2125 else {
2126 /* On "user" error: exit with status 1.
2127 For all other errors, call abort(). */
2128 int status = err.user_err ? 1 : -1;
2129 fatal_error(err.prefix, err.msg, status);
2130 }
Nick Coghland6009512014-11-20 21:39:37 +10002131}
2132
2133/* Clean up and exit */
2134
Victor Stinnerd7292b52016-06-17 12:29:00 +02002135# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002136
Nick Coghland6009512014-11-20 21:39:37 +10002137/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002138void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002139{
Victor Stinnercaba55b2018-08-03 15:33:52 +02002140 PyInterpreterState *is = _PyInterpreterState_Get();
Marcel Plch776407f2017-12-20 11:17:58 +01002141
Antoine Pitroufc5db952017-12-13 02:29:07 +01002142 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002143 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2144
2145 is->pyexitfunc = func;
2146 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002147}
2148
2149static void
Marcel Plch776407f2017-12-20 11:17:58 +01002150call_py_exitfuncs(PyInterpreterState *istate)
Nick Coghland6009512014-11-20 21:39:37 +10002151{
Marcel Plch776407f2017-12-20 11:17:58 +01002152 if (istate->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002153 return;
2154
Marcel Plch776407f2017-12-20 11:17:58 +01002155 (*istate->pyexitfunc)(istate->pyexitmodule);
Nick Coghland6009512014-11-20 21:39:37 +10002156 PyErr_Clear();
2157}
2158
2159/* Wait until threading._shutdown completes, provided
2160 the threading module was imported in the first place.
2161 The shutdown routine will wait until all non-daemon
2162 "threading" threads have completed. */
2163static void
2164wait_for_thread_shutdown(void)
2165{
Nick Coghland6009512014-11-20 21:39:37 +10002166 _Py_IDENTIFIER(_shutdown);
2167 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002168 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002169 if (threading == NULL) {
Stefan Krah027b09c2019-03-25 21:50:58 +01002170 if (PyErr_Occurred()) {
2171 PyErr_WriteUnraisable(NULL);
2172 }
2173 /* else: threading not imported */
Nick Coghland6009512014-11-20 21:39:37 +10002174 return;
2175 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002176 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002177 if (result == NULL) {
2178 PyErr_WriteUnraisable(threading);
2179 }
2180 else {
2181 Py_DECREF(result);
2182 }
2183 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002184}
2185
2186#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002187int Py_AtExit(void (*func)(void))
2188{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002189 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002190 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002191 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002192 return 0;
2193}
2194
2195static void
2196call_ll_exitfuncs(void)
2197{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002198 while (_PyRuntime.nexitfuncs > 0)
2199 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002200
2201 fflush(stdout);
2202 fflush(stderr);
2203}
2204
Victor Stinnercfc88312018-08-01 16:41:25 +02002205void _Py_NO_RETURN
Nick Coghland6009512014-11-20 21:39:37 +10002206Py_Exit(int sts)
2207{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002208 if (Py_FinalizeEx() < 0) {
2209 sts = 120;
2210 }
Nick Coghland6009512014-11-20 21:39:37 +10002211
2212 exit(sts);
2213}
2214
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002215static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002216initsigs(void)
2217{
2218#ifdef SIGPIPE
2219 PyOS_setsig(SIGPIPE, SIG_IGN);
2220#endif
2221#ifdef SIGXFZ
2222 PyOS_setsig(SIGXFZ, SIG_IGN);
2223#endif
2224#ifdef SIGXFSZ
2225 PyOS_setsig(SIGXFSZ, SIG_IGN);
2226#endif
2227 PyOS_InitInterrupts(); /* May imply initsignal() */
2228 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002229 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002230 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002231 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002232}
2233
2234
2235/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2236 *
2237 * All of the code in this function must only use async-signal-safe functions,
2238 * listed at `man 7 signal` or
2239 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2240 */
2241void
2242_Py_RestoreSignals(void)
2243{
2244#ifdef SIGPIPE
2245 PyOS_setsig(SIGPIPE, SIG_DFL);
2246#endif
2247#ifdef SIGXFZ
2248 PyOS_setsig(SIGXFZ, SIG_DFL);
2249#endif
2250#ifdef SIGXFSZ
2251 PyOS_setsig(SIGXFSZ, SIG_DFL);
2252#endif
2253}
2254
2255
2256/*
2257 * The file descriptor fd is considered ``interactive'' if either
2258 * a) isatty(fd) is TRUE, or
2259 * b) the -i flag was given, and the filename associated with
2260 * the descriptor is NULL or "<stdin>" or "???".
2261 */
2262int
2263Py_FdIsInteractive(FILE *fp, const char *filename)
2264{
2265 if (isatty((int)fileno(fp)))
2266 return 1;
2267 if (!Py_InteractiveFlag)
2268 return 0;
2269 return (filename == NULL) ||
2270 (strcmp(filename, "<stdin>") == 0) ||
2271 (strcmp(filename, "???") == 0);
2272}
2273
2274
Nick Coghland6009512014-11-20 21:39:37 +10002275/* Wrappers around sigaction() or signal(). */
2276
2277PyOS_sighandler_t
2278PyOS_getsig(int sig)
2279{
2280#ifdef HAVE_SIGACTION
2281 struct sigaction context;
2282 if (sigaction(sig, NULL, &context) == -1)
2283 return SIG_ERR;
2284 return context.sa_handler;
2285#else
2286 PyOS_sighandler_t handler;
2287/* Special signal handling for the secure CRT in Visual Studio 2005 */
2288#if defined(_MSC_VER) && _MSC_VER >= 1400
2289 switch (sig) {
2290 /* Only these signals are valid */
2291 case SIGINT:
2292 case SIGILL:
2293 case SIGFPE:
2294 case SIGSEGV:
2295 case SIGTERM:
2296 case SIGBREAK:
2297 case SIGABRT:
2298 break;
2299 /* Don't call signal() with other values or it will assert */
2300 default:
2301 return SIG_ERR;
2302 }
2303#endif /* _MSC_VER && _MSC_VER >= 1400 */
2304 handler = signal(sig, SIG_IGN);
2305 if (handler != SIG_ERR)
2306 signal(sig, handler);
2307 return handler;
2308#endif
2309}
2310
2311/*
2312 * All of the code in this function must only use async-signal-safe functions,
2313 * listed at `man 7 signal` or
2314 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2315 */
2316PyOS_sighandler_t
2317PyOS_setsig(int sig, PyOS_sighandler_t handler)
2318{
2319#ifdef HAVE_SIGACTION
2320 /* Some code in Modules/signalmodule.c depends on sigaction() being
2321 * used here if HAVE_SIGACTION is defined. Fix that if this code
2322 * changes to invalidate that assumption.
2323 */
2324 struct sigaction context, ocontext;
2325 context.sa_handler = handler;
2326 sigemptyset(&context.sa_mask);
2327 context.sa_flags = 0;
2328 if (sigaction(sig, &context, &ocontext) == -1)
2329 return SIG_ERR;
2330 return ocontext.sa_handler;
2331#else
2332 PyOS_sighandler_t oldhandler;
2333 oldhandler = signal(sig, handler);
2334#ifdef HAVE_SIGINTERRUPT
2335 siginterrupt(sig, 1);
2336#endif
2337 return oldhandler;
2338#endif
2339}
2340
2341#ifdef __cplusplus
2342}
2343#endif