blob: 523397f1269f74fb876ffdec79394bfd69c83a5d [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 Stinnera7368ac2017-11-15 18:11:45 -080057static _PyInitError init_sys_streams(void);
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
417static char *
418get_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
443static const char *_C_LOCALE_COERCION_WARNING =
444 "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
Stéphane Wirtelccfdb602017-07-25 14:32:08 +0200609/* TODO: Progressively move functionality from Py_BeginInitialization to
Eric Snow1abcf672017-05-23 21:46:51 -0700610 * Py_ReadConfig and Py_EndInitialization
611 */
612
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800613_PyInitError
614_Py_InitializeCore(const _PyCoreConfig *config)
Nick Coghland6009512014-11-20 21:39:37 +1000615{
616 PyInterpreterState *interp;
617 PyThreadState *tstate;
618 PyObject *bimod, *sysmod, *pstderr;
Eric Snow1abcf672017-05-23 21:46:51 -0700619 _PyCoreConfig core_config = _PyCoreConfig_INIT;
Eric Snowc7ec9982017-05-23 23:00:52 -0700620 _PyMainInterpreterConfig preinit_config = _PyMainInterpreterConfig_INIT;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800621 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +1000622
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800623 err = _PyRuntime_Initialize();
624 if (_Py_INIT_FAILED(err)) {
625 return err;
626 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600627
Eric Snow1abcf672017-05-23 21:46:51 -0700628 if (config != NULL) {
629 core_config = *config;
630 }
631
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800632 if (_PyMem_SetupAllocators(core_config.allocator) < 0) {
Victor Stinner5d39e042017-11-29 17:20:38 +0100633 return _Py_INIT_USER_ERR("Unknown PYTHONMALLOC allocator");
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800634 }
635
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600636 if (_PyRuntime.initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800637 return _Py_INIT_ERR("main interpreter already initialized");
Eric Snow1abcf672017-05-23 21:46:51 -0700638 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600639 if (_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800640 return _Py_INIT_ERR("runtime core already initialized");
Eric Snow1abcf672017-05-23 21:46:51 -0700641 }
642
643 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
644 * threads behave a little more gracefully at interpreter shutdown.
645 * We clobber it here so the new interpreter can start with a clean
646 * slate.
647 *
648 * However, this may still lead to misbehaviour if there are daemon
649 * threads still hanging around from a previous Py_Initialize/Finalize
650 * pair :(
651 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600652 _PyRuntime.finalizing = NULL;
653
Nick Coghlan6ea41862017-06-11 13:16:15 +1000654#ifndef MS_WINDOWS
Nick Coghland6009512014-11-20 21:39:37 +1000655 /* Set up the LC_CTYPE locale, so we can obtain
656 the locale's charset without having to switch
657 locales. */
xdegaye1588be62017-11-12 12:45:59 +0100658 _Py_SetLocaleFromEnv(LC_CTYPE);
Nick Coghlaneb817952017-06-18 12:29:42 +1000659 _emit_stderr_warning_for_legacy_locale();
Nick Coghlan6ea41862017-06-11 13:16:15 +1000660#endif
Nick Coghland6009512014-11-20 21:39:37 +1000661
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800662 err = _Py_HashRandomization_Init(&core_config);
663 if (_Py_INIT_FAILED(err)) {
664 return err;
665 }
666
Eric Snow1abcf672017-05-23 21:46:51 -0700667 if (!core_config.use_hash_seed || core_config.hash_seed) {
668 /* Random or non-zero hash seed */
669 Py_HashRandomizationFlag = 1;
670 }
Nick Coghland6009512014-11-20 21:39:37 +1000671
Victor Stinnera7368ac2017-11-15 18:11:45 -0800672 err = _PyInterpreterState_Enable(&_PyRuntime);
673 if (_Py_INIT_FAILED(err)) {
674 return err;
675 }
676
Nick Coghland6009512014-11-20 21:39:37 +1000677 interp = PyInterpreterState_New();
678 if (interp == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800679 return _Py_INIT_ERR("can't make main interpreter");
Eric Snow1abcf672017-05-23 21:46:51 -0700680 interp->core_config = core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700681 interp->config = preinit_config;
Nick Coghland6009512014-11-20 21:39:37 +1000682
683 tstate = PyThreadState_New(interp);
684 if (tstate == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800685 return _Py_INIT_ERR("can't make first thread");
Nick Coghland6009512014-11-20 21:39:37 +1000686 (void) PyThreadState_Swap(tstate);
687
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000688 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
Nick Coghland6009512014-11-20 21:39:37 +1000689 destroying the GIL might fail when it is being referenced from
690 another running thread (see issue #9901).
691 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000692 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Nick Coghland6009512014-11-20 21:39:37 +1000693 _PyEval_FiniThreads();
Nick Coghland6009512014-11-20 21:39:37 +1000694 /* Auto-thread-state API */
695 _PyGILState_Init(interp, tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000696
697 _Py_ReadyTypes();
698
699 if (!_PyFrame_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800700 return _Py_INIT_ERR("can't init frames");
Nick Coghland6009512014-11-20 21:39:37 +1000701
702 if (!_PyLong_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800703 return _Py_INIT_ERR("can't init longs");
Nick Coghland6009512014-11-20 21:39:37 +1000704
705 if (!PyByteArray_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800706 return _Py_INIT_ERR("can't init bytearray");
Nick Coghland6009512014-11-20 21:39:37 +1000707
708 if (!_PyFloat_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800709 return _Py_INIT_ERR("can't init float");
Nick Coghland6009512014-11-20 21:39:37 +1000710
Eric Snowd393c1b2017-09-14 12:18:12 -0600711 PyObject *modules = PyDict_New();
712 if (modules == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800713 return _Py_INIT_ERR("can't make modules dictionary");
Eric Snowd393c1b2017-09-14 12:18:12 -0600714 interp->modules = modules;
715
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800716 err = _PySys_BeginInit(&sysmod);
717 if (_Py_INIT_FAILED(err)) {
718 return err;
719 }
720
Eric Snowd393c1b2017-09-14 12:18:12 -0600721 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800722 if (interp->sysdict == NULL) {
723 return _Py_INIT_ERR("can't initialize sys dict");
724 }
725
Eric Snowd393c1b2017-09-14 12:18:12 -0600726 Py_INCREF(interp->sysdict);
727 PyDict_SetItemString(interp->sysdict, "modules", modules);
728 _PyImport_FixupBuiltin(sysmod, "sys", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000729
730 /* Init Unicode implementation; relies on the codec registry */
731 if (_PyUnicode_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800732 return _Py_INIT_ERR("can't initialize unicode");
Eric Snow1abcf672017-05-23 21:46:51 -0700733
Nick Coghland6009512014-11-20 21:39:37 +1000734 if (_PyStructSequence_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800735 return _Py_INIT_ERR("can't initialize structseq");
Nick Coghland6009512014-11-20 21:39:37 +1000736
737 bimod = _PyBuiltin_Init();
738 if (bimod == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800739 return _Py_INIT_ERR("can't initialize builtins modules");
Eric Snowd393c1b2017-09-14 12:18:12 -0600740 _PyImport_FixupBuiltin(bimod, "builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000741 interp->builtins = PyModule_GetDict(bimod);
742 if (interp->builtins == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800743 return _Py_INIT_ERR("can't initialize builtins dict");
Nick Coghland6009512014-11-20 21:39:37 +1000744 Py_INCREF(interp->builtins);
745
746 /* initialize builtin exceptions */
747 _PyExc_Init(bimod);
748
Nick Coghland6009512014-11-20 21:39:37 +1000749 /* Set up a preliminary stderr printer until we have enough
750 infrastructure for the io module in place. */
751 pstderr = PyFile_NewStdPrinter(fileno(stderr));
752 if (pstderr == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800753 return _Py_INIT_ERR("can't set preliminary stderr");
Nick Coghland6009512014-11-20 21:39:37 +1000754 _PySys_SetObjectId(&PyId_stderr, pstderr);
755 PySys_SetObject("__stderr__", pstderr);
756 Py_DECREF(pstderr);
757
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800758 err = _PyImport_Init();
759 if (_Py_INIT_FAILED(err)) {
760 return err;
761 }
Nick Coghland6009512014-11-20 21:39:37 +1000762
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800763 err = _PyImportHooks_Init();
764 if (_Py_INIT_FAILED(err)) {
765 return err;
766 }
Nick Coghland6009512014-11-20 21:39:37 +1000767
768 /* Initialize _warnings. */
Victor Stinner1f151112017-11-23 10:43:14 +0100769 if (_PyWarnings_InitWithConfig(&interp->core_config) == NULL) {
770 return _Py_INIT_ERR("can't initialize warnings");
771 }
Nick Coghland6009512014-11-20 21:39:37 +1000772
Eric Snow1abcf672017-05-23 21:46:51 -0700773 /* This call sets up builtin and frozen import support */
774 if (!interp->core_config._disable_importlib) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800775 err = initimport(interp, sysmod);
776 if (_Py_INIT_FAILED(err)) {
777 return err;
778 }
Eric Snow1abcf672017-05-23 21:46:51 -0700779 }
780
781 /* Only when we get here is the runtime core fully initialized */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600782 _PyRuntime.core_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800783 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700784}
785
Eric Snowc7ec9982017-05-23 23:00:52 -0700786/* Read configuration settings from standard locations
787 *
788 * This function doesn't make any changes to the interpreter state - it
789 * merely populates any missing configuration settings. This allows an
790 * embedding application to completely override a config option by
791 * setting it before calling this function, or else modify the default
792 * setting before passing the fully populated config to Py_EndInitialization.
793 *
794 * More advanced selective initialization tricks are possible by calling
795 * this function multiple times with various preconfigured settings.
796 */
797
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800798_PyInitError
Victor Stinner46972b72017-11-24 22:55:40 +0100799_PyMainInterpreterConfig_Read(_PyMainInterpreterConfig *config)
Eric Snowc7ec9982017-05-23 23:00:52 -0700800{
801 /* Signal handlers are installed by default */
802 if (config->install_signal_handlers < 0) {
803 config->install_signal_handlers = 1;
804 }
Victor Stinnerf04ebe22017-11-25 00:01:23 +0100805
806 if (config->program_name == NULL) {
Victor Stinner31a83932017-12-04 13:39:15 +0100807#ifdef MS_WINDOWS
808 const wchar_t *program_name = L"python";
809#else
810 const wchar_t *program_name = L"python3";
811#endif
812 config->program_name = _PyMem_RawWcsdup(program_name);
Victor Stinnerf04ebe22017-11-25 00:01:23 +0100813 if (config->program_name == NULL) {
814 return _Py_INIT_NO_MEMORY();
815 }
816 }
817
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800818 return _Py_INIT_OK();
Eric Snowc7ec9982017-05-23 23:00:52 -0700819}
820
Victor Stinner46972b72017-11-24 22:55:40 +0100821
822void
823_PyMainInterpreterConfig_Clear(_PyMainInterpreterConfig *config)
824{
Victor Stinnerf04ebe22017-11-25 00:01:23 +0100825#define CLEAR(ATTR) \
826 do { \
827 PyMem_RawFree(ATTR); \
828 ATTR = NULL; \
829 } while (0)
830
831 CLEAR(config->module_search_path_env);
832 CLEAR(config->home);
833 CLEAR(config->program_name);
834#undef CLEAR
Victor Stinner46972b72017-11-24 22:55:40 +0100835}
836
837
Eric Snowc7ec9982017-05-23 23:00:52 -0700838/* Update interpreter state based on supplied configuration settings
839 *
840 * After calling this function, most of the restrictions on the interpreter
841 * are lifted. The only remaining incomplete settings are those related
842 * to the main module (sys.argv[0], __main__ metadata)
843 *
844 * Calling this when the interpreter is not initializing, is already
845 * initialized or without a valid current thread state is a fatal error.
846 * Other errors should be reported as normal Python exceptions with a
847 * non-zero return code.
848 */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800849_PyInitError
850_Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -0700851{
852 PyInterpreterState *interp;
853 PyThreadState *tstate;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800854 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700855
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600856 if (!_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800857 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700858 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600859 if (_PyRuntime.initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800860 return _Py_INIT_ERR("main interpreter already initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700861 }
862
Eric Snow1abcf672017-05-23 21:46:51 -0700863 /* Get current thread state and interpreter pointer */
864 tstate = PyThreadState_GET();
865 if (!tstate)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800866 return _Py_INIT_ERR("failed to read thread state");
Eric Snow1abcf672017-05-23 21:46:51 -0700867 interp = tstate->interp;
868 if (!interp)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800869 return _Py_INIT_ERR("failed to get interpreter");
Eric Snow1abcf672017-05-23 21:46:51 -0700870
871 /* Now finish configuring the main interpreter */
Eric Snowc7ec9982017-05-23 23:00:52 -0700872 interp->config = *config;
873
Eric Snow1abcf672017-05-23 21:46:51 -0700874 if (interp->core_config._disable_importlib) {
875 /* Special mode for freeze_importlib: run with no import system
876 *
877 * This means anything which needs support from extension modules
878 * or pure Python code in the standard library won't work.
879 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600880 _PyRuntime.initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800881 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700882 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100883
Eric Snow1abcf672017-05-23 21:46:51 -0700884 /* TODO: Report exceptions rather than fatal errors below here */
Nick Coghland6009512014-11-20 21:39:37 +1000885
Victor Stinner13019fd2015-04-03 13:10:54 +0200886 if (_PyTime_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800887 return _Py_INIT_ERR("can't initialize time");
Victor Stinner13019fd2015-04-03 13:10:54 +0200888
Victor Stinner9316ee42017-11-25 03:17:57 +0100889 /* GetPath may initialize state that _PySys_EndInit locks
890 in, and so has to be called first. */
891 err = _PyPathConfig_Init(&interp->config);
892 if (_Py_INIT_FAILED(err)) {
893 return err;
894 }
895 wchar_t *sys_path = Py_GetPath();
896
Eric Snow1abcf672017-05-23 21:46:51 -0700897 /* Finish setting up the sys module and import system */
Victor Stinnerd4341102017-11-23 00:12:09 +0100898 PySys_SetPath(sys_path);
Eric Snow1abcf672017-05-23 21:46:51 -0700899 if (_PySys_EndInit(interp->sysdict) < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800900 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnera7368ac2017-11-15 18:11:45 -0800901
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800902 err = initexternalimport(interp);
903 if (_Py_INIT_FAILED(err)) {
904 return err;
905 }
Nick Coghland6009512014-11-20 21:39:37 +1000906
907 /* initialize the faulthandler module */
Victor Stinnera7368ac2017-11-15 18:11:45 -0800908 err = _PyFaulthandler_Init(interp->core_config.faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800909 if (_Py_INIT_FAILED(err)) {
910 return err;
911 }
Nick Coghland6009512014-11-20 21:39:37 +1000912
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800913 err = initfsencoding(interp);
914 if (_Py_INIT_FAILED(err)) {
915 return err;
916 }
Nick Coghland6009512014-11-20 21:39:37 +1000917
Victor Stinner1f151112017-11-23 10:43:14 +0100918 if (interp->config.install_signal_handlers) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800919 err = initsigs(); /* Signal handling stuff, including initintr() */
920 if (_Py_INIT_FAILED(err)) {
921 return err;
922 }
923 }
Nick Coghland6009512014-11-20 21:39:37 +1000924
Victor Stinnera7368ac2017-11-15 18:11:45 -0800925 if (_PyTraceMalloc_Init(interp->core_config.tracemalloc) < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800926 return _Py_INIT_ERR("can't initialize tracemalloc");
Nick Coghland6009512014-11-20 21:39:37 +1000927
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800928 err = add_main_module(interp);
929 if (_Py_INIT_FAILED(err)) {
930 return err;
931 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800932
933 err = init_sys_streams();
934 if (_Py_INIT_FAILED(err)) {
935 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800936 }
Nick Coghland6009512014-11-20 21:39:37 +1000937
938 /* Initialize warnings. */
939 if (PySys_HasWarnOptions()) {
940 PyObject *warnings_module = PyImport_ImportModule("warnings");
941 if (warnings_module == NULL) {
942 fprintf(stderr, "'import warnings' failed; traceback:\n");
943 PyErr_Print();
944 }
945 Py_XDECREF(warnings_module);
946 }
947
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600948 _PyRuntime.initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700949
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800950 if (!Py_NoSiteFlag) {
951 err = initsite(); /* Module site */
952 if (_Py_INIT_FAILED(err)) {
953 return err;
954 }
955 }
Eric Snow1abcf672017-05-23 21:46:51 -0700956
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800957 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000958}
959
Eric Snowc7ec9982017-05-23 23:00:52 -0700960#undef _INIT_DEBUG_PRINT
961
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800962_PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700963_Py_InitializeEx_Private(int install_sigs, int install_importlib)
964{
965 _PyCoreConfig core_config = _PyCoreConfig_INIT;
Eric Snowc7ec9982017-05-23 23:00:52 -0700966 _PyMainInterpreterConfig config = _PyMainInterpreterConfig_INIT;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800967 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700968
Eric Snow1abcf672017-05-23 21:46:51 -0700969 core_config.ignore_environment = Py_IgnoreEnvironmentFlag;
970 core_config._disable_importlib = !install_importlib;
Eric Snowc7ec9982017-05-23 23:00:52 -0700971 config.install_signal_handlers = install_sigs;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800972
973 err = _Py_InitializeCore(&core_config);
974 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100975 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800976 }
977
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100978 err = _PyMainInterpreterConfig_ReadEnv(&config);
979 if (_Py_INIT_FAILED(err)) {
980 goto done;
981 }
982
Victor Stinner46972b72017-11-24 22:55:40 +0100983 err = _PyMainInterpreterConfig_Read(&config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800984 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100985 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800986 }
987
988 err = _Py_InitializeMainInterpreter(&config);
989 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100990 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800991 }
992
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100993 err = _Py_INIT_OK();
994
995done:
996 _PyMainInterpreterConfig_Clear(&config);
997 return err;
Eric Snow1abcf672017-05-23 21:46:51 -0700998}
999
1000
1001void
Nick Coghland6009512014-11-20 21:39:37 +10001002Py_InitializeEx(int install_sigs)
1003{
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001004 _PyInitError err = _Py_InitializeEx_Private(install_sigs, 1);
1005 if (_Py_INIT_FAILED(err)) {
1006 _Py_FatalInitError(err);
1007 }
Nick Coghland6009512014-11-20 21:39:37 +10001008}
1009
1010void
1011Py_Initialize(void)
1012{
1013 Py_InitializeEx(1);
1014}
1015
1016
1017#ifdef COUNT_ALLOCS
1018extern void dump_counts(FILE*);
1019#endif
1020
1021/* Flush stdout and stderr */
1022
1023static int
1024file_is_closed(PyObject *fobj)
1025{
1026 int r;
1027 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1028 if (tmp == NULL) {
1029 PyErr_Clear();
1030 return 0;
1031 }
1032 r = PyObject_IsTrue(tmp);
1033 Py_DECREF(tmp);
1034 if (r < 0)
1035 PyErr_Clear();
1036 return r > 0;
1037}
1038
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001039static int
Nick Coghland6009512014-11-20 21:39:37 +10001040flush_std_files(void)
1041{
1042 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1043 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1044 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001045 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001046
1047 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001048 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001049 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001050 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001051 status = -1;
1052 }
Nick Coghland6009512014-11-20 21:39:37 +10001053 else
1054 Py_DECREF(tmp);
1055 }
1056
1057 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001058 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001059 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001060 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001061 status = -1;
1062 }
Nick Coghland6009512014-11-20 21:39:37 +10001063 else
1064 Py_DECREF(tmp);
1065 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001066
1067 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001068}
1069
1070/* Undo the effect of Py_Initialize().
1071
1072 Beware: if multiple interpreter and/or thread states exist, these
1073 are not wiped out; only the current thread and interpreter state
1074 are deleted. But since everything else is deleted, those other
1075 interpreter and thread states should no longer be used.
1076
1077 (XXX We should do better, e.g. wipe out all interpreters and
1078 threads.)
1079
1080 Locking: as above.
1081
1082*/
1083
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001084int
1085Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001086{
1087 PyInterpreterState *interp;
1088 PyThreadState *tstate;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001089 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001090
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001091 if (!_PyRuntime.initialized)
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001092 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001093
1094 wait_for_thread_shutdown();
1095
1096 /* The interpreter is still entirely intact at this point, and the
1097 * exit funcs may be relying on that. In particular, if some thread
1098 * or exit func is still waiting to do an import, the import machinery
1099 * expects Py_IsInitialized() to return true. So don't say the
1100 * interpreter is uninitialized until after the exit funcs have run.
1101 * Note that Threading.py uses an exit func to do a join on all the
1102 * threads created thru it, so this also protects pending imports in
1103 * the threads created via Threading.
1104 */
1105 call_py_exitfuncs();
1106
1107 /* Get current thread state and interpreter pointer */
1108 tstate = PyThreadState_GET();
1109 interp = tstate->interp;
1110
1111 /* Remaining threads (e.g. daemon threads) will automatically exit
1112 after taking the GIL (in PyEval_RestoreThread()). */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001113 _PyRuntime.finalizing = tstate;
1114 _PyRuntime.initialized = 0;
1115 _PyRuntime.core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001116
Victor Stinnere0deff32015-03-24 13:46:18 +01001117 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001118 if (flush_std_files() < 0) {
1119 status = -1;
1120 }
Nick Coghland6009512014-11-20 21:39:37 +10001121
1122 /* Disable signal handling */
1123 PyOS_FiniInterrupts();
1124
1125 /* Collect garbage. This may call finalizers; it's nice to call these
1126 * before all modules are destroyed.
1127 * XXX If a __del__ or weakref callback is triggered here, and tries to
1128 * XXX import a module, bad things can happen, because Python no
1129 * XXX longer believes it's initialized.
1130 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1131 * XXX is easy to provoke that way. I've also seen, e.g.,
1132 * XXX Exception exceptions.ImportError: 'No module named sha'
1133 * XXX in <function callback at 0x008F5718> ignored
1134 * XXX but I'm unclear on exactly how that one happens. In any case,
1135 * XXX I haven't seen a real-life report of either of these.
1136 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001137 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001138#ifdef COUNT_ALLOCS
1139 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1140 each collection might release some types from the type
1141 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001142 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001143 /* nothing */;
1144#endif
Eric Snowdae02762017-09-14 00:35:58 -07001145
Nick Coghland6009512014-11-20 21:39:37 +10001146 /* Destroy all modules */
1147 PyImport_Cleanup();
1148
Victor Stinnere0deff32015-03-24 13:46:18 +01001149 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001150 if (flush_std_files() < 0) {
1151 status = -1;
1152 }
Nick Coghland6009512014-11-20 21:39:37 +10001153
1154 /* Collect final garbage. This disposes of cycles created by
1155 * class definitions, for example.
1156 * XXX This is disabled because it caused too many problems. If
1157 * XXX a __del__ or weakref callback triggers here, Python code has
1158 * XXX a hard time running, because even the sys module has been
1159 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1160 * XXX One symptom is a sequence of information-free messages
1161 * XXX coming from threads (if a __del__ or callback is invoked,
1162 * XXX other threads can execute too, and any exception they encounter
1163 * XXX triggers a comedy of errors as subsystem after subsystem
1164 * XXX fails to find what it *expects* to find in sys to help report
1165 * XXX the exception and consequent unexpected failures). I've also
1166 * XXX seen segfaults then, after adding print statements to the
1167 * XXX Python code getting called.
1168 */
1169#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001170 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001171#endif
1172
1173 /* Disable tracemalloc after all Python objects have been destroyed,
1174 so it is possible to use tracemalloc in objects destructor. */
1175 _PyTraceMalloc_Fini();
1176
1177 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1178 _PyImport_Fini();
1179
1180 /* Cleanup typeobject.c's internal caches. */
1181 _PyType_Fini();
1182
1183 /* unload faulthandler module */
1184 _PyFaulthandler_Fini();
1185
1186 /* Debugging stuff */
1187#ifdef COUNT_ALLOCS
Serhiy Storchaka7e160ce2016-07-03 21:03:53 +03001188 dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001189#endif
1190 /* dump hash stats */
1191 _PyHash_Fini();
1192
Eric Snowdae02762017-09-14 00:35:58 -07001193#ifdef Py_REF_DEBUG
Victor Stinner25420fe2017-11-20 18:12:22 -08001194 if (interp->core_config.show_ref_count) {
1195 _PyDebug_PrintTotalRefs();
1196 }
Eric Snowdae02762017-09-14 00:35:58 -07001197#endif
Nick Coghland6009512014-11-20 21:39:37 +10001198
1199#ifdef Py_TRACE_REFS
1200 /* Display all objects still alive -- this can invoke arbitrary
1201 * __repr__ overrides, so requires a mostly-intact interpreter.
1202 * Alas, a lot of stuff may still be alive now that will be cleaned
1203 * up later.
1204 */
1205 if (Py_GETENV("PYTHONDUMPREFS"))
1206 _Py_PrintReferences(stderr);
1207#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 */
1268 if (Py_GETENV("PYTHONDUMPREFS"))
1269 _Py_PrintReferenceAddresses(stderr);
1270#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001271#ifdef WITH_PYMALLOC
1272 if (_PyMem_PymallocEnabled()) {
1273 char *opt = Py_GETENV("PYTHONMALLOCSTATS");
1274 if (opt != NULL && *opt != '\0')
1275 _PyObject_DebugMallocStats(stderr);
1276 }
Nick Coghland6009512014-11-20 21:39:37 +10001277#endif
1278
1279 call_ll_exitfuncs();
Victor Stinner9316ee42017-11-25 03:17:57 +01001280
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001281 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001282 return status;
1283}
1284
1285void
1286Py_Finalize(void)
1287{
1288 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001289}
1290
1291/* Create and initialize a new interpreter and thread, and return the
1292 new thread. This requires that Py_Initialize() has been called
1293 first.
1294
1295 Unsuccessful initialization yields a NULL pointer. Note that *no*
1296 exception information is available even in this case -- the
1297 exception information is held in the thread, and there is no
1298 thread.
1299
1300 Locking: as above.
1301
1302*/
1303
Victor Stinnera7368ac2017-11-15 18:11:45 -08001304static _PyInitError
1305new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001306{
1307 PyInterpreterState *interp;
1308 PyThreadState *tstate, *save_tstate;
1309 PyObject *bimod, *sysmod;
Victor Stinner9316ee42017-11-25 03:17:57 +01001310 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001311
Victor Stinnera7368ac2017-11-15 18:11:45 -08001312 if (!_PyRuntime.initialized) {
1313 return _Py_INIT_ERR("Py_Initialize must be called first");
1314 }
Nick Coghland6009512014-11-20 21:39:37 +10001315
Victor Stinner8a1be612016-03-14 22:07:55 +01001316 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1317 interpreters: disable PyGILState_Check(). */
1318 _PyGILState_check_enabled = 0;
1319
Nick Coghland6009512014-11-20 21:39:37 +10001320 interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001321 if (interp == NULL) {
1322 *tstate_p = NULL;
1323 return _Py_INIT_OK();
1324 }
Nick Coghland6009512014-11-20 21:39:37 +10001325
1326 tstate = PyThreadState_New(interp);
1327 if (tstate == NULL) {
1328 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001329 *tstate_p = NULL;
1330 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001331 }
1332
1333 save_tstate = PyThreadState_Swap(tstate);
1334
Eric Snow1abcf672017-05-23 21:46:51 -07001335 /* Copy the current interpreter config into the new interpreter */
1336 if (save_tstate != NULL) {
1337 interp->core_config = save_tstate->interp->core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -07001338 interp->config = save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001339 } else {
1340 /* No current thread state, copy from the main interpreter */
1341 PyInterpreterState *main_interp = PyInterpreterState_Main();
1342 interp->core_config = main_interp->core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -07001343 interp->config = main_interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001344 }
1345
Victor Stinner9316ee42017-11-25 03:17:57 +01001346 err = _PyPathConfig_Init(&interp->config);
1347 if (_Py_INIT_FAILED(err)) {
1348 return err;
1349 }
1350 wchar_t *sys_path = Py_GetPath();
1351
Nick Coghland6009512014-11-20 21:39:37 +10001352 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001353 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001354 if (modules == NULL) {
1355 return _Py_INIT_ERR("can't make modules dictionary");
1356 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001357 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001358
Eric Snowd393c1b2017-09-14 12:18:12 -06001359 sysmod = _PyImport_FindBuiltin("sys", modules);
1360 if (sysmod != NULL) {
1361 interp->sysdict = PyModule_GetDict(sysmod);
1362 if (interp->sysdict == NULL)
1363 goto handle_error;
1364 Py_INCREF(interp->sysdict);
1365 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinnerd4341102017-11-23 00:12:09 +01001366 PySys_SetPath(sys_path);
Eric Snowd393c1b2017-09-14 12:18:12 -06001367 _PySys_EndInit(interp->sysdict);
1368 }
1369
1370 bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001371 if (bimod != NULL) {
1372 interp->builtins = PyModule_GetDict(bimod);
1373 if (interp->builtins == NULL)
1374 goto handle_error;
1375 Py_INCREF(interp->builtins);
1376 }
1377
1378 /* initialize builtin exceptions */
1379 _PyExc_Init(bimod);
1380
Nick Coghland6009512014-11-20 21:39:37 +10001381 if (bimod != NULL && sysmod != NULL) {
1382 PyObject *pstderr;
1383
Nick Coghland6009512014-11-20 21:39:37 +10001384 /* Set up a preliminary stderr printer until we have enough
1385 infrastructure for the io module in place. */
1386 pstderr = PyFile_NewStdPrinter(fileno(stderr));
Victor Stinnera7368ac2017-11-15 18:11:45 -08001387 if (pstderr == NULL) {
1388 return _Py_INIT_ERR("can't set preliminary stderr");
1389 }
Nick Coghland6009512014-11-20 21:39:37 +10001390 _PySys_SetObjectId(&PyId_stderr, pstderr);
1391 PySys_SetObject("__stderr__", pstderr);
1392 Py_DECREF(pstderr);
1393
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001394 err = _PyImportHooks_Init();
1395 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001396 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001397 }
Nick Coghland6009512014-11-20 21:39:37 +10001398
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001399 err = initimport(interp, sysmod);
1400 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001401 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001402 }
Nick Coghland6009512014-11-20 21:39:37 +10001403
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001404 err = initexternalimport(interp);
1405 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001406 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001407 }
Nick Coghland6009512014-11-20 21:39:37 +10001408
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001409 err = initfsencoding(interp);
1410 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001411 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001412 }
1413
Victor Stinnera7368ac2017-11-15 18:11:45 -08001414 err = init_sys_streams();
1415 if (_Py_INIT_FAILED(err)) {
1416 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001417 }
1418
1419 err = add_main_module(interp);
1420 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001421 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001422 }
1423
1424 if (!Py_NoSiteFlag) {
1425 err = initsite();
1426 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001427 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001428 }
1429 }
Nick Coghland6009512014-11-20 21:39:37 +10001430 }
1431
Victor Stinnera7368ac2017-11-15 18:11:45 -08001432 if (PyErr_Occurred()) {
1433 goto handle_error;
1434 }
Nick Coghland6009512014-11-20 21:39:37 +10001435
Victor Stinnera7368ac2017-11-15 18:11:45 -08001436 *tstate_p = tstate;
1437 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001438
Nick Coghland6009512014-11-20 21:39:37 +10001439handle_error:
1440 /* Oops, it didn't work. Undo it all. */
1441
1442 PyErr_PrintEx(0);
1443 PyThreadState_Clear(tstate);
1444 PyThreadState_Swap(save_tstate);
1445 PyThreadState_Delete(tstate);
1446 PyInterpreterState_Delete(interp);
1447
Victor Stinnera7368ac2017-11-15 18:11:45 -08001448 *tstate_p = NULL;
1449 return _Py_INIT_OK();
1450}
1451
1452PyThreadState *
1453Py_NewInterpreter(void)
1454{
1455 PyThreadState *tstate;
1456 _PyInitError err = new_interpreter(&tstate);
1457 if (_Py_INIT_FAILED(err)) {
1458 _Py_FatalInitError(err);
1459 }
1460 return tstate;
1461
Nick Coghland6009512014-11-20 21:39:37 +10001462}
1463
1464/* Delete an interpreter and its last thread. This requires that the
1465 given thread state is current, that the thread has no remaining
1466 frames, and that it is its interpreter's only remaining thread.
1467 It is a fatal error to violate these constraints.
1468
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001469 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001470 everything, regardless.)
1471
1472 Locking: as above.
1473
1474*/
1475
1476void
1477Py_EndInterpreter(PyThreadState *tstate)
1478{
1479 PyInterpreterState *interp = tstate->interp;
1480
1481 if (tstate != PyThreadState_GET())
1482 Py_FatalError("Py_EndInterpreter: thread is not current");
1483 if (tstate->frame != NULL)
1484 Py_FatalError("Py_EndInterpreter: thread still has a frame");
1485
1486 wait_for_thread_shutdown();
1487
1488 if (tstate != interp->tstate_head || tstate->next != NULL)
1489 Py_FatalError("Py_EndInterpreter: not the last thread");
1490
1491 PyImport_Cleanup();
1492 PyInterpreterState_Clear(interp);
1493 PyThreadState_Swap(NULL);
1494 PyInterpreterState_Delete(interp);
1495}
1496
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001497/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001498
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001499static _PyInitError
1500add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001501{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001502 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001503 m = PyImport_AddModule("__main__");
1504 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001505 return _Py_INIT_ERR("can't create __main__ module");
1506
Nick Coghland6009512014-11-20 21:39:37 +10001507 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001508 ann_dict = PyDict_New();
1509 if ((ann_dict == NULL) ||
1510 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001511 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001512 }
1513 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001514
Nick Coghland6009512014-11-20 21:39:37 +10001515 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1516 PyObject *bimod = PyImport_ImportModule("builtins");
1517 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001518 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001519 }
1520 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001521 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001522 }
1523 Py_DECREF(bimod);
1524 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001525
Nick Coghland6009512014-11-20 21:39:37 +10001526 /* Main is a little special - imp.is_builtin("__main__") will return
1527 * False, but BuiltinImporter is still the most appropriate initial
1528 * setting for its __loader__ attribute. A more suitable value will
1529 * be set if __main__ gets further initialized later in the startup
1530 * process.
1531 */
1532 loader = PyDict_GetItemString(d, "__loader__");
1533 if (loader == NULL || loader == Py_None) {
1534 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1535 "BuiltinImporter");
1536 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001537 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001538 }
1539 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001540 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001541 }
1542 Py_DECREF(loader);
1543 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001544 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001545}
1546
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001547static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001548initfsencoding(PyInterpreterState *interp)
1549{
1550 PyObject *codec;
1551
Steve Dowercc16be82016-09-08 10:35:16 -07001552#ifdef MS_WINDOWS
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001553 if (Py_LegacyWindowsFSEncodingFlag) {
Steve Dowercc16be82016-09-08 10:35:16 -07001554 Py_FileSystemDefaultEncoding = "mbcs";
1555 Py_FileSystemDefaultEncodeErrors = "replace";
1556 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001557 else {
Steve Dowercc16be82016-09-08 10:35:16 -07001558 Py_FileSystemDefaultEncoding = "utf-8";
1559 Py_FileSystemDefaultEncodeErrors = "surrogatepass";
1560 }
1561#else
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001562 if (Py_FileSystemDefaultEncoding == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001563 Py_FileSystemDefaultEncoding = get_locale_encoding();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001564 if (Py_FileSystemDefaultEncoding == NULL) {
1565 return _Py_INIT_ERR("Unable to get the locale encoding");
1566 }
Nick Coghland6009512014-11-20 21:39:37 +10001567
1568 Py_HasFileSystemDefaultEncoding = 0;
1569 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001570 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001571 }
Steve Dowercc16be82016-09-08 10:35:16 -07001572#endif
Nick Coghland6009512014-11-20 21:39:37 +10001573
1574 /* the encoding is mbcs, utf-8 or ascii */
1575 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
1576 if (!codec) {
1577 /* Such error can only occurs in critical situations: no more
1578 * memory, import a module of the standard library failed,
1579 * etc. */
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001580 return _Py_INIT_ERR("unable to load the file system codec");
Nick Coghland6009512014-11-20 21:39:37 +10001581 }
1582 Py_DECREF(codec);
1583 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001584 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001585}
1586
1587/* Import the site module (not into __main__ though) */
1588
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001589static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001590initsite(void)
1591{
1592 PyObject *m;
1593 m = PyImport_ImportModule("site");
1594 if (m == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001595 return _Py_INIT_USER_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001596 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001597 Py_DECREF(m);
1598 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001599}
1600
Victor Stinner874dbe82015-09-04 17:29:57 +02001601/* Check if a file descriptor is valid or not.
1602 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1603static int
1604is_valid_fd(int fd)
1605{
Victor Stinner1c4670e2017-05-04 00:45:56 +02001606#ifdef __APPLE__
1607 /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe
1608 and the other side of the pipe is closed, dup(1) succeed, whereas
1609 fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect
1610 such error. */
1611 struct stat st;
1612 return (fstat(fd, &st) == 0);
1613#else
Victor Stinner874dbe82015-09-04 17:29:57 +02001614 int fd2;
Steve Dower940f33a2016-09-08 11:21:54 -07001615 if (fd < 0)
Victor Stinner874dbe82015-09-04 17:29:57 +02001616 return 0;
1617 _Py_BEGIN_SUPPRESS_IPH
Victor Stinner449b2712015-09-29 13:59:50 +02001618 /* Prefer dup() over fstat(). fstat() can require input/output whereas
1619 dup() doesn't, there is a low risk of EMFILE/ENFILE at Python
1620 startup. */
Victor Stinner874dbe82015-09-04 17:29:57 +02001621 fd2 = dup(fd);
1622 if (fd2 >= 0)
1623 close(fd2);
1624 _Py_END_SUPPRESS_IPH
1625 return fd2 >= 0;
Victor Stinner1c4670e2017-05-04 00:45:56 +02001626#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001627}
1628
1629/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001630static PyObject*
1631create_stdio(PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001632 int fd, int write_mode, const char* name,
1633 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001634{
1635 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1636 const char* mode;
1637 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001638 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001639 int buffering, isatty;
1640 _Py_IDENTIFIER(open);
1641 _Py_IDENTIFIER(isatty);
1642 _Py_IDENTIFIER(TextIOWrapper);
1643 _Py_IDENTIFIER(mode);
1644
Victor Stinner874dbe82015-09-04 17:29:57 +02001645 if (!is_valid_fd(fd))
1646 Py_RETURN_NONE;
1647
Nick Coghland6009512014-11-20 21:39:37 +10001648 /* stdin is always opened in buffered mode, first because it shouldn't
1649 make a difference in common use cases, second because TextIOWrapper
1650 depends on the presence of a read1() method which only exists on
1651 buffered streams.
1652 */
1653 if (Py_UnbufferedStdioFlag && write_mode)
1654 buffering = 0;
1655 else
1656 buffering = -1;
1657 if (write_mode)
1658 mode = "wb";
1659 else
1660 mode = "rb";
1661 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1662 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001663 Py_None, Py_None, /* encoding, errors */
1664 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001665 if (buf == NULL)
1666 goto error;
1667
1668 if (buffering) {
1669 _Py_IDENTIFIER(raw);
1670 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1671 if (raw == NULL)
1672 goto error;
1673 }
1674 else {
1675 raw = buf;
1676 Py_INCREF(raw);
1677 }
1678
Steve Dower39294992016-08-30 21:22:36 -07001679#ifdef MS_WINDOWS
1680 /* Windows console IO is always UTF-8 encoded */
1681 if (PyWindowsConsoleIO_Check(raw))
1682 encoding = "utf-8";
1683#endif
1684
Nick Coghland6009512014-11-20 21:39:37 +10001685 text = PyUnicode_FromString(name);
1686 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1687 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001688 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001689 if (res == NULL)
1690 goto error;
1691 isatty = PyObject_IsTrue(res);
1692 Py_DECREF(res);
1693 if (isatty == -1)
1694 goto error;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001695 if (Py_UnbufferedStdioFlag)
1696 write_through = Py_True;
1697 else
1698 write_through = Py_False;
1699 if (isatty && !Py_UnbufferedStdioFlag)
Nick Coghland6009512014-11-20 21:39:37 +10001700 line_buffering = Py_True;
1701 else
1702 line_buffering = Py_False;
1703
1704 Py_CLEAR(raw);
1705 Py_CLEAR(text);
1706
1707#ifdef MS_WINDOWS
1708 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1709 newlines to "\n".
1710 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1711 newline = NULL;
1712#else
1713 /* sys.stdin: split lines at "\n".
1714 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1715 newline = "\n";
1716#endif
1717
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001718 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001719 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001720 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001721 Py_CLEAR(buf);
1722 if (stream == NULL)
1723 goto error;
1724
1725 if (write_mode)
1726 mode = "w";
1727 else
1728 mode = "r";
1729 text = PyUnicode_FromString(mode);
1730 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1731 goto error;
1732 Py_CLEAR(text);
1733 return stream;
1734
1735error:
1736 Py_XDECREF(buf);
1737 Py_XDECREF(stream);
1738 Py_XDECREF(text);
1739 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001740
Victor Stinner874dbe82015-09-04 17:29:57 +02001741 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1742 /* Issue #24891: the file descriptor was closed after the first
1743 is_valid_fd() check was called. Ignore the OSError and set the
1744 stream to None. */
1745 PyErr_Clear();
1746 Py_RETURN_NONE;
1747 }
1748 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001749}
1750
1751/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001752static _PyInitError
1753init_sys_streams(void)
Nick Coghland6009512014-11-20 21:39:37 +10001754{
1755 PyObject *iomod = NULL, *wrapper;
1756 PyObject *bimod = NULL;
1757 PyObject *m;
1758 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001759 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001760 PyObject * encoding_attr;
1761 char *pythonioencoding = NULL, *encoding, *errors;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001762 _PyInitError res = _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001763
1764 /* Hack to avoid a nasty recursion issue when Python is invoked
1765 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1766 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1767 goto error;
1768 }
1769 Py_DECREF(m);
1770
1771 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1772 goto error;
1773 }
1774 Py_DECREF(m);
1775
1776 if (!(bimod = PyImport_ImportModule("builtins"))) {
1777 goto error;
1778 }
1779
1780 if (!(iomod = PyImport_ImportModule("io"))) {
1781 goto error;
1782 }
1783 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1784 goto error;
1785 }
1786
1787 /* Set builtins.open */
1788 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1789 Py_DECREF(wrapper);
1790 goto error;
1791 }
1792 Py_DECREF(wrapper);
1793
1794 encoding = _Py_StandardStreamEncoding;
1795 errors = _Py_StandardStreamErrors;
1796 if (!encoding || !errors) {
Nick Coghland6009512014-11-20 21:39:37 +10001797 pythonioencoding = Py_GETENV("PYTHONIOENCODING");
1798 if (pythonioencoding) {
1799 char *err;
1800 pythonioencoding = _PyMem_Strdup(pythonioencoding);
1801 if (pythonioencoding == NULL) {
1802 PyErr_NoMemory();
1803 goto error;
1804 }
1805 err = strchr(pythonioencoding, ':');
1806 if (err) {
1807 *err = '\0';
1808 err++;
Serhiy Storchakafc435112016-04-10 14:34:13 +03001809 if (*err && !errors) {
Nick Coghland6009512014-11-20 21:39:37 +10001810 errors = err;
1811 }
1812 }
1813 if (*pythonioencoding && !encoding) {
1814 encoding = pythonioencoding;
1815 }
1816 }
Serhiy Storchakafc435112016-04-10 14:34:13 +03001817 if (!errors && !(pythonioencoding && *pythonioencoding)) {
Nick Coghlan6ea41862017-06-11 13:16:15 +10001818 /* Choose the default error handler based on the current locale */
1819 errors = get_default_standard_stream_error_handler();
Serhiy Storchakafc435112016-04-10 14:34:13 +03001820 }
Nick Coghland6009512014-11-20 21:39:37 +10001821 }
1822
1823 /* Set sys.stdin */
1824 fd = fileno(stdin);
1825 /* Under some conditions stdin, stdout and stderr may not be connected
1826 * and fileno() may point to an invalid file descriptor. For example
1827 * GUI apps don't have valid standard streams by default.
1828 */
Victor Stinner874dbe82015-09-04 17:29:57 +02001829 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1830 if (std == NULL)
1831 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001832 PySys_SetObject("__stdin__", std);
1833 _PySys_SetObjectId(&PyId_stdin, std);
1834 Py_DECREF(std);
1835
1836 /* Set sys.stdout */
1837 fd = fileno(stdout);
Victor Stinner874dbe82015-09-04 17:29:57 +02001838 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1839 if (std == NULL)
1840 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001841 PySys_SetObject("__stdout__", std);
1842 _PySys_SetObjectId(&PyId_stdout, std);
1843 Py_DECREF(std);
1844
1845#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1846 /* Set sys.stderr, replaces the preliminary stderr */
1847 fd = fileno(stderr);
Victor Stinner874dbe82015-09-04 17:29:57 +02001848 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1849 if (std == NULL)
1850 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001851
1852 /* Same as hack above, pre-import stderr's codec to avoid recursion
1853 when import.c tries to write to stderr in verbose mode. */
1854 encoding_attr = PyObject_GetAttrString(std, "encoding");
1855 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001856 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001857 if (std_encoding != NULL) {
1858 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1859 Py_XDECREF(codec_info);
1860 }
1861 Py_DECREF(encoding_attr);
1862 }
1863 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1864
1865 if (PySys_SetObject("__stderr__", std) < 0) {
1866 Py_DECREF(std);
1867 goto error;
1868 }
1869 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1870 Py_DECREF(std);
1871 goto error;
1872 }
1873 Py_DECREF(std);
1874#endif
1875
Victor Stinnera7368ac2017-11-15 18:11:45 -08001876 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001877
Victor Stinnera7368ac2017-11-15 18:11:45 -08001878error:
1879 res = _Py_INIT_ERR("can't initialize sys standard streams");
1880
1881done:
Nick Coghland6009512014-11-20 21:39:37 +10001882 /* We won't need them anymore. */
1883 if (_Py_StandardStreamEncoding) {
1884 PyMem_RawFree(_Py_StandardStreamEncoding);
1885 _Py_StandardStreamEncoding = NULL;
1886 }
1887 if (_Py_StandardStreamErrors) {
1888 PyMem_RawFree(_Py_StandardStreamErrors);
1889 _Py_StandardStreamErrors = NULL;
1890 }
1891 PyMem_Free(pythonioencoding);
1892 Py_XDECREF(bimod);
1893 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001894 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001895}
1896
1897
Victor Stinner10dc4842015-03-24 12:01:30 +01001898static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001899_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001900{
Victor Stinner10dc4842015-03-24 12:01:30 +01001901 fputc('\n', stderr);
1902 fflush(stderr);
1903
1904 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001905 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001906}
Victor Stinner791da1c2016-03-14 16:53:12 +01001907
1908/* Print the current exception (if an exception is set) with its traceback,
1909 or display the current Python stack.
1910
1911 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1912 called on catastrophic cases.
1913
1914 Return 1 if the traceback was displayed, 0 otherwise. */
1915
1916static int
1917_Py_FatalError_PrintExc(int fd)
1918{
1919 PyObject *ferr, *res;
1920 PyObject *exception, *v, *tb;
1921 int has_tb;
1922
1923 if (PyThreadState_GET() == NULL) {
1924 /* The GIL is released: trying to acquire it is likely to deadlock,
1925 just give up. */
1926 return 0;
1927 }
1928
1929 PyErr_Fetch(&exception, &v, &tb);
1930 if (exception == NULL) {
1931 /* No current exception */
1932 return 0;
1933 }
1934
1935 ferr = _PySys_GetObjectId(&PyId_stderr);
1936 if (ferr == NULL || ferr == Py_None) {
1937 /* sys.stderr is not set yet or set to None,
1938 no need to try to display the exception */
1939 return 0;
1940 }
1941
1942 PyErr_NormalizeException(&exception, &v, &tb);
1943 if (tb == NULL) {
1944 tb = Py_None;
1945 Py_INCREF(tb);
1946 }
1947 PyException_SetTraceback(v, tb);
1948 if (exception == NULL) {
1949 /* PyErr_NormalizeException() failed */
1950 return 0;
1951 }
1952
1953 has_tb = (tb != Py_None);
1954 PyErr_Display(exception, v, tb);
1955 Py_XDECREF(exception);
1956 Py_XDECREF(v);
1957 Py_XDECREF(tb);
1958
1959 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07001960 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01001961 if (res == NULL)
1962 PyErr_Clear();
1963 else
1964 Py_DECREF(res);
1965
1966 return has_tb;
1967}
1968
Nick Coghland6009512014-11-20 21:39:37 +10001969/* Print fatal error message and abort */
1970
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001971#ifdef MS_WINDOWS
1972static void
1973fatal_output_debug(const char *msg)
1974{
1975 /* buffer of 256 bytes allocated on the stack */
1976 WCHAR buffer[256 / sizeof(WCHAR)];
1977 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
1978 size_t msglen;
1979
1980 OutputDebugStringW(L"Fatal Python error: ");
1981
1982 msglen = strlen(msg);
1983 while (msglen) {
1984 size_t i;
1985
1986 if (buflen > msglen) {
1987 buflen = msglen;
1988 }
1989
1990 /* Convert the message to wchar_t. This uses a simple one-to-one
1991 conversion, assuming that the this error message actually uses
1992 ASCII only. If this ceases to be true, we will have to convert. */
1993 for (i=0; i < buflen; ++i) {
1994 buffer[i] = msg[i];
1995 }
1996 buffer[i] = L'\0';
1997 OutputDebugStringW(buffer);
1998
1999 msg += buflen;
2000 msglen -= buflen;
2001 }
2002 OutputDebugStringW(L"\n");
2003}
2004#endif
2005
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002006static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002007fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002008{
2009 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01002010 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002011
2012 if (reentrant) {
2013 /* Py_FatalError() caused a second fatal error.
2014 Example: flush_std_files() raises a recursion error. */
2015 goto exit;
2016 }
2017 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002018
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002019 fprintf(stderr, "Fatal Python error: ");
2020 if (prefix) {
2021 fputs(prefix, stderr);
2022 fputs(": ", stderr);
2023 }
2024 if (msg) {
2025 fputs(msg, stderr);
2026 }
2027 else {
2028 fprintf(stderr, "<message not set>");
2029 }
2030 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10002031 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01002032
Victor Stinnere0deff32015-03-24 13:46:18 +01002033 /* Print the exception (if an exception is set) with its traceback,
2034 * or display the current Python stack. */
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002035 if (!_Py_FatalError_PrintExc(fd)) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002036 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002037 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002038
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002039 /* The main purpose of faulthandler is to display the traceback.
2040 This function already did its best to display a traceback.
2041 Disable faulthandler to prevent writing a second traceback
2042 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002043 _PyFaulthandler_Fini();
2044
Victor Stinner791da1c2016-03-14 16:53:12 +01002045 /* Check if the current Python thread hold the GIL */
2046 if (PyThreadState_GET() != NULL) {
2047 /* Flush sys.stdout and sys.stderr */
2048 flush_std_files();
2049 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002050
Nick Coghland6009512014-11-20 21:39:37 +10002051#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002052 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002053#endif /* MS_WINDOWS */
2054
2055exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002056 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002057#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002058 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002059#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002060 abort();
2061 }
2062 else {
2063 exit(status);
2064 }
2065}
2066
2067void
2068Py_FatalError(const char *msg)
2069{
2070 fatal_error(NULL, msg, -1);
2071}
2072
2073void
2074_Py_FatalInitError(_PyInitError err)
2075{
2076 /* On "user" error: exit with status 1.
2077 For all other errors, call abort(). */
2078 int status = err.user_err ? 1 : -1;
2079 fatal_error(err.prefix, err.msg, status);
Nick Coghland6009512014-11-20 21:39:37 +10002080}
2081
2082/* Clean up and exit */
2083
Victor Stinnerd7292b52016-06-17 12:29:00 +02002084# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002085
Nick Coghland6009512014-11-20 21:39:37 +10002086/* For the atexit module. */
2087void _Py_PyAtExit(void (*func)(void))
2088{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002089 _PyRuntime.pyexitfunc = func;
Nick Coghland6009512014-11-20 21:39:37 +10002090}
2091
2092static void
2093call_py_exitfuncs(void)
2094{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002095 if (_PyRuntime.pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002096 return;
2097
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002098 (*_PyRuntime.pyexitfunc)();
Nick Coghland6009512014-11-20 21:39:37 +10002099 PyErr_Clear();
2100}
2101
2102/* Wait until threading._shutdown completes, provided
2103 the threading module was imported in the first place.
2104 The shutdown routine will wait until all non-daemon
2105 "threading" threads have completed. */
2106static void
2107wait_for_thread_shutdown(void)
2108{
Nick Coghland6009512014-11-20 21:39:37 +10002109 _Py_IDENTIFIER(_shutdown);
2110 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002111 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002112 if (threading == NULL) {
2113 /* threading not imported */
2114 PyErr_Clear();
2115 return;
2116 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002117 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002118 if (result == NULL) {
2119 PyErr_WriteUnraisable(threading);
2120 }
2121 else {
2122 Py_DECREF(result);
2123 }
2124 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002125}
2126
2127#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002128int Py_AtExit(void (*func)(void))
2129{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002130 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002131 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002132 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002133 return 0;
2134}
2135
2136static void
2137call_ll_exitfuncs(void)
2138{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002139 while (_PyRuntime.nexitfuncs > 0)
2140 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002141
2142 fflush(stdout);
2143 fflush(stderr);
2144}
2145
2146void
2147Py_Exit(int sts)
2148{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002149 if (Py_FinalizeEx() < 0) {
2150 sts = 120;
2151 }
Nick Coghland6009512014-11-20 21:39:37 +10002152
2153 exit(sts);
2154}
2155
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002156static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002157initsigs(void)
2158{
2159#ifdef SIGPIPE
2160 PyOS_setsig(SIGPIPE, SIG_IGN);
2161#endif
2162#ifdef SIGXFZ
2163 PyOS_setsig(SIGXFZ, SIG_IGN);
2164#endif
2165#ifdef SIGXFSZ
2166 PyOS_setsig(SIGXFSZ, SIG_IGN);
2167#endif
2168 PyOS_InitInterrupts(); /* May imply initsignal() */
2169 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002170 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002171 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002172 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002173}
2174
2175
2176/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2177 *
2178 * All of the code in this function must only use async-signal-safe functions,
2179 * listed at `man 7 signal` or
2180 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2181 */
2182void
2183_Py_RestoreSignals(void)
2184{
2185#ifdef SIGPIPE
2186 PyOS_setsig(SIGPIPE, SIG_DFL);
2187#endif
2188#ifdef SIGXFZ
2189 PyOS_setsig(SIGXFZ, SIG_DFL);
2190#endif
2191#ifdef SIGXFSZ
2192 PyOS_setsig(SIGXFSZ, SIG_DFL);
2193#endif
2194}
2195
2196
2197/*
2198 * The file descriptor fd is considered ``interactive'' if either
2199 * a) isatty(fd) is TRUE, or
2200 * b) the -i flag was given, and the filename associated with
2201 * the descriptor is NULL or "<stdin>" or "???".
2202 */
2203int
2204Py_FdIsInteractive(FILE *fp, const char *filename)
2205{
2206 if (isatty((int)fileno(fp)))
2207 return 1;
2208 if (!Py_InteractiveFlag)
2209 return 0;
2210 return (filename == NULL) ||
2211 (strcmp(filename, "<stdin>") == 0) ||
2212 (strcmp(filename, "???") == 0);
2213}
2214
2215
Nick Coghland6009512014-11-20 21:39:37 +10002216/* Wrappers around sigaction() or signal(). */
2217
2218PyOS_sighandler_t
2219PyOS_getsig(int sig)
2220{
2221#ifdef HAVE_SIGACTION
2222 struct sigaction context;
2223 if (sigaction(sig, NULL, &context) == -1)
2224 return SIG_ERR;
2225 return context.sa_handler;
2226#else
2227 PyOS_sighandler_t handler;
2228/* Special signal handling for the secure CRT in Visual Studio 2005 */
2229#if defined(_MSC_VER) && _MSC_VER >= 1400
2230 switch (sig) {
2231 /* Only these signals are valid */
2232 case SIGINT:
2233 case SIGILL:
2234 case SIGFPE:
2235 case SIGSEGV:
2236 case SIGTERM:
2237 case SIGBREAK:
2238 case SIGABRT:
2239 break;
2240 /* Don't call signal() with other values or it will assert */
2241 default:
2242 return SIG_ERR;
2243 }
2244#endif /* _MSC_VER && _MSC_VER >= 1400 */
2245 handler = signal(sig, SIG_IGN);
2246 if (handler != SIG_ERR)
2247 signal(sig, handler);
2248 return handler;
2249#endif
2250}
2251
2252/*
2253 * All of the code in this function must only use async-signal-safe functions,
2254 * listed at `man 7 signal` or
2255 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2256 */
2257PyOS_sighandler_t
2258PyOS_setsig(int sig, PyOS_sighandler_t handler)
2259{
2260#ifdef HAVE_SIGACTION
2261 /* Some code in Modules/signalmodule.c depends on sigaction() being
2262 * used here if HAVE_SIGACTION is defined. Fix that if this code
2263 * changes to invalidate that assumption.
2264 */
2265 struct sigaction context, ocontext;
2266 context.sa_handler = handler;
2267 sigemptyset(&context.sa_mask);
2268 context.sa_flags = 0;
2269 if (sigaction(sig, &context, &ocontext) == -1)
2270 return SIG_ERR;
2271 return ocontext.sa_handler;
2272#else
2273 PyOS_sighandler_t oldhandler;
2274 oldhandler = signal(sig, handler);
2275#ifdef HAVE_SIGINTERRUPT
2276 siginterrupt(sig, 1);
2277#endif
2278 return oldhandler;
2279#endif
2280}
2281
2282#ifdef __cplusplus
2283}
2284#endif