blob: 2bac23d1cb066d5c354da42abb6f6846286c327f [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"
6#undef Yield /* undefine macro conflicting with winbase.h */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06007#include "internal/pystate.h"
Nick Coghland6009512014-11-20 21:39:37 +10008#include "grammar.h"
9#include "node.h"
10#include "token.h"
11#include "parsetok.h"
12#include "errcode.h"
13#include "code.h"
14#include "symtable.h"
15#include "ast.h"
16#include "marshal.h"
17#include "osdefs.h"
18#include <locale.h>
19
20#ifdef HAVE_SIGNAL_H
21#include <signal.h>
22#endif
23
24#ifdef MS_WINDOWS
25#include "malloc.h" /* for alloca */
26#endif
27
28#ifdef HAVE_LANGINFO_H
29#include <langinfo.h>
30#endif
31
32#ifdef MS_WINDOWS
33#undef BYTE
34#include "windows.h"
Steve Dower39294992016-08-30 21:22:36 -070035
36extern PyTypeObject PyWindowsConsoleIO_Type;
37#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
Nick Coghland6009512014-11-20 21:39:37 +100038#endif
39
40_Py_IDENTIFIER(flush);
41_Py_IDENTIFIER(name);
42_Py_IDENTIFIER(stdin);
43_Py_IDENTIFIER(stdout);
44_Py_IDENTIFIER(stderr);
Eric Snow3f9eee62017-09-15 16:35:20 -060045_Py_IDENTIFIER(threading);
Nick Coghland6009512014-11-20 21:39:37 +100046
47#ifdef __cplusplus
48extern "C" {
49#endif
50
Nick Coghland6009512014-11-20 21:39:37 +100051extern grammar _PyParser_Grammar; /* From graminit.c */
52
53/* Forward */
Victor Stinnerf7e5b562017-11-15 15:48:08 -080054static _PyInitError add_main_module(PyInterpreterState *interp);
55static _PyInitError initfsencoding(PyInterpreterState *interp);
56static _PyInitError initsite(void);
Victor Stinner91106cd2017-12-13 12:29:09 +010057static _PyInitError init_sys_streams(PyInterpreterState *interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -080058static _PyInitError initsigs(void);
Nick Coghland6009512014-11-20 21:39:37 +100059static void call_py_exitfuncs(void);
60static void wait_for_thread_shutdown(void);
61static void call_ll_exitfuncs(void);
62extern int _PyUnicode_Init(void);
63extern int _PyStructSequence_Init(void);
64extern void _PyUnicode_Fini(void);
65extern int _PyLong_Init(void);
66extern void PyLong_Fini(void);
Victor Stinnera7368ac2017-11-15 18:11:45 -080067extern _PyInitError _PyFaulthandler_Init(int enable);
Nick Coghland6009512014-11-20 21:39:37 +100068extern void _PyFaulthandler_Fini(void);
69extern void _PyHash_Fini(void);
Victor Stinnera7368ac2017-11-15 18:11:45 -080070extern int _PyTraceMalloc_Init(int enable);
Nick Coghland6009512014-11-20 21:39:37 +100071extern int _PyTraceMalloc_Fini(void);
Eric Snowc7ec9982017-05-23 23:00:52 -070072extern void _Py_ReadyTypes(void);
Nick Coghland6009512014-11-20 21:39:37 +100073
Nick Coghland6009512014-11-20 21:39:37 +100074extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
75extern void _PyGILState_Fini(void);
Nick Coghland6009512014-11-20 21:39:37 +100076
Victor Stinnerf7e5b562017-11-15 15:48:08 -080077_PyRuntimeState _PyRuntime = _PyRuntimeState_INIT;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060078
Victor Stinnerf7e5b562017-11-15 15:48:08 -080079_PyInitError
Eric Snow2ebc5ce2017-09-07 23:51:28 -060080_PyRuntime_Initialize(void)
81{
82 /* XXX We only initialize once in the process, which aligns with
83 the static initialization of the former globals now found in
84 _PyRuntime. However, _PyRuntime *should* be initialized with
85 every Py_Initialize() call, but doing so breaks the runtime.
86 This is because the runtime state is not properly finalized
87 currently. */
88 static int initialized = 0;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080089 if (initialized) {
90 return _Py_INIT_OK();
91 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -060092 initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080093
94 return _PyRuntimeState_Init(&_PyRuntime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -060095}
96
97void
98_PyRuntime_Finalize(void)
99{
100 _PyRuntimeState_Fini(&_PyRuntime);
101}
102
103int
104_Py_IsFinalizing(void)
105{
106 return _PyRuntime.finalizing != NULL;
107}
108
Nick Coghland6009512014-11-20 21:39:37 +1000109/* Global configuration variable declarations are in pydebug.h */
110/* XXX (ncoghlan): move those declarations to pylifecycle.h? */
111int Py_DebugFlag; /* Needed by parser.c */
112int Py_VerboseFlag; /* Needed by import.c */
113int Py_QuietFlag; /* Needed by sysmodule.c */
114int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
115int Py_InspectFlag; /* Needed to determine whether to exit at SystemExit */
116int Py_OptimizeFlag = 0; /* Needed by compile.c */
117int Py_NoSiteFlag; /* Suppress 'import site' */
118int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
Nick Coghland6009512014-11-20 21:39:37 +1000119int Py_FrozenFlag; /* Needed by getpath.c */
120int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Xiang Zhang0710d752017-03-11 13:02:52 +0800121int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.pyc) */
Nick Coghland6009512014-11-20 21:39:37 +1000122int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
123int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */
124int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */
125int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */
Steve Dowercc16be82016-09-08 10:35:16 -0700126#ifdef MS_WINDOWS
127int Py_LegacyWindowsFSEncodingFlag = 0; /* Uses mbcs instead of utf-8 */
Steve Dower39294992016-08-30 21:22:36 -0700128int Py_LegacyWindowsStdioFlag = 0; /* Uses FileIO instead of WindowsConsoleIO */
Steve Dowercc16be82016-09-08 10:35:16 -0700129#endif
Nick Coghland6009512014-11-20 21:39:37 +1000130
Nick Coghland6009512014-11-20 21:39:37 +1000131/* Hack to force loading of object files */
132int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
133 PyOS_mystrnicmp; /* Python/pystrcmp.o */
134
135/* PyModule_GetWarningsModule is no longer necessary as of 2.6
136since _warnings is builtin. This API should not be used. */
137PyObject *
138PyModule_GetWarningsModule(void)
139{
140 return PyImport_ImportModule("warnings");
141}
142
Eric Snowc7ec9982017-05-23 23:00:52 -0700143
Eric Snow1abcf672017-05-23 21:46:51 -0700144/* APIs to access the initialization flags
145 *
146 * Can be called prior to Py_Initialize.
147 */
Nick Coghland6009512014-11-20 21:39:37 +1000148
Eric Snow1abcf672017-05-23 21:46:51 -0700149int
150_Py_IsCoreInitialized(void)
151{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600152 return _PyRuntime.core_initialized;
Eric Snow1abcf672017-05-23 21:46:51 -0700153}
Nick Coghland6009512014-11-20 21:39:37 +1000154
155int
156Py_IsInitialized(void)
157{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600158 return _PyRuntime.initialized;
Nick Coghland6009512014-11-20 21:39:37 +1000159}
160
161/* Helper to allow an embedding application to override the normal
162 * mechanism that attempts to figure out an appropriate IO encoding
163 */
164
165static char *_Py_StandardStreamEncoding = NULL;
166static char *_Py_StandardStreamErrors = NULL;
167
168int
169Py_SetStandardStreamEncoding(const char *encoding, const char *errors)
170{
171 if (Py_IsInitialized()) {
172 /* This is too late to have any effect */
173 return -1;
174 }
175 /* Can't call PyErr_NoMemory() on errors, as Python hasn't been
176 * initialised yet.
177 *
178 * However, the raw memory allocators are initialised appropriately
179 * as C static variables, so _PyMem_RawStrdup is OK even though
180 * Py_Initialize hasn't been called yet.
181 */
182 if (encoding) {
183 _Py_StandardStreamEncoding = _PyMem_RawStrdup(encoding);
184 if (!_Py_StandardStreamEncoding) {
185 return -2;
186 }
187 }
188 if (errors) {
189 _Py_StandardStreamErrors = _PyMem_RawStrdup(errors);
190 if (!_Py_StandardStreamErrors) {
191 if (_Py_StandardStreamEncoding) {
192 PyMem_RawFree(_Py_StandardStreamEncoding);
193 }
194 return -3;
195 }
196 }
Steve Dower39294992016-08-30 21:22:36 -0700197#ifdef MS_WINDOWS
198 if (_Py_StandardStreamEncoding) {
199 /* Overriding the stream encoding implies legacy streams */
200 Py_LegacyWindowsStdioFlag = 1;
201 }
202#endif
Nick Coghland6009512014-11-20 21:39:37 +1000203 return 0;
204}
205
Nick Coghlan6ea41862017-06-11 13:16:15 +1000206
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000207/* Global initializations. Can be undone by Py_FinalizeEx(). Don't
208 call this twice without an intervening Py_FinalizeEx() call. When
Nick Coghland6009512014-11-20 21:39:37 +1000209 initializations fail, a fatal error is issued and the function does
210 not return. On return, the first thread and interpreter state have
211 been created.
212
213 Locking: you must hold the interpreter lock while calling this.
214 (If the lock has not yet been initialized, that's equivalent to
215 having the lock, but you cannot use multiple threads.)
216
217*/
218
Nick Coghland6009512014-11-20 21:39:37 +1000219static char*
220get_codec_name(const char *encoding)
221{
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +0200222 const char *name_utf8;
223 char *name_str;
Nick Coghland6009512014-11-20 21:39:37 +1000224 PyObject *codec, *name = NULL;
225
226 codec = _PyCodec_Lookup(encoding);
227 if (!codec)
228 goto error;
229
230 name = _PyObject_GetAttrId(codec, &PyId_name);
231 Py_CLEAR(codec);
232 if (!name)
233 goto error;
234
Serhiy Storchaka06515832016-11-20 09:13:07 +0200235 name_utf8 = PyUnicode_AsUTF8(name);
Nick Coghland6009512014-11-20 21:39:37 +1000236 if (name_utf8 == NULL)
237 goto error;
238 name_str = _PyMem_RawStrdup(name_utf8);
239 Py_DECREF(name);
240 if (name_str == NULL) {
241 PyErr_NoMemory();
242 return NULL;
243 }
244 return name_str;
245
246error:
247 Py_XDECREF(codec);
248 Py_XDECREF(name);
249 return NULL;
250}
251
252static char*
253get_locale_encoding(void)
254{
Benjamin Petersondb610e92017-09-08 14:30:07 -0700255#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Nick Coghland6009512014-11-20 21:39:37 +1000256 char* codeset = nl_langinfo(CODESET);
257 if (!codeset || codeset[0] == '\0') {
258 PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty");
259 return NULL;
260 }
261 return get_codec_name(codeset);
Stefan Krah144da4e2016-04-26 01:56:50 +0200262#elif defined(__ANDROID__)
263 return get_codec_name("UTF-8");
Nick Coghland6009512014-11-20 21:39:37 +1000264#else
265 PyErr_SetNone(PyExc_NotImplementedError);
266 return NULL;
267#endif
268}
269
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800270static _PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700271initimport(PyInterpreterState *interp, PyObject *sysmod)
Nick Coghland6009512014-11-20 21:39:37 +1000272{
273 PyObject *importlib;
274 PyObject *impmod;
Nick Coghland6009512014-11-20 21:39:37 +1000275 PyObject *value;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800276 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +1000277
278 /* Import _importlib through its frozen version, _frozen_importlib. */
279 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800280 return _Py_INIT_ERR("can't import _frozen_importlib");
Nick Coghland6009512014-11-20 21:39:37 +1000281 }
282 else if (Py_VerboseFlag) {
283 PySys_FormatStderr("import _frozen_importlib # frozen\n");
284 }
285 importlib = PyImport_AddModule("_frozen_importlib");
286 if (importlib == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800287 return _Py_INIT_ERR("couldn't get _frozen_importlib from sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000288 }
289 interp->importlib = importlib;
290 Py_INCREF(interp->importlib);
291
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300292 interp->import_func = PyDict_GetItemString(interp->builtins, "__import__");
293 if (interp->import_func == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800294 return _Py_INIT_ERR("__import__ not found");
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300295 Py_INCREF(interp->import_func);
296
Victor Stinnercd6e6942015-09-18 09:11:57 +0200297 /* Import the _imp module */
Nick Coghland6009512014-11-20 21:39:37 +1000298 impmod = PyInit_imp();
299 if (impmod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800300 return _Py_INIT_ERR("can't import _imp");
Nick Coghland6009512014-11-20 21:39:37 +1000301 }
302 else if (Py_VerboseFlag) {
Victor Stinnercd6e6942015-09-18 09:11:57 +0200303 PySys_FormatStderr("import _imp # builtin\n");
Nick Coghland6009512014-11-20 21:39:37 +1000304 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600305 if (_PyImport_SetModuleString("_imp", impmod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800306 return _Py_INIT_ERR("can't save _imp to sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000307 }
308
Victor Stinnercd6e6942015-09-18 09:11:57 +0200309 /* Install importlib as the implementation of import */
Nick Coghland6009512014-11-20 21:39:37 +1000310 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200311 if (value != NULL) {
312 Py_DECREF(value);
Eric Snow6b4be192017-05-22 21:36:03 -0700313 value = PyObject_CallMethod(importlib,
314 "_install_external_importers", "");
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200315 }
Nick Coghland6009512014-11-20 21:39:37 +1000316 if (value == NULL) {
317 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800318 return _Py_INIT_ERR("importlib install failed");
Nick Coghland6009512014-11-20 21:39:37 +1000319 }
320 Py_DECREF(value);
321 Py_DECREF(impmod);
322
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800323 err = _PyImportZip_Init();
324 if (_Py_INIT_FAILED(err)) {
325 return err;
326 }
327
328 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000329}
330
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800331static _PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700332initexternalimport(PyInterpreterState *interp)
333{
334 PyObject *value;
335 value = PyObject_CallMethod(interp->importlib,
336 "_install_external_importers", "");
337 if (value == NULL) {
338 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800339 return _Py_INIT_ERR("external importer setup failed");
Eric Snow1abcf672017-05-23 21:46:51 -0700340 }
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200341 Py_DECREF(value);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800342 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700343}
Nick Coghland6009512014-11-20 21:39:37 +1000344
Nick Coghlan6ea41862017-06-11 13:16:15 +1000345/* Helper functions to better handle the legacy C locale
346 *
347 * The legacy C locale assumes ASCII as the default text encoding, which
348 * causes problems not only for the CPython runtime, but also other
349 * components like GNU readline.
350 *
351 * Accordingly, when the CLI detects it, it attempts to coerce it to a
352 * more capable UTF-8 based alternative as follows:
353 *
354 * if (_Py_LegacyLocaleDetected()) {
355 * _Py_CoerceLegacyLocale();
356 * }
357 *
358 * See the documentation of the PYTHONCOERCECLOCALE setting for more details.
359 *
360 * Locale coercion also impacts the default error handler for the standard
361 * streams: while the usual default is "strict", the default for the legacy
362 * C locale and for any of the coercion target locales is "surrogateescape".
363 */
364
365int
366_Py_LegacyLocaleDetected(void)
367{
368#ifndef MS_WINDOWS
369 /* On non-Windows systems, the C locale is considered a legacy locale */
Nick Coghlaneb817952017-06-18 12:29:42 +1000370 /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat
371 * the POSIX locale as a simple alias for the C locale, so
372 * we may also want to check for that explicitly.
373 */
Nick Coghlan6ea41862017-06-11 13:16:15 +1000374 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
375 return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
376#else
377 /* Windows uses code pages instead of locales, so no locale is legacy */
378 return 0;
379#endif
380}
381
Nick Coghlaneb817952017-06-18 12:29:42 +1000382static const char *_C_LOCALE_WARNING =
383 "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
384 "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
385 "C.utf8, or UTF-8 (if available) as alternative Unicode-compatible "
386 "locales is recommended.\n";
387
388static int
389_legacy_locale_warnings_enabled(void)
390{
391 const char *coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
392 return (coerce_c_locale != NULL &&
393 strncmp(coerce_c_locale, "warn", 5) == 0);
394}
395
396static void
397_emit_stderr_warning_for_legacy_locale(void)
398{
399 if (_legacy_locale_warnings_enabled()) {
400 if (_Py_LegacyLocaleDetected()) {
401 fprintf(stderr, "%s", _C_LOCALE_WARNING);
402 }
403 }
404}
405
Nick Coghlan6ea41862017-06-11 13:16:15 +1000406typedef struct _CandidateLocale {
407 const char *locale_name; /* The locale to try as a coercion target */
408} _LocaleCoercionTarget;
409
410static _LocaleCoercionTarget _TARGET_LOCALES[] = {
411 {"C.UTF-8"},
412 {"C.utf8"},
Nick Coghlan18974c32017-06-30 00:48:14 +1000413 {"UTF-8"},
Nick Coghlan6ea41862017-06-11 13:16:15 +1000414 {NULL}
415};
416
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +0200417static const char *
Nick Coghlan6ea41862017-06-11 13:16:15 +1000418get_default_standard_stream_error_handler(void)
419{
420 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
421 if (ctype_loc != NULL) {
422 /* "surrogateescape" is the default in the legacy C locale */
423 if (strcmp(ctype_loc, "C") == 0) {
424 return "surrogateescape";
425 }
426
427#ifdef PY_COERCE_C_LOCALE
428 /* "surrogateescape" is the default in locale coercion target locales */
429 const _LocaleCoercionTarget *target = NULL;
430 for (target = _TARGET_LOCALES; target->locale_name; target++) {
431 if (strcmp(ctype_loc, target->locale_name) == 0) {
432 return "surrogateescape";
433 }
434 }
435#endif
436 }
437
438 /* Otherwise return NULL to request the typical default error handler */
439 return NULL;
440}
441
442#ifdef PY_COERCE_C_LOCALE
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +0200443static const char _C_LOCALE_COERCION_WARNING[] =
Nick Coghlan6ea41862017-06-11 13:16:15 +1000444 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale "
445 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n";
446
447static void
448_coerce_default_locale_settings(const _LocaleCoercionTarget *target)
449{
450 const char *newloc = target->locale_name;
451
452 /* Reset locale back to currently configured defaults */
xdegaye1588be62017-11-12 12:45:59 +0100453 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000454
455 /* Set the relevant locale environment variable */
456 if (setenv("LC_CTYPE", newloc, 1)) {
457 fprintf(stderr,
458 "Error setting LC_CTYPE, skipping C locale coercion\n");
459 return;
460 }
Nick Coghlaneb817952017-06-18 12:29:42 +1000461 if (_legacy_locale_warnings_enabled()) {
462 fprintf(stderr, _C_LOCALE_COERCION_WARNING, newloc);
463 }
Nick Coghlan6ea41862017-06-11 13:16:15 +1000464
465 /* Reconfigure with the overridden environment variables */
xdegaye1588be62017-11-12 12:45:59 +0100466 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000467}
468#endif
469
470void
471_Py_CoerceLegacyLocale(void)
472{
473#ifdef PY_COERCE_C_LOCALE
474 /* We ignore the Python -E and -I flags here, as the CLI needs to sort out
475 * the locale settings *before* we try to do anything with the command
476 * line arguments. For cross-platform debugging purposes, we also need
477 * to give end users a way to force even scripts that are otherwise
478 * isolated from their environment to use the legacy ASCII-centric C
479 * locale.
480 *
481 * Ignoring -E and -I is safe from a security perspective, as we only use
482 * the setting to turn *off* the implicit locale coercion, and anyone with
483 * access to the process environment already has the ability to set
484 * `LC_ALL=C` to override the C level locale settings anyway.
485 */
486 const char *coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
487 if (coerce_c_locale == NULL || strncmp(coerce_c_locale, "0", 2) != 0) {
488 /* PYTHONCOERCECLOCALE is not set, or is set to something other than "0" */
489 const char *locale_override = getenv("LC_ALL");
490 if (locale_override == NULL || *locale_override == '\0') {
491 /* LC_ALL is also not set (or is set to an empty string) */
492 const _LocaleCoercionTarget *target = NULL;
493 for (target = _TARGET_LOCALES; target->locale_name; target++) {
494 const char *new_locale = setlocale(LC_CTYPE,
495 target->locale_name);
496 if (new_locale != NULL) {
xdegaye1588be62017-11-12 12:45:59 +0100497#if !defined(__APPLE__) && !defined(__ANDROID__) && \
498 defined(HAVE_LANGINFO_H) && defined(CODESET)
Nick Coghlan18974c32017-06-30 00:48:14 +1000499 /* Also ensure that nl_langinfo works in this locale */
500 char *codeset = nl_langinfo(CODESET);
501 if (!codeset || *codeset == '\0') {
502 /* CODESET is not set or empty, so skip coercion */
503 new_locale = NULL;
xdegaye1588be62017-11-12 12:45:59 +0100504 _Py_SetLocaleFromEnv(LC_CTYPE);
Nick Coghlan18974c32017-06-30 00:48:14 +1000505 continue;
506 }
507#endif
Nick Coghlan6ea41862017-06-11 13:16:15 +1000508 /* Successfully configured locale, so make it the default */
509 _coerce_default_locale_settings(target);
510 return;
511 }
512 }
513 }
514 }
515 /* No C locale warning here, as Py_Initialize will emit one later */
516#endif
517}
518
xdegaye1588be62017-11-12 12:45:59 +0100519/* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to
520 * isolate the idiosyncrasies of different libc implementations. It reads the
521 * appropriate environment variable and uses its value to select the locale for
522 * 'category'. */
523char *
524_Py_SetLocaleFromEnv(int category)
525{
526#ifdef __ANDROID__
527 const char *locale;
528 const char **pvar;
529#ifdef PY_COERCE_C_LOCALE
530 const char *coerce_c_locale;
531#endif
532 const char *utf8_locale = "C.UTF-8";
533 const char *env_var_set[] = {
534 "LC_ALL",
535 "LC_CTYPE",
536 "LANG",
537 NULL,
538 };
539
540 /* Android setlocale(category, "") doesn't check the environment variables
541 * and incorrectly sets the "C" locale at API 24 and older APIs. We only
542 * check the environment variables listed in env_var_set. */
543 for (pvar=env_var_set; *pvar; pvar++) {
544 locale = getenv(*pvar);
545 if (locale != NULL && *locale != '\0') {
546 if (strcmp(locale, utf8_locale) == 0 ||
547 strcmp(locale, "en_US.UTF-8") == 0) {
548 return setlocale(category, utf8_locale);
549 }
550 return setlocale(category, "C");
551 }
552 }
553
554 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
555 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
556 * Quote from POSIX section "8.2 Internationalization Variables":
557 * "4. If the LANG environment variable is not set or is set to the empty
558 * string, the implementation-defined default locale shall be used." */
559
560#ifdef PY_COERCE_C_LOCALE
561 coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
562 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
563 /* Some other ported code may check the environment variables (e.g. in
564 * extension modules), so we make sure that they match the locale
565 * configuration */
566 if (setenv("LC_CTYPE", utf8_locale, 1)) {
567 fprintf(stderr, "Warning: failed setting the LC_CTYPE "
568 "environment variable to %s\n", utf8_locale);
569 }
570 }
571#endif
572 return setlocale(category, utf8_locale);
573#else /* __ANDROID__ */
574 return setlocale(category, "");
575#endif /* __ANDROID__ */
576}
577
Nick Coghlan6ea41862017-06-11 13:16:15 +1000578
Eric Snow1abcf672017-05-23 21:46:51 -0700579/* Global initializations. Can be undone by Py_Finalize(). Don't
580 call this twice without an intervening Py_Finalize() call.
581
582 Every call to Py_InitializeCore, Py_Initialize or Py_InitializeEx
583 must have a corresponding call to Py_Finalize.
584
585 Locking: you must hold the interpreter lock while calling these APIs.
586 (If the lock has not yet been initialized, that's equivalent to
587 having the lock, but you cannot use multiple threads.)
588
589*/
590
591/* Begin interpreter initialization
592 *
593 * On return, the first thread and interpreter state have been created,
594 * but the compiler, signal handling, multithreading and
595 * multiple interpreter support, and codec infrastructure are not yet
596 * available.
597 *
598 * The import system will support builtin and frozen modules only.
599 * The only supported io is writing to sys.stderr
600 *
601 * If any operation invoked by this function fails, a fatal error is
602 * issued and the function does not return.
603 *
604 * Any code invoked from this function should *not* assume it has access
605 * to the Python C API (unless the API is explicitly listed as being
606 * safe to call without calling Py_Initialize first)
607 */
608
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800609_PyInitError
610_Py_InitializeCore(const _PyCoreConfig *config)
Nick Coghland6009512014-11-20 21:39:37 +1000611{
612 PyInterpreterState *interp;
613 PyThreadState *tstate;
614 PyObject *bimod, *sysmod, *pstderr;
Eric Snow1abcf672017-05-23 21:46:51 -0700615 _PyCoreConfig core_config = _PyCoreConfig_INIT;
Eric Snowc7ec9982017-05-23 23:00:52 -0700616 _PyMainInterpreterConfig preinit_config = _PyMainInterpreterConfig_INIT;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800617 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +1000618
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800619 err = _PyRuntime_Initialize();
620 if (_Py_INIT_FAILED(err)) {
621 return err;
622 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600623
Eric Snow1abcf672017-05-23 21:46:51 -0700624 if (config != NULL) {
625 core_config = *config;
626 }
627
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800628 if (_PyMem_SetupAllocators(core_config.allocator) < 0) {
Victor Stinner5d39e042017-11-29 17:20:38 +0100629 return _Py_INIT_USER_ERR("Unknown PYTHONMALLOC allocator");
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800630 }
631
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600632 if (_PyRuntime.initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800633 return _Py_INIT_ERR("main interpreter already initialized");
Eric Snow1abcf672017-05-23 21:46:51 -0700634 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600635 if (_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800636 return _Py_INIT_ERR("runtime core already initialized");
Eric Snow1abcf672017-05-23 21:46:51 -0700637 }
638
639 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
640 * threads behave a little more gracefully at interpreter shutdown.
641 * We clobber it here so the new interpreter can start with a clean
642 * slate.
643 *
644 * However, this may still lead to misbehaviour if there are daemon
645 * threads still hanging around from a previous Py_Initialize/Finalize
646 * pair :(
647 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600648 _PyRuntime.finalizing = NULL;
649
Nick Coghlan6ea41862017-06-11 13:16:15 +1000650#ifndef MS_WINDOWS
Nick Coghland6009512014-11-20 21:39:37 +1000651 /* Set up the LC_CTYPE locale, so we can obtain
652 the locale's charset without having to switch
653 locales. */
xdegaye1588be62017-11-12 12:45:59 +0100654 _Py_SetLocaleFromEnv(LC_CTYPE);
Nick Coghlaneb817952017-06-18 12:29:42 +1000655 _emit_stderr_warning_for_legacy_locale();
Nick Coghlan6ea41862017-06-11 13:16:15 +1000656#endif
Nick Coghland6009512014-11-20 21:39:37 +1000657
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800658 err = _Py_HashRandomization_Init(&core_config);
659 if (_Py_INIT_FAILED(err)) {
660 return err;
661 }
662
Eric Snow1abcf672017-05-23 21:46:51 -0700663 if (!core_config.use_hash_seed || core_config.hash_seed) {
664 /* Random or non-zero hash seed */
665 Py_HashRandomizationFlag = 1;
666 }
Nick Coghland6009512014-11-20 21:39:37 +1000667
Victor Stinnera7368ac2017-11-15 18:11:45 -0800668 err = _PyInterpreterState_Enable(&_PyRuntime);
669 if (_Py_INIT_FAILED(err)) {
670 return err;
671 }
672
Nick Coghland6009512014-11-20 21:39:37 +1000673 interp = PyInterpreterState_New();
674 if (interp == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800675 return _Py_INIT_ERR("can't make main interpreter");
Eric Snow1abcf672017-05-23 21:46:51 -0700676 interp->core_config = core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700677 interp->config = preinit_config;
Nick Coghland6009512014-11-20 21:39:37 +1000678
679 tstate = PyThreadState_New(interp);
680 if (tstate == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800681 return _Py_INIT_ERR("can't make first thread");
Nick Coghland6009512014-11-20 21:39:37 +1000682 (void) PyThreadState_Swap(tstate);
683
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000684 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
Nick Coghland6009512014-11-20 21:39:37 +1000685 destroying the GIL might fail when it is being referenced from
686 another running thread (see issue #9901).
687 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000688 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Nick Coghland6009512014-11-20 21:39:37 +1000689 _PyEval_FiniThreads();
Nick Coghland6009512014-11-20 21:39:37 +1000690 /* Auto-thread-state API */
691 _PyGILState_Init(interp, tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000692
693 _Py_ReadyTypes();
694
695 if (!_PyFrame_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800696 return _Py_INIT_ERR("can't init frames");
Nick Coghland6009512014-11-20 21:39:37 +1000697
698 if (!_PyLong_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800699 return _Py_INIT_ERR("can't init longs");
Nick Coghland6009512014-11-20 21:39:37 +1000700
701 if (!PyByteArray_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800702 return _Py_INIT_ERR("can't init bytearray");
Nick Coghland6009512014-11-20 21:39:37 +1000703
704 if (!_PyFloat_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800705 return _Py_INIT_ERR("can't init float");
Nick Coghland6009512014-11-20 21:39:37 +1000706
Eric Snowd393c1b2017-09-14 12:18:12 -0600707 PyObject *modules = PyDict_New();
708 if (modules == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800709 return _Py_INIT_ERR("can't make modules dictionary");
Eric Snowd393c1b2017-09-14 12:18:12 -0600710 interp->modules = modules;
711
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800712 err = _PySys_BeginInit(&sysmod);
713 if (_Py_INIT_FAILED(err)) {
714 return err;
715 }
716
Eric Snowd393c1b2017-09-14 12:18:12 -0600717 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800718 if (interp->sysdict == NULL) {
719 return _Py_INIT_ERR("can't initialize sys dict");
720 }
721
Eric Snowd393c1b2017-09-14 12:18:12 -0600722 Py_INCREF(interp->sysdict);
723 PyDict_SetItemString(interp->sysdict, "modules", modules);
724 _PyImport_FixupBuiltin(sysmod, "sys", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000725
726 /* Init Unicode implementation; relies on the codec registry */
727 if (_PyUnicode_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800728 return _Py_INIT_ERR("can't initialize unicode");
Eric Snow1abcf672017-05-23 21:46:51 -0700729
Nick Coghland6009512014-11-20 21:39:37 +1000730 if (_PyStructSequence_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800731 return _Py_INIT_ERR("can't initialize structseq");
Nick Coghland6009512014-11-20 21:39:37 +1000732
733 bimod = _PyBuiltin_Init();
734 if (bimod == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800735 return _Py_INIT_ERR("can't initialize builtins modules");
Eric Snowd393c1b2017-09-14 12:18:12 -0600736 _PyImport_FixupBuiltin(bimod, "builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000737 interp->builtins = PyModule_GetDict(bimod);
738 if (interp->builtins == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800739 return _Py_INIT_ERR("can't initialize builtins dict");
Nick Coghland6009512014-11-20 21:39:37 +1000740 Py_INCREF(interp->builtins);
741
742 /* initialize builtin exceptions */
743 _PyExc_Init(bimod);
744
Nick Coghland6009512014-11-20 21:39:37 +1000745 /* Set up a preliminary stderr printer until we have enough
746 infrastructure for the io module in place. */
747 pstderr = PyFile_NewStdPrinter(fileno(stderr));
748 if (pstderr == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800749 return _Py_INIT_ERR("can't set preliminary stderr");
Nick Coghland6009512014-11-20 21:39:37 +1000750 _PySys_SetObjectId(&PyId_stderr, pstderr);
751 PySys_SetObject("__stderr__", pstderr);
752 Py_DECREF(pstderr);
753
Victor Stinner672b6ba2017-12-06 17:25:50 +0100754 err = _PyImport_Init(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800755 if (_Py_INIT_FAILED(err)) {
756 return err;
757 }
Nick Coghland6009512014-11-20 21:39:37 +1000758
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800759 err = _PyImportHooks_Init();
760 if (_Py_INIT_FAILED(err)) {
761 return err;
762 }
Nick Coghland6009512014-11-20 21:39:37 +1000763
764 /* Initialize _warnings. */
Victor Stinner1f151112017-11-23 10:43:14 +0100765 if (_PyWarnings_InitWithConfig(&interp->core_config) == NULL) {
766 return _Py_INIT_ERR("can't initialize warnings");
767 }
Nick Coghland6009512014-11-20 21:39:37 +1000768
Eric Snow1abcf672017-05-23 21:46:51 -0700769 /* This call sets up builtin and frozen import support */
770 if (!interp->core_config._disable_importlib) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800771 err = initimport(interp, sysmod);
772 if (_Py_INIT_FAILED(err)) {
773 return err;
774 }
Eric Snow1abcf672017-05-23 21:46:51 -0700775 }
776
777 /* Only when we get here is the runtime core fully initialized */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600778 _PyRuntime.core_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800779 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700780}
781
Eric Snowc7ec9982017-05-23 23:00:52 -0700782/* Read configuration settings from standard locations
783 *
784 * This function doesn't make any changes to the interpreter state - it
785 * merely populates any missing configuration settings. This allows an
786 * embedding application to completely override a config option by
787 * setting it before calling this function, or else modify the default
788 * setting before passing the fully populated config to Py_EndInitialization.
789 *
790 * More advanced selective initialization tricks are possible by calling
791 * this function multiple times with various preconfigured settings.
792 */
793
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800794_PyInitError
Victor Stinner46972b72017-11-24 22:55:40 +0100795_PyMainInterpreterConfig_Read(_PyMainInterpreterConfig *config)
Eric Snowc7ec9982017-05-23 23:00:52 -0700796{
797 /* Signal handlers are installed by default */
798 if (config->install_signal_handlers < 0) {
799 config->install_signal_handlers = 1;
800 }
Victor Stinnerf04ebe22017-11-25 00:01:23 +0100801
802 if (config->program_name == NULL) {
Victor Stinner31a83932017-12-04 13:39:15 +0100803#ifdef MS_WINDOWS
804 const wchar_t *program_name = L"python";
805#else
806 const wchar_t *program_name = L"python3";
807#endif
808 config->program_name = _PyMem_RawWcsdup(program_name);
Victor Stinnerf04ebe22017-11-25 00:01:23 +0100809 if (config->program_name == NULL) {
810 return _Py_INIT_NO_MEMORY();
811 }
812 }
813
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800814 return _Py_INIT_OK();
Eric Snowc7ec9982017-05-23 23:00:52 -0700815}
816
Victor Stinner46972b72017-11-24 22:55:40 +0100817
818void
819_PyMainInterpreterConfig_Clear(_PyMainInterpreterConfig *config)
820{
Victor Stinnerf04ebe22017-11-25 00:01:23 +0100821#define CLEAR(ATTR) \
822 do { \
823 PyMem_RawFree(ATTR); \
824 ATTR = NULL; \
825 } while (0)
826
827 CLEAR(config->module_search_path_env);
828 CLEAR(config->home);
829 CLEAR(config->program_name);
830#undef CLEAR
Victor Stinner46972b72017-11-24 22:55:40 +0100831}
832
833
Eric Snowc7ec9982017-05-23 23:00:52 -0700834/* Update interpreter state based on supplied configuration settings
835 *
836 * After calling this function, most of the restrictions on the interpreter
837 * are lifted. The only remaining incomplete settings are those related
838 * to the main module (sys.argv[0], __main__ metadata)
839 *
840 * Calling this when the interpreter is not initializing, is already
841 * initialized or without a valid current thread state is a fatal error.
842 * Other errors should be reported as normal Python exceptions with a
843 * non-zero return code.
844 */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800845_PyInitError
846_Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -0700847{
848 PyInterpreterState *interp;
849 PyThreadState *tstate;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800850 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700851
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600852 if (!_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800853 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700854 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600855 if (_PyRuntime.initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800856 return _Py_INIT_ERR("main interpreter already initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700857 }
858
Eric Snow1abcf672017-05-23 21:46:51 -0700859 /* Get current thread state and interpreter pointer */
860 tstate = PyThreadState_GET();
861 if (!tstate)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800862 return _Py_INIT_ERR("failed to read thread state");
Eric Snow1abcf672017-05-23 21:46:51 -0700863 interp = tstate->interp;
864 if (!interp)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800865 return _Py_INIT_ERR("failed to get interpreter");
Eric Snow1abcf672017-05-23 21:46:51 -0700866
867 /* Now finish configuring the main interpreter */
Eric Snowc7ec9982017-05-23 23:00:52 -0700868 interp->config = *config;
869
Eric Snow1abcf672017-05-23 21:46:51 -0700870 if (interp->core_config._disable_importlib) {
871 /* Special mode for freeze_importlib: run with no import system
872 *
873 * This means anything which needs support from extension modules
874 * or pure Python code in the standard library won't work.
875 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600876 _PyRuntime.initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800877 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700878 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100879
Victor Stinner33c377e2017-12-05 15:12:41 +0100880 if (_PyTime_Init() < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800881 return _Py_INIT_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100882 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200883
Victor Stinner9316ee42017-11-25 03:17:57 +0100884 /* GetPath may initialize state that _PySys_EndInit locks
885 in, and so has to be called first. */
886 err = _PyPathConfig_Init(&interp->config);
887 if (_Py_INIT_FAILED(err)) {
888 return err;
889 }
890 wchar_t *sys_path = Py_GetPath();
891
Eric Snow1abcf672017-05-23 21:46:51 -0700892 /* Finish setting up the sys module and import system */
Victor Stinnerd4341102017-11-23 00:12:09 +0100893 PySys_SetPath(sys_path);
Eric Snow1abcf672017-05-23 21:46:51 -0700894 if (_PySys_EndInit(interp->sysdict) < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800895 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnera7368ac2017-11-15 18:11:45 -0800896
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800897 err = initexternalimport(interp);
898 if (_Py_INIT_FAILED(err)) {
899 return err;
900 }
Nick Coghland6009512014-11-20 21:39:37 +1000901
902 /* initialize the faulthandler module */
Victor Stinnera7368ac2017-11-15 18:11:45 -0800903 err = _PyFaulthandler_Init(interp->core_config.faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800904 if (_Py_INIT_FAILED(err)) {
905 return err;
906 }
Nick Coghland6009512014-11-20 21:39:37 +1000907
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800908 err = initfsencoding(interp);
909 if (_Py_INIT_FAILED(err)) {
910 return err;
911 }
Nick Coghland6009512014-11-20 21:39:37 +1000912
Victor Stinner1f151112017-11-23 10:43:14 +0100913 if (interp->config.install_signal_handlers) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800914 err = initsigs(); /* Signal handling stuff, including initintr() */
915 if (_Py_INIT_FAILED(err)) {
916 return err;
917 }
918 }
Nick Coghland6009512014-11-20 21:39:37 +1000919
Victor Stinnera7368ac2017-11-15 18:11:45 -0800920 if (_PyTraceMalloc_Init(interp->core_config.tracemalloc) < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800921 return _Py_INIT_ERR("can't initialize tracemalloc");
Nick Coghland6009512014-11-20 21:39:37 +1000922
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800923 err = add_main_module(interp);
924 if (_Py_INIT_FAILED(err)) {
925 return err;
926 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800927
Victor Stinner91106cd2017-12-13 12:29:09 +0100928 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -0800929 if (_Py_INIT_FAILED(err)) {
930 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800931 }
Nick Coghland6009512014-11-20 21:39:37 +1000932
933 /* Initialize warnings. */
934 if (PySys_HasWarnOptions()) {
935 PyObject *warnings_module = PyImport_ImportModule("warnings");
936 if (warnings_module == NULL) {
937 fprintf(stderr, "'import warnings' failed; traceback:\n");
938 PyErr_Print();
939 }
940 Py_XDECREF(warnings_module);
941 }
942
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600943 _PyRuntime.initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700944
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800945 if (!Py_NoSiteFlag) {
946 err = initsite(); /* Module site */
947 if (_Py_INIT_FAILED(err)) {
948 return err;
949 }
950 }
Eric Snow1abcf672017-05-23 21:46:51 -0700951
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800952 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000953}
954
Eric Snowc7ec9982017-05-23 23:00:52 -0700955#undef _INIT_DEBUG_PRINT
956
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800957_PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700958_Py_InitializeEx_Private(int install_sigs, int install_importlib)
959{
960 _PyCoreConfig core_config = _PyCoreConfig_INIT;
Eric Snowc7ec9982017-05-23 23:00:52 -0700961 _PyMainInterpreterConfig config = _PyMainInterpreterConfig_INIT;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800962 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700963
Eric Snow1abcf672017-05-23 21:46:51 -0700964 core_config.ignore_environment = Py_IgnoreEnvironmentFlag;
965 core_config._disable_importlib = !install_importlib;
Eric Snowc7ec9982017-05-23 23:00:52 -0700966 config.install_signal_handlers = install_sigs;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800967
968 err = _Py_InitializeCore(&core_config);
969 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100970 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800971 }
972
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100973 err = _PyMainInterpreterConfig_ReadEnv(&config);
974 if (_Py_INIT_FAILED(err)) {
975 goto done;
976 }
977
Victor Stinner46972b72017-11-24 22:55:40 +0100978 err = _PyMainInterpreterConfig_Read(&config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800979 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100980 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800981 }
982
983 err = _Py_InitializeMainInterpreter(&config);
984 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100985 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800986 }
987
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100988 err = _Py_INIT_OK();
989
990done:
991 _PyMainInterpreterConfig_Clear(&config);
992 return err;
Eric Snow1abcf672017-05-23 21:46:51 -0700993}
994
995
996void
Nick Coghland6009512014-11-20 21:39:37 +1000997Py_InitializeEx(int install_sigs)
998{
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800999 _PyInitError err = _Py_InitializeEx_Private(install_sigs, 1);
1000 if (_Py_INIT_FAILED(err)) {
1001 _Py_FatalInitError(err);
1002 }
Nick Coghland6009512014-11-20 21:39:37 +10001003}
1004
1005void
1006Py_Initialize(void)
1007{
1008 Py_InitializeEx(1);
1009}
1010
1011
1012#ifdef COUNT_ALLOCS
1013extern void dump_counts(FILE*);
1014#endif
1015
1016/* Flush stdout and stderr */
1017
1018static int
1019file_is_closed(PyObject *fobj)
1020{
1021 int r;
1022 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1023 if (tmp == NULL) {
1024 PyErr_Clear();
1025 return 0;
1026 }
1027 r = PyObject_IsTrue(tmp);
1028 Py_DECREF(tmp);
1029 if (r < 0)
1030 PyErr_Clear();
1031 return r > 0;
1032}
1033
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001034static int
Nick Coghland6009512014-11-20 21:39:37 +10001035flush_std_files(void)
1036{
1037 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1038 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1039 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001040 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001041
1042 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001043 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001044 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001045 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001046 status = -1;
1047 }
Nick Coghland6009512014-11-20 21:39:37 +10001048 else
1049 Py_DECREF(tmp);
1050 }
1051
1052 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001053 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001054 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001055 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001056 status = -1;
1057 }
Nick Coghland6009512014-11-20 21:39:37 +10001058 else
1059 Py_DECREF(tmp);
1060 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001061
1062 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001063}
1064
1065/* Undo the effect of Py_Initialize().
1066
1067 Beware: if multiple interpreter and/or thread states exist, these
1068 are not wiped out; only the current thread and interpreter state
1069 are deleted. But since everything else is deleted, those other
1070 interpreter and thread states should no longer be used.
1071
1072 (XXX We should do better, e.g. wipe out all interpreters and
1073 threads.)
1074
1075 Locking: as above.
1076
1077*/
1078
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001079int
1080Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001081{
1082 PyInterpreterState *interp;
1083 PyThreadState *tstate;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001084 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001085
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001086 if (!_PyRuntime.initialized)
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001087 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001088
1089 wait_for_thread_shutdown();
1090
1091 /* The interpreter is still entirely intact at this point, and the
1092 * exit funcs may be relying on that. In particular, if some thread
1093 * or exit func is still waiting to do an import, the import machinery
1094 * expects Py_IsInitialized() to return true. So don't say the
1095 * interpreter is uninitialized until after the exit funcs have run.
1096 * Note that Threading.py uses an exit func to do a join on all the
1097 * threads created thru it, so this also protects pending imports in
1098 * the threads created via Threading.
1099 */
1100 call_py_exitfuncs();
1101
1102 /* Get current thread state and interpreter pointer */
1103 tstate = PyThreadState_GET();
1104 interp = tstate->interp;
1105
Victor Stinner6bf992a2017-12-06 17:26:10 +01001106 /* Copy the core config to be able to use it even
1107 after PyInterpreterState_Delete() */
1108 _PyCoreConfig core_config = interp->core_config;
1109
Nick Coghland6009512014-11-20 21:39:37 +10001110 /* Remaining threads (e.g. daemon threads) will automatically exit
1111 after taking the GIL (in PyEval_RestoreThread()). */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001112 _PyRuntime.finalizing = tstate;
1113 _PyRuntime.initialized = 0;
1114 _PyRuntime.core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001115
Victor Stinnere0deff32015-03-24 13:46:18 +01001116 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001117 if (flush_std_files() < 0) {
1118 status = -1;
1119 }
Nick Coghland6009512014-11-20 21:39:37 +10001120
1121 /* Disable signal handling */
1122 PyOS_FiniInterrupts();
1123
1124 /* Collect garbage. This may call finalizers; it's nice to call these
1125 * before all modules are destroyed.
1126 * XXX If a __del__ or weakref callback is triggered here, and tries to
1127 * XXX import a module, bad things can happen, because Python no
1128 * XXX longer believes it's initialized.
1129 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1130 * XXX is easy to provoke that way. I've also seen, e.g.,
1131 * XXX Exception exceptions.ImportError: 'No module named sha'
1132 * XXX in <function callback at 0x008F5718> ignored
1133 * XXX but I'm unclear on exactly how that one happens. In any case,
1134 * XXX I haven't seen a real-life report of either of these.
1135 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001136 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001137#ifdef COUNT_ALLOCS
1138 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1139 each collection might release some types from the type
1140 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001141 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001142 /* nothing */;
1143#endif
Eric Snowdae02762017-09-14 00:35:58 -07001144
Nick Coghland6009512014-11-20 21:39:37 +10001145 /* Destroy all modules */
1146 PyImport_Cleanup();
1147
Victor Stinnere0deff32015-03-24 13:46:18 +01001148 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001149 if (flush_std_files() < 0) {
1150 status = -1;
1151 }
Nick Coghland6009512014-11-20 21:39:37 +10001152
1153 /* Collect final garbage. This disposes of cycles created by
1154 * class definitions, for example.
1155 * XXX This is disabled because it caused too many problems. If
1156 * XXX a __del__ or weakref callback triggers here, Python code has
1157 * XXX a hard time running, because even the sys module has been
1158 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1159 * XXX One symptom is a sequence of information-free messages
1160 * XXX coming from threads (if a __del__ or callback is invoked,
1161 * XXX other threads can execute too, and any exception they encounter
1162 * XXX triggers a comedy of errors as subsystem after subsystem
1163 * XXX fails to find what it *expects* to find in sys to help report
1164 * XXX the exception and consequent unexpected failures). I've also
1165 * XXX seen segfaults then, after adding print statements to the
1166 * XXX Python code getting called.
1167 */
1168#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001169 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001170#endif
1171
1172 /* Disable tracemalloc after all Python objects have been destroyed,
1173 so it is possible to use tracemalloc in objects destructor. */
1174 _PyTraceMalloc_Fini();
1175
1176 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1177 _PyImport_Fini();
1178
1179 /* Cleanup typeobject.c's internal caches. */
1180 _PyType_Fini();
1181
1182 /* unload faulthandler module */
1183 _PyFaulthandler_Fini();
1184
1185 /* Debugging stuff */
1186#ifdef COUNT_ALLOCS
Serhiy Storchaka7e160ce2016-07-03 21:03:53 +03001187 dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001188#endif
1189 /* dump hash stats */
1190 _PyHash_Fini();
1191
Eric Snowdae02762017-09-14 00:35:58 -07001192#ifdef Py_REF_DEBUG
Victor Stinner6bf992a2017-12-06 17:26:10 +01001193 if (core_config.show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001194 _PyDebug_PrintTotalRefs();
1195 }
Eric Snowdae02762017-09-14 00:35:58 -07001196#endif
Nick Coghland6009512014-11-20 21:39:37 +10001197
1198#ifdef Py_TRACE_REFS
1199 /* Display all objects still alive -- this can invoke arbitrary
1200 * __repr__ overrides, so requires a mostly-intact interpreter.
1201 * Alas, a lot of stuff may still be alive now that will be cleaned
1202 * up later.
1203 */
Victor Stinner6bf992a2017-12-06 17:26:10 +01001204 if (core_config.dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001205 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001206 }
Nick Coghland6009512014-11-20 21:39:37 +10001207#endif /* Py_TRACE_REFS */
1208
1209 /* Clear interpreter state and all thread states. */
1210 PyInterpreterState_Clear(interp);
1211
1212 /* Now we decref the exception classes. After this point nothing
1213 can raise an exception. That's okay, because each Fini() method
1214 below has been checked to make sure no exceptions are ever
1215 raised.
1216 */
1217
1218 _PyExc_Fini();
1219
1220 /* Sundry finalizers */
1221 PyMethod_Fini();
1222 PyFrame_Fini();
1223 PyCFunction_Fini();
1224 PyTuple_Fini();
1225 PyList_Fini();
1226 PySet_Fini();
1227 PyBytes_Fini();
1228 PyByteArray_Fini();
1229 PyLong_Fini();
1230 PyFloat_Fini();
1231 PyDict_Fini();
1232 PySlice_Fini();
1233 _PyGC_Fini();
Eric Snow6b4be192017-05-22 21:36:03 -07001234 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001235 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001236 PyAsyncGen_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001237
1238 /* Cleanup Unicode implementation */
1239 _PyUnicode_Fini();
1240
1241 /* reset file system default encoding */
1242 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
1243 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
1244 Py_FileSystemDefaultEncoding = NULL;
1245 }
1246
1247 /* XXX Still allocated:
1248 - various static ad-hoc pointers to interned strings
1249 - int and float free list blocks
1250 - whatever various modules and libraries allocate
1251 */
1252
1253 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1254
1255 /* Cleanup auto-thread-state */
Nick Coghland6009512014-11-20 21:39:37 +10001256 _PyGILState_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001257
1258 /* Delete current thread. After this, many C API calls become crashy. */
1259 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001260
Nick Coghland6009512014-11-20 21:39:37 +10001261 PyInterpreterState_Delete(interp);
1262
1263#ifdef Py_TRACE_REFS
1264 /* Display addresses (& refcnts) of all objects still alive.
1265 * An address can be used to find the repr of the object, printed
1266 * above by _Py_PrintReferences.
1267 */
Victor Stinner6bf992a2017-12-06 17:26:10 +01001268 if (core_config.dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001269 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001270 }
Nick Coghland6009512014-11-20 21:39:37 +10001271#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001272#ifdef WITH_PYMALLOC
Victor Stinner6bf992a2017-12-06 17:26:10 +01001273 if (core_config.malloc_stats) {
1274 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be8072016-03-14 12:04:26 +01001275 }
Nick Coghland6009512014-11-20 21:39:37 +10001276#endif
1277
1278 call_ll_exitfuncs();
Victor Stinner9316ee42017-11-25 03:17:57 +01001279
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001280 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001281 return status;
1282}
1283
1284void
1285Py_Finalize(void)
1286{
1287 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001288}
1289
1290/* Create and initialize a new interpreter and thread, and return the
1291 new thread. This requires that Py_Initialize() has been called
1292 first.
1293
1294 Unsuccessful initialization yields a NULL pointer. Note that *no*
1295 exception information is available even in this case -- the
1296 exception information is held in the thread, and there is no
1297 thread.
1298
1299 Locking: as above.
1300
1301*/
1302
Victor Stinnera7368ac2017-11-15 18:11:45 -08001303static _PyInitError
1304new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001305{
1306 PyInterpreterState *interp;
1307 PyThreadState *tstate, *save_tstate;
1308 PyObject *bimod, *sysmod;
Victor Stinner9316ee42017-11-25 03:17:57 +01001309 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001310
Victor Stinnera7368ac2017-11-15 18:11:45 -08001311 if (!_PyRuntime.initialized) {
1312 return _Py_INIT_ERR("Py_Initialize must be called first");
1313 }
Nick Coghland6009512014-11-20 21:39:37 +10001314
Victor Stinner8a1be612016-03-14 22:07:55 +01001315 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1316 interpreters: disable PyGILState_Check(). */
1317 _PyGILState_check_enabled = 0;
1318
Nick Coghland6009512014-11-20 21:39:37 +10001319 interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001320 if (interp == NULL) {
1321 *tstate_p = NULL;
1322 return _Py_INIT_OK();
1323 }
Nick Coghland6009512014-11-20 21:39:37 +10001324
1325 tstate = PyThreadState_New(interp);
1326 if (tstate == NULL) {
1327 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001328 *tstate_p = NULL;
1329 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001330 }
1331
1332 save_tstate = PyThreadState_Swap(tstate);
1333
Eric Snow1abcf672017-05-23 21:46:51 -07001334 /* Copy the current interpreter config into the new interpreter */
1335 if (save_tstate != NULL) {
1336 interp->core_config = save_tstate->interp->core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -07001337 interp->config = save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001338 } else {
1339 /* No current thread state, copy from the main interpreter */
1340 PyInterpreterState *main_interp = PyInterpreterState_Main();
1341 interp->core_config = main_interp->core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -07001342 interp->config = main_interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001343 }
1344
Victor Stinner9316ee42017-11-25 03:17:57 +01001345 err = _PyPathConfig_Init(&interp->config);
1346 if (_Py_INIT_FAILED(err)) {
1347 return err;
1348 }
1349 wchar_t *sys_path = Py_GetPath();
1350
Nick Coghland6009512014-11-20 21:39:37 +10001351 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001352 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001353 if (modules == NULL) {
1354 return _Py_INIT_ERR("can't make modules dictionary");
1355 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001356 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001357
Eric Snowd393c1b2017-09-14 12:18:12 -06001358 sysmod = _PyImport_FindBuiltin("sys", modules);
1359 if (sysmod != NULL) {
1360 interp->sysdict = PyModule_GetDict(sysmod);
1361 if (interp->sysdict == NULL)
1362 goto handle_error;
1363 Py_INCREF(interp->sysdict);
1364 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinnerd4341102017-11-23 00:12:09 +01001365 PySys_SetPath(sys_path);
Eric Snowd393c1b2017-09-14 12:18:12 -06001366 _PySys_EndInit(interp->sysdict);
1367 }
1368
1369 bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001370 if (bimod != NULL) {
1371 interp->builtins = PyModule_GetDict(bimod);
1372 if (interp->builtins == NULL)
1373 goto handle_error;
1374 Py_INCREF(interp->builtins);
1375 }
1376
1377 /* initialize builtin exceptions */
1378 _PyExc_Init(bimod);
1379
Nick Coghland6009512014-11-20 21:39:37 +10001380 if (bimod != NULL && sysmod != NULL) {
1381 PyObject *pstderr;
1382
Nick Coghland6009512014-11-20 21:39:37 +10001383 /* Set up a preliminary stderr printer until we have enough
1384 infrastructure for the io module in place. */
1385 pstderr = PyFile_NewStdPrinter(fileno(stderr));
Victor Stinnera7368ac2017-11-15 18:11:45 -08001386 if (pstderr == NULL) {
1387 return _Py_INIT_ERR("can't set preliminary stderr");
1388 }
Nick Coghland6009512014-11-20 21:39:37 +10001389 _PySys_SetObjectId(&PyId_stderr, pstderr);
1390 PySys_SetObject("__stderr__", pstderr);
1391 Py_DECREF(pstderr);
1392
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001393 err = _PyImportHooks_Init();
1394 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001395 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001396 }
Nick Coghland6009512014-11-20 21:39:37 +10001397
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001398 err = initimport(interp, sysmod);
1399 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001400 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001401 }
Nick Coghland6009512014-11-20 21:39:37 +10001402
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001403 err = initexternalimport(interp);
1404 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001405 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001406 }
Nick Coghland6009512014-11-20 21:39:37 +10001407
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001408 err = initfsencoding(interp);
1409 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001410 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001411 }
1412
Victor Stinner91106cd2017-12-13 12:29:09 +01001413 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001414 if (_Py_INIT_FAILED(err)) {
1415 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001416 }
1417
1418 err = add_main_module(interp);
1419 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001420 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001421 }
1422
1423 if (!Py_NoSiteFlag) {
1424 err = initsite();
1425 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001426 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001427 }
1428 }
Nick Coghland6009512014-11-20 21:39:37 +10001429 }
1430
Victor Stinnera7368ac2017-11-15 18:11:45 -08001431 if (PyErr_Occurred()) {
1432 goto handle_error;
1433 }
Nick Coghland6009512014-11-20 21:39:37 +10001434
Victor Stinnera7368ac2017-11-15 18:11:45 -08001435 *tstate_p = tstate;
1436 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001437
Nick Coghland6009512014-11-20 21:39:37 +10001438handle_error:
1439 /* Oops, it didn't work. Undo it all. */
1440
1441 PyErr_PrintEx(0);
1442 PyThreadState_Clear(tstate);
1443 PyThreadState_Swap(save_tstate);
1444 PyThreadState_Delete(tstate);
1445 PyInterpreterState_Delete(interp);
1446
Victor Stinnera7368ac2017-11-15 18:11:45 -08001447 *tstate_p = NULL;
1448 return _Py_INIT_OK();
1449}
1450
1451PyThreadState *
1452Py_NewInterpreter(void)
1453{
1454 PyThreadState *tstate;
1455 _PyInitError err = new_interpreter(&tstate);
1456 if (_Py_INIT_FAILED(err)) {
1457 _Py_FatalInitError(err);
1458 }
1459 return tstate;
1460
Nick Coghland6009512014-11-20 21:39:37 +10001461}
1462
1463/* Delete an interpreter and its last thread. This requires that the
1464 given thread state is current, that the thread has no remaining
1465 frames, and that it is its interpreter's only remaining thread.
1466 It is a fatal error to violate these constraints.
1467
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001468 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001469 everything, regardless.)
1470
1471 Locking: as above.
1472
1473*/
1474
1475void
1476Py_EndInterpreter(PyThreadState *tstate)
1477{
1478 PyInterpreterState *interp = tstate->interp;
1479
1480 if (tstate != PyThreadState_GET())
1481 Py_FatalError("Py_EndInterpreter: thread is not current");
1482 if (tstate->frame != NULL)
1483 Py_FatalError("Py_EndInterpreter: thread still has a frame");
1484
1485 wait_for_thread_shutdown();
1486
1487 if (tstate != interp->tstate_head || tstate->next != NULL)
1488 Py_FatalError("Py_EndInterpreter: not the last thread");
1489
1490 PyImport_Cleanup();
1491 PyInterpreterState_Clear(interp);
1492 PyThreadState_Swap(NULL);
1493 PyInterpreterState_Delete(interp);
1494}
1495
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001496/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001497
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001498static _PyInitError
1499add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001500{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001501 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001502 m = PyImport_AddModule("__main__");
1503 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001504 return _Py_INIT_ERR("can't create __main__ module");
1505
Nick Coghland6009512014-11-20 21:39:37 +10001506 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001507 ann_dict = PyDict_New();
1508 if ((ann_dict == NULL) ||
1509 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001510 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001511 }
1512 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001513
Nick Coghland6009512014-11-20 21:39:37 +10001514 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1515 PyObject *bimod = PyImport_ImportModule("builtins");
1516 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001517 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001518 }
1519 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001520 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001521 }
1522 Py_DECREF(bimod);
1523 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001524
Nick Coghland6009512014-11-20 21:39:37 +10001525 /* Main is a little special - imp.is_builtin("__main__") will return
1526 * False, but BuiltinImporter is still the most appropriate initial
1527 * setting for its __loader__ attribute. A more suitable value will
1528 * be set if __main__ gets further initialized later in the startup
1529 * process.
1530 */
1531 loader = PyDict_GetItemString(d, "__loader__");
1532 if (loader == NULL || loader == Py_None) {
1533 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1534 "BuiltinImporter");
1535 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001536 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001537 }
1538 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001539 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001540 }
1541 Py_DECREF(loader);
1542 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001543 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001544}
1545
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001546static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001547initfsencoding(PyInterpreterState *interp)
1548{
1549 PyObject *codec;
1550
Steve Dowercc16be82016-09-08 10:35:16 -07001551#ifdef MS_WINDOWS
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001552 if (Py_LegacyWindowsFSEncodingFlag) {
Steve Dowercc16be82016-09-08 10:35:16 -07001553 Py_FileSystemDefaultEncoding = "mbcs";
1554 Py_FileSystemDefaultEncodeErrors = "replace";
1555 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001556 else {
Steve Dowercc16be82016-09-08 10:35:16 -07001557 Py_FileSystemDefaultEncoding = "utf-8";
1558 Py_FileSystemDefaultEncodeErrors = "surrogatepass";
1559 }
1560#else
Victor Stinner91106cd2017-12-13 12:29:09 +01001561 if (Py_FileSystemDefaultEncoding == NULL &&
1562 interp->core_config.utf8_mode)
1563 {
1564 Py_FileSystemDefaultEncoding = "utf-8";
1565 Py_HasFileSystemDefaultEncoding = 1;
1566 }
1567 else if (Py_FileSystemDefaultEncoding == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001568 Py_FileSystemDefaultEncoding = get_locale_encoding();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001569 if (Py_FileSystemDefaultEncoding == NULL) {
1570 return _Py_INIT_ERR("Unable to get the locale encoding");
1571 }
Nick Coghland6009512014-11-20 21:39:37 +10001572
1573 Py_HasFileSystemDefaultEncoding = 0;
1574 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001575 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001576 }
Steve Dowercc16be82016-09-08 10:35:16 -07001577#endif
Nick Coghland6009512014-11-20 21:39:37 +10001578
1579 /* the encoding is mbcs, utf-8 or ascii */
1580 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
1581 if (!codec) {
1582 /* Such error can only occurs in critical situations: no more
1583 * memory, import a module of the standard library failed,
1584 * etc. */
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001585 return _Py_INIT_ERR("unable to load the file system codec");
Nick Coghland6009512014-11-20 21:39:37 +10001586 }
1587 Py_DECREF(codec);
1588 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001589 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001590}
1591
1592/* Import the site module (not into __main__ though) */
1593
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001594static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001595initsite(void)
1596{
1597 PyObject *m;
1598 m = PyImport_ImportModule("site");
1599 if (m == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001600 return _Py_INIT_USER_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001601 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001602 Py_DECREF(m);
1603 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001604}
1605
Victor Stinner874dbe82015-09-04 17:29:57 +02001606/* Check if a file descriptor is valid or not.
1607 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1608static int
1609is_valid_fd(int fd)
1610{
Victor Stinner1c4670e2017-05-04 00:45:56 +02001611#ifdef __APPLE__
1612 /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe
1613 and the other side of the pipe is closed, dup(1) succeed, whereas
1614 fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect
1615 such error. */
1616 struct stat st;
1617 return (fstat(fd, &st) == 0);
1618#else
Victor Stinner874dbe82015-09-04 17:29:57 +02001619 int fd2;
Steve Dower940f33a2016-09-08 11:21:54 -07001620 if (fd < 0)
Victor Stinner874dbe82015-09-04 17:29:57 +02001621 return 0;
1622 _Py_BEGIN_SUPPRESS_IPH
Victor Stinner449b2712015-09-29 13:59:50 +02001623 /* Prefer dup() over fstat(). fstat() can require input/output whereas
1624 dup() doesn't, there is a low risk of EMFILE/ENFILE at Python
1625 startup. */
Victor Stinner874dbe82015-09-04 17:29:57 +02001626 fd2 = dup(fd);
1627 if (fd2 >= 0)
1628 close(fd2);
1629 _Py_END_SUPPRESS_IPH
1630 return fd2 >= 0;
Victor Stinner1c4670e2017-05-04 00:45:56 +02001631#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001632}
1633
1634/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001635static PyObject*
1636create_stdio(PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001637 int fd, int write_mode, const char* name,
1638 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001639{
1640 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1641 const char* mode;
1642 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001643 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001644 int buffering, isatty;
1645 _Py_IDENTIFIER(open);
1646 _Py_IDENTIFIER(isatty);
1647 _Py_IDENTIFIER(TextIOWrapper);
1648 _Py_IDENTIFIER(mode);
1649
Victor Stinner874dbe82015-09-04 17:29:57 +02001650 if (!is_valid_fd(fd))
1651 Py_RETURN_NONE;
1652
Nick Coghland6009512014-11-20 21:39:37 +10001653 /* stdin is always opened in buffered mode, first because it shouldn't
1654 make a difference in common use cases, second because TextIOWrapper
1655 depends on the presence of a read1() method which only exists on
1656 buffered streams.
1657 */
1658 if (Py_UnbufferedStdioFlag && write_mode)
1659 buffering = 0;
1660 else
1661 buffering = -1;
1662 if (write_mode)
1663 mode = "wb";
1664 else
1665 mode = "rb";
1666 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1667 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001668 Py_None, Py_None, /* encoding, errors */
1669 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001670 if (buf == NULL)
1671 goto error;
1672
1673 if (buffering) {
1674 _Py_IDENTIFIER(raw);
1675 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1676 if (raw == NULL)
1677 goto error;
1678 }
1679 else {
1680 raw = buf;
1681 Py_INCREF(raw);
1682 }
1683
Steve Dower39294992016-08-30 21:22:36 -07001684#ifdef MS_WINDOWS
1685 /* Windows console IO is always UTF-8 encoded */
1686 if (PyWindowsConsoleIO_Check(raw))
1687 encoding = "utf-8";
1688#endif
1689
Nick Coghland6009512014-11-20 21:39:37 +10001690 text = PyUnicode_FromString(name);
1691 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1692 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001693 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001694 if (res == NULL)
1695 goto error;
1696 isatty = PyObject_IsTrue(res);
1697 Py_DECREF(res);
1698 if (isatty == -1)
1699 goto error;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001700 if (Py_UnbufferedStdioFlag)
1701 write_through = Py_True;
1702 else
1703 write_through = Py_False;
1704 if (isatty && !Py_UnbufferedStdioFlag)
Nick Coghland6009512014-11-20 21:39:37 +10001705 line_buffering = Py_True;
1706 else
1707 line_buffering = Py_False;
1708
1709 Py_CLEAR(raw);
1710 Py_CLEAR(text);
1711
1712#ifdef MS_WINDOWS
1713 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1714 newlines to "\n".
1715 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1716 newline = NULL;
1717#else
1718 /* sys.stdin: split lines at "\n".
1719 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1720 newline = "\n";
1721#endif
1722
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001723 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001724 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001725 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001726 Py_CLEAR(buf);
1727 if (stream == NULL)
1728 goto error;
1729
1730 if (write_mode)
1731 mode = "w";
1732 else
1733 mode = "r";
1734 text = PyUnicode_FromString(mode);
1735 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1736 goto error;
1737 Py_CLEAR(text);
1738 return stream;
1739
1740error:
1741 Py_XDECREF(buf);
1742 Py_XDECREF(stream);
1743 Py_XDECREF(text);
1744 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001745
Victor Stinner874dbe82015-09-04 17:29:57 +02001746 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1747 /* Issue #24891: the file descriptor was closed after the first
1748 is_valid_fd() check was called. Ignore the OSError and set the
1749 stream to None. */
1750 PyErr_Clear();
1751 Py_RETURN_NONE;
1752 }
1753 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001754}
1755
1756/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001757static _PyInitError
Victor Stinner91106cd2017-12-13 12:29:09 +01001758init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001759{
1760 PyObject *iomod = NULL, *wrapper;
1761 PyObject *bimod = NULL;
1762 PyObject *m;
1763 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001764 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001765 PyObject * encoding_attr;
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +02001766 char *pythonioencoding = NULL;
1767 const char *encoding, *errors;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001768 _PyInitError res = _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001769
1770 /* Hack to avoid a nasty recursion issue when Python is invoked
1771 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1772 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1773 goto error;
1774 }
1775 Py_DECREF(m);
1776
1777 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1778 goto error;
1779 }
1780 Py_DECREF(m);
1781
1782 if (!(bimod = PyImport_ImportModule("builtins"))) {
1783 goto error;
1784 }
1785
1786 if (!(iomod = PyImport_ImportModule("io"))) {
1787 goto error;
1788 }
1789 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1790 goto error;
1791 }
1792
1793 /* Set builtins.open */
1794 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1795 Py_DECREF(wrapper);
1796 goto error;
1797 }
1798 Py_DECREF(wrapper);
1799
1800 encoding = _Py_StandardStreamEncoding;
1801 errors = _Py_StandardStreamErrors;
1802 if (!encoding || !errors) {
Victor Stinner91106cd2017-12-13 12:29:09 +01001803 char *opt = Py_GETENV("PYTHONIOENCODING");
1804 if (opt && opt[0] != '\0') {
Nick Coghland6009512014-11-20 21:39:37 +10001805 char *err;
Victor Stinner91106cd2017-12-13 12:29:09 +01001806 pythonioencoding = _PyMem_Strdup(opt);
Nick Coghland6009512014-11-20 21:39:37 +10001807 if (pythonioencoding == NULL) {
1808 PyErr_NoMemory();
1809 goto error;
1810 }
1811 err = strchr(pythonioencoding, ':');
1812 if (err) {
1813 *err = '\0';
1814 err++;
Serhiy Storchakafc435112016-04-10 14:34:13 +03001815 if (*err && !errors) {
Nick Coghland6009512014-11-20 21:39:37 +10001816 errors = err;
1817 }
1818 }
1819 if (*pythonioencoding && !encoding) {
1820 encoding = pythonioencoding;
1821 }
1822 }
Victor Stinner91106cd2017-12-13 12:29:09 +01001823 else if (interp->core_config.utf8_mode) {
1824 encoding = "utf-8";
1825 errors = "surrogateescape";
1826 }
1827
1828 if (!errors && !pythonioencoding) {
Nick Coghlan6ea41862017-06-11 13:16:15 +10001829 /* Choose the default error handler based on the current locale */
1830 errors = get_default_standard_stream_error_handler();
Serhiy Storchakafc435112016-04-10 14:34:13 +03001831 }
Nick Coghland6009512014-11-20 21:39:37 +10001832 }
1833
1834 /* Set sys.stdin */
1835 fd = fileno(stdin);
1836 /* Under some conditions stdin, stdout and stderr may not be connected
1837 * and fileno() may point to an invalid file descriptor. For example
1838 * GUI apps don't have valid standard streams by default.
1839 */
Victor Stinner874dbe82015-09-04 17:29:57 +02001840 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1841 if (std == NULL)
1842 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001843 PySys_SetObject("__stdin__", std);
1844 _PySys_SetObjectId(&PyId_stdin, std);
1845 Py_DECREF(std);
1846
1847 /* Set sys.stdout */
1848 fd = fileno(stdout);
Victor Stinner874dbe82015-09-04 17:29:57 +02001849 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1850 if (std == NULL)
1851 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001852 PySys_SetObject("__stdout__", std);
1853 _PySys_SetObjectId(&PyId_stdout, std);
1854 Py_DECREF(std);
1855
1856#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1857 /* Set sys.stderr, replaces the preliminary stderr */
1858 fd = fileno(stderr);
Victor Stinner874dbe82015-09-04 17:29:57 +02001859 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1860 if (std == NULL)
1861 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001862
1863 /* Same as hack above, pre-import stderr's codec to avoid recursion
1864 when import.c tries to write to stderr in verbose mode. */
1865 encoding_attr = PyObject_GetAttrString(std, "encoding");
1866 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001867 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001868 if (std_encoding != NULL) {
1869 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1870 Py_XDECREF(codec_info);
1871 }
1872 Py_DECREF(encoding_attr);
1873 }
1874 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1875
1876 if (PySys_SetObject("__stderr__", std) < 0) {
1877 Py_DECREF(std);
1878 goto error;
1879 }
1880 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1881 Py_DECREF(std);
1882 goto error;
1883 }
1884 Py_DECREF(std);
1885#endif
1886
Victor Stinnera7368ac2017-11-15 18:11:45 -08001887 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001888
Victor Stinnera7368ac2017-11-15 18:11:45 -08001889error:
1890 res = _Py_INIT_ERR("can't initialize sys standard streams");
1891
1892done:
Nick Coghland6009512014-11-20 21:39:37 +10001893 /* We won't need them anymore. */
1894 if (_Py_StandardStreamEncoding) {
1895 PyMem_RawFree(_Py_StandardStreamEncoding);
1896 _Py_StandardStreamEncoding = NULL;
1897 }
1898 if (_Py_StandardStreamErrors) {
1899 PyMem_RawFree(_Py_StandardStreamErrors);
1900 _Py_StandardStreamErrors = NULL;
1901 }
1902 PyMem_Free(pythonioencoding);
1903 Py_XDECREF(bimod);
1904 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001905 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001906}
1907
1908
Victor Stinner10dc4842015-03-24 12:01:30 +01001909static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001910_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001911{
Victor Stinner10dc4842015-03-24 12:01:30 +01001912 fputc('\n', stderr);
1913 fflush(stderr);
1914
1915 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001916 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001917}
Victor Stinner791da1c2016-03-14 16:53:12 +01001918
1919/* Print the current exception (if an exception is set) with its traceback,
1920 or display the current Python stack.
1921
1922 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1923 called on catastrophic cases.
1924
1925 Return 1 if the traceback was displayed, 0 otherwise. */
1926
1927static int
1928_Py_FatalError_PrintExc(int fd)
1929{
1930 PyObject *ferr, *res;
1931 PyObject *exception, *v, *tb;
1932 int has_tb;
1933
1934 if (PyThreadState_GET() == NULL) {
1935 /* The GIL is released: trying to acquire it is likely to deadlock,
1936 just give up. */
1937 return 0;
1938 }
1939
1940 PyErr_Fetch(&exception, &v, &tb);
1941 if (exception == NULL) {
1942 /* No current exception */
1943 return 0;
1944 }
1945
1946 ferr = _PySys_GetObjectId(&PyId_stderr);
1947 if (ferr == NULL || ferr == Py_None) {
1948 /* sys.stderr is not set yet or set to None,
1949 no need to try to display the exception */
1950 return 0;
1951 }
1952
1953 PyErr_NormalizeException(&exception, &v, &tb);
1954 if (tb == NULL) {
1955 tb = Py_None;
1956 Py_INCREF(tb);
1957 }
1958 PyException_SetTraceback(v, tb);
1959 if (exception == NULL) {
1960 /* PyErr_NormalizeException() failed */
1961 return 0;
1962 }
1963
1964 has_tb = (tb != Py_None);
1965 PyErr_Display(exception, v, tb);
1966 Py_XDECREF(exception);
1967 Py_XDECREF(v);
1968 Py_XDECREF(tb);
1969
1970 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07001971 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01001972 if (res == NULL)
1973 PyErr_Clear();
1974 else
1975 Py_DECREF(res);
1976
1977 return has_tb;
1978}
1979
Nick Coghland6009512014-11-20 21:39:37 +10001980/* Print fatal error message and abort */
1981
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001982#ifdef MS_WINDOWS
1983static void
1984fatal_output_debug(const char *msg)
1985{
1986 /* buffer of 256 bytes allocated on the stack */
1987 WCHAR buffer[256 / sizeof(WCHAR)];
1988 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
1989 size_t msglen;
1990
1991 OutputDebugStringW(L"Fatal Python error: ");
1992
1993 msglen = strlen(msg);
1994 while (msglen) {
1995 size_t i;
1996
1997 if (buflen > msglen) {
1998 buflen = msglen;
1999 }
2000
2001 /* Convert the message to wchar_t. This uses a simple one-to-one
2002 conversion, assuming that the this error message actually uses
2003 ASCII only. If this ceases to be true, we will have to convert. */
2004 for (i=0; i < buflen; ++i) {
2005 buffer[i] = msg[i];
2006 }
2007 buffer[i] = L'\0';
2008 OutputDebugStringW(buffer);
2009
2010 msg += buflen;
2011 msglen -= buflen;
2012 }
2013 OutputDebugStringW(L"\n");
2014}
2015#endif
2016
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002017static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002018fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002019{
2020 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01002021 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002022
2023 if (reentrant) {
2024 /* Py_FatalError() caused a second fatal error.
2025 Example: flush_std_files() raises a recursion error. */
2026 goto exit;
2027 }
2028 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002029
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002030 fprintf(stderr, "Fatal Python error: ");
2031 if (prefix) {
2032 fputs(prefix, stderr);
2033 fputs(": ", stderr);
2034 }
2035 if (msg) {
2036 fputs(msg, stderr);
2037 }
2038 else {
2039 fprintf(stderr, "<message not set>");
2040 }
2041 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10002042 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01002043
Victor Stinnere0deff32015-03-24 13:46:18 +01002044 /* Print the exception (if an exception is set) with its traceback,
2045 * or display the current Python stack. */
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002046 if (!_Py_FatalError_PrintExc(fd)) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002047 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002048 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002049
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002050 /* The main purpose of faulthandler is to display the traceback.
2051 This function already did its best to display a traceback.
2052 Disable faulthandler to prevent writing a second traceback
2053 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002054 _PyFaulthandler_Fini();
2055
Victor Stinner791da1c2016-03-14 16:53:12 +01002056 /* Check if the current Python thread hold the GIL */
2057 if (PyThreadState_GET() != NULL) {
2058 /* Flush sys.stdout and sys.stderr */
2059 flush_std_files();
2060 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002061
Nick Coghland6009512014-11-20 21:39:37 +10002062#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002063 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002064#endif /* MS_WINDOWS */
2065
2066exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002067 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002068#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002069 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002070#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002071 abort();
2072 }
2073 else {
2074 exit(status);
2075 }
2076}
2077
2078void
2079Py_FatalError(const char *msg)
2080{
2081 fatal_error(NULL, msg, -1);
2082}
2083
2084void
2085_Py_FatalInitError(_PyInitError err)
2086{
2087 /* On "user" error: exit with status 1.
2088 For all other errors, call abort(). */
2089 int status = err.user_err ? 1 : -1;
2090 fatal_error(err.prefix, err.msg, status);
Nick Coghland6009512014-11-20 21:39:37 +10002091}
2092
2093/* Clean up and exit */
2094
Victor Stinnerd7292b52016-06-17 12:29:00 +02002095# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002096
Nick Coghland6009512014-11-20 21:39:37 +10002097/* For the atexit module. */
2098void _Py_PyAtExit(void (*func)(void))
2099{
Antoine Pitroufc5db952017-12-13 02:29:07 +01002100 /* Guard against API misuse (see bpo-17852) */
2101 assert(_PyRuntime.pyexitfunc == NULL || _PyRuntime.pyexitfunc == func);
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002102 _PyRuntime.pyexitfunc = func;
Nick Coghland6009512014-11-20 21:39:37 +10002103}
2104
2105static void
2106call_py_exitfuncs(void)
2107{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002108 if (_PyRuntime.pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002109 return;
2110
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002111 (*_PyRuntime.pyexitfunc)();
Nick Coghland6009512014-11-20 21:39:37 +10002112 PyErr_Clear();
2113}
2114
2115/* Wait until threading._shutdown completes, provided
2116 the threading module was imported in the first place.
2117 The shutdown routine will wait until all non-daemon
2118 "threading" threads have completed. */
2119static void
2120wait_for_thread_shutdown(void)
2121{
Nick Coghland6009512014-11-20 21:39:37 +10002122 _Py_IDENTIFIER(_shutdown);
2123 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002124 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002125 if (threading == NULL) {
2126 /* threading not imported */
2127 PyErr_Clear();
2128 return;
2129 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002130 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002131 if (result == NULL) {
2132 PyErr_WriteUnraisable(threading);
2133 }
2134 else {
2135 Py_DECREF(result);
2136 }
2137 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002138}
2139
2140#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002141int Py_AtExit(void (*func)(void))
2142{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002143 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002144 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002145 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002146 return 0;
2147}
2148
2149static void
2150call_ll_exitfuncs(void)
2151{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002152 while (_PyRuntime.nexitfuncs > 0)
2153 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002154
2155 fflush(stdout);
2156 fflush(stderr);
2157}
2158
2159void
2160Py_Exit(int sts)
2161{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002162 if (Py_FinalizeEx() < 0) {
2163 sts = 120;
2164 }
Nick Coghland6009512014-11-20 21:39:37 +10002165
2166 exit(sts);
2167}
2168
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002169static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002170initsigs(void)
2171{
2172#ifdef SIGPIPE
2173 PyOS_setsig(SIGPIPE, SIG_IGN);
2174#endif
2175#ifdef SIGXFZ
2176 PyOS_setsig(SIGXFZ, SIG_IGN);
2177#endif
2178#ifdef SIGXFSZ
2179 PyOS_setsig(SIGXFSZ, SIG_IGN);
2180#endif
2181 PyOS_InitInterrupts(); /* May imply initsignal() */
2182 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002183 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002184 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002185 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002186}
2187
2188
2189/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2190 *
2191 * All of the code in this function must only use async-signal-safe functions,
2192 * listed at `man 7 signal` or
2193 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2194 */
2195void
2196_Py_RestoreSignals(void)
2197{
2198#ifdef SIGPIPE
2199 PyOS_setsig(SIGPIPE, SIG_DFL);
2200#endif
2201#ifdef SIGXFZ
2202 PyOS_setsig(SIGXFZ, SIG_DFL);
2203#endif
2204#ifdef SIGXFSZ
2205 PyOS_setsig(SIGXFSZ, SIG_DFL);
2206#endif
2207}
2208
2209
2210/*
2211 * The file descriptor fd is considered ``interactive'' if either
2212 * a) isatty(fd) is TRUE, or
2213 * b) the -i flag was given, and the filename associated with
2214 * the descriptor is NULL or "<stdin>" or "???".
2215 */
2216int
2217Py_FdIsInteractive(FILE *fp, const char *filename)
2218{
2219 if (isatty((int)fileno(fp)))
2220 return 1;
2221 if (!Py_InteractiveFlag)
2222 return 0;
2223 return (filename == NULL) ||
2224 (strcmp(filename, "<stdin>") == 0) ||
2225 (strcmp(filename, "???") == 0);
2226}
2227
2228
Nick Coghland6009512014-11-20 21:39:37 +10002229/* Wrappers around sigaction() or signal(). */
2230
2231PyOS_sighandler_t
2232PyOS_getsig(int sig)
2233{
2234#ifdef HAVE_SIGACTION
2235 struct sigaction context;
2236 if (sigaction(sig, NULL, &context) == -1)
2237 return SIG_ERR;
2238 return context.sa_handler;
2239#else
2240 PyOS_sighandler_t handler;
2241/* Special signal handling for the secure CRT in Visual Studio 2005 */
2242#if defined(_MSC_VER) && _MSC_VER >= 1400
2243 switch (sig) {
2244 /* Only these signals are valid */
2245 case SIGINT:
2246 case SIGILL:
2247 case SIGFPE:
2248 case SIGSEGV:
2249 case SIGTERM:
2250 case SIGBREAK:
2251 case SIGABRT:
2252 break;
2253 /* Don't call signal() with other values or it will assert */
2254 default:
2255 return SIG_ERR;
2256 }
2257#endif /* _MSC_VER && _MSC_VER >= 1400 */
2258 handler = signal(sig, SIG_IGN);
2259 if (handler != SIG_ERR)
2260 signal(sig, handler);
2261 return handler;
2262#endif
2263}
2264
2265/*
2266 * All of the code in this function must only use async-signal-safe functions,
2267 * listed at `man 7 signal` or
2268 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2269 */
2270PyOS_sighandler_t
2271PyOS_setsig(int sig, PyOS_sighandler_t handler)
2272{
2273#ifdef HAVE_SIGACTION
2274 /* Some code in Modules/signalmodule.c depends on sigaction() being
2275 * used here if HAVE_SIGACTION is defined. Fix that if this code
2276 * changes to invalidate that assumption.
2277 */
2278 struct sigaction context, ocontext;
2279 context.sa_handler = handler;
2280 sigemptyset(&context.sa_mask);
2281 context.sa_flags = 0;
2282 if (sigaction(sig, &context, &ocontext) == -1)
2283 return SIG_ERR;
2284 return ocontext.sa_handler;
2285#else
2286 PyOS_sighandler_t oldhandler;
2287 oldhandler = signal(sig, handler);
2288#ifdef HAVE_SIGINTERRUPT
2289 siginterrupt(sig, 1);
2290#endif
2291 return oldhandler;
2292#endif
2293}
2294
2295#ifdef __cplusplus
2296}
2297#endif