blob: a9b9470c726521e2b15b5cddce7a8167d534b24d [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 */
Yury Selivanovf23746a2018-01-22 19:11:18 -05007#include "internal/context.h"
8#include "internal/hamt.h"
Eric Snow2ebc5ce2017-09-07 23:51:28 -06009#include "internal/pystate.h"
Nick Coghland6009512014-11-20 21:39:37 +100010#include "grammar.h"
11#include "node.h"
12#include "token.h"
13#include "parsetok.h"
14#include "errcode.h"
15#include "code.h"
16#include "symtable.h"
17#include "ast.h"
18#include "marshal.h"
19#include "osdefs.h"
20#include <locale.h>
21
22#ifdef HAVE_SIGNAL_H
23#include <signal.h>
24#endif
25
26#ifdef MS_WINDOWS
27#include "malloc.h" /* for alloca */
28#endif
29
30#ifdef HAVE_LANGINFO_H
31#include <langinfo.h>
32#endif
33
34#ifdef MS_WINDOWS
35#undef BYTE
36#include "windows.h"
Steve Dower39294992016-08-30 21:22:36 -070037
38extern PyTypeObject PyWindowsConsoleIO_Type;
39#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
Nick Coghland6009512014-11-20 21:39:37 +100040#endif
41
42_Py_IDENTIFIER(flush);
43_Py_IDENTIFIER(name);
44_Py_IDENTIFIER(stdin);
45_Py_IDENTIFIER(stdout);
46_Py_IDENTIFIER(stderr);
Eric Snow3f9eee62017-09-15 16:35:20 -060047_Py_IDENTIFIER(threading);
Nick Coghland6009512014-11-20 21:39:37 +100048
49#ifdef __cplusplus
50extern "C" {
51#endif
52
Nick Coghland6009512014-11-20 21:39:37 +100053extern grammar _PyParser_Grammar; /* From graminit.c */
54
55/* Forward */
Victor Stinnerf7e5b562017-11-15 15:48:08 -080056static _PyInitError add_main_module(PyInterpreterState *interp);
57static _PyInitError initfsencoding(PyInterpreterState *interp);
58static _PyInitError initsite(void);
Victor Stinner91106cd2017-12-13 12:29:09 +010059static _PyInitError init_sys_streams(PyInterpreterState *interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -080060static _PyInitError initsigs(void);
Marcel Plch776407f2017-12-20 11:17:58 +010061static void call_py_exitfuncs(PyInterpreterState *);
Nick Coghland6009512014-11-20 21:39:37 +100062static void wait_for_thread_shutdown(void);
63static void call_ll_exitfuncs(void);
64extern int _PyUnicode_Init(void);
65extern int _PyStructSequence_Init(void);
66extern void _PyUnicode_Fini(void);
67extern int _PyLong_Init(void);
68extern void PyLong_Fini(void);
Victor Stinnera7368ac2017-11-15 18:11:45 -080069extern _PyInitError _PyFaulthandler_Init(int enable);
Nick Coghland6009512014-11-20 21:39:37 +100070extern void _PyFaulthandler_Fini(void);
71extern void _PyHash_Fini(void);
Victor Stinnera7368ac2017-11-15 18:11:45 -080072extern int _PyTraceMalloc_Init(int enable);
Nick Coghland6009512014-11-20 21:39:37 +100073extern int _PyTraceMalloc_Fini(void);
Eric Snowc7ec9982017-05-23 23:00:52 -070074extern void _Py_ReadyTypes(void);
Nick Coghland6009512014-11-20 21:39:37 +100075
Nick Coghland6009512014-11-20 21:39:37 +100076extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
77extern void _PyGILState_Fini(void);
Nick Coghland6009512014-11-20 21:39:37 +100078
Victor Stinnerf7e5b562017-11-15 15:48:08 -080079_PyRuntimeState _PyRuntime = _PyRuntimeState_INIT;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060080
Victor Stinnerf7e5b562017-11-15 15:48:08 -080081_PyInitError
Eric Snow2ebc5ce2017-09-07 23:51:28 -060082_PyRuntime_Initialize(void)
83{
84 /* XXX We only initialize once in the process, which aligns with
85 the static initialization of the former globals now found in
86 _PyRuntime. However, _PyRuntime *should* be initialized with
87 every Py_Initialize() call, but doing so breaks the runtime.
88 This is because the runtime state is not properly finalized
89 currently. */
90 static int initialized = 0;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080091 if (initialized) {
92 return _Py_INIT_OK();
93 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -060094 initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080095
96 return _PyRuntimeState_Init(&_PyRuntime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -060097}
98
99void
100_PyRuntime_Finalize(void)
101{
102 _PyRuntimeState_Fini(&_PyRuntime);
103}
104
105int
106_Py_IsFinalizing(void)
107{
108 return _PyRuntime.finalizing != NULL;
109}
110
Nick Coghland6009512014-11-20 21:39:37 +1000111/* Global configuration variable declarations are in pydebug.h */
112/* XXX (ncoghlan): move those declarations to pylifecycle.h? */
Benjamin Peterson0a37a302017-12-31 10:04:13 -0800113int Py_DebugFlag = 0; /* Needed by parser.c */
114int Py_VerboseFlag = 0; /* Needed by import.c */
115int Py_QuietFlag = 0; /* Needed by sysmodule.c */
116int Py_InteractiveFlag = 0; /* Needed by Py_FdIsInteractive() below */
117int Py_InspectFlag = 0; /* Needed to determine whether to exit at SystemExit */
Nick Coghland6009512014-11-20 21:39:37 +1000118int Py_OptimizeFlag = 0; /* Needed by compile.c */
Benjamin Peterson0a37a302017-12-31 10:04:13 -0800119int Py_NoSiteFlag = 0; /* Suppress 'import site' */
120int Py_BytesWarningFlag = 0; /* Warn on str(bytes) and str(buffer) */
121int Py_FrozenFlag = 0; /* Needed by getpath.c */
122int Py_IgnoreEnvironmentFlag = 0; /* e.g. PYTHONPATH, PYTHONHOME */
123int Py_DontWriteBytecodeFlag = 0; /* Suppress writing bytecode files (*.pyc) */
Nick Coghland6009512014-11-20 21:39:37 +1000124int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
125int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */
126int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */
127int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */
Steve Dowercc16be82016-09-08 10:35:16 -0700128#ifdef MS_WINDOWS
129int Py_LegacyWindowsFSEncodingFlag = 0; /* Uses mbcs instead of utf-8 */
Steve Dower39294992016-08-30 21:22:36 -0700130int Py_LegacyWindowsStdioFlag = 0; /* Uses FileIO instead of WindowsConsoleIO */
Steve Dowercc16be82016-09-08 10:35:16 -0700131#endif
Nick Coghland6009512014-11-20 21:39:37 +1000132
Nick Coghland6009512014-11-20 21:39:37 +1000133/* Hack to force loading of object files */
134int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
135 PyOS_mystrnicmp; /* Python/pystrcmp.o */
136
137/* PyModule_GetWarningsModule is no longer necessary as of 2.6
138since _warnings is builtin. This API should not be used. */
139PyObject *
140PyModule_GetWarningsModule(void)
141{
142 return PyImport_ImportModule("warnings");
143}
144
Eric Snowc7ec9982017-05-23 23:00:52 -0700145
Eric Snow1abcf672017-05-23 21:46:51 -0700146/* APIs to access the initialization flags
147 *
148 * Can be called prior to Py_Initialize.
149 */
Nick Coghland6009512014-11-20 21:39:37 +1000150
Eric Snow1abcf672017-05-23 21:46:51 -0700151int
152_Py_IsCoreInitialized(void)
153{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600154 return _PyRuntime.core_initialized;
Eric Snow1abcf672017-05-23 21:46:51 -0700155}
Nick Coghland6009512014-11-20 21:39:37 +1000156
157int
158Py_IsInitialized(void)
159{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600160 return _PyRuntime.initialized;
Nick Coghland6009512014-11-20 21:39:37 +1000161}
162
163/* Helper to allow an embedding application to override the normal
164 * mechanism that attempts to figure out an appropriate IO encoding
165 */
166
167static char *_Py_StandardStreamEncoding = NULL;
168static char *_Py_StandardStreamErrors = NULL;
169
170int
171Py_SetStandardStreamEncoding(const char *encoding, const char *errors)
172{
173 if (Py_IsInitialized()) {
174 /* This is too late to have any effect */
175 return -1;
176 }
Victor Stinner31e99082017-12-20 23:41:38 +0100177
178 int res = 0;
179
180 /* Py_SetStandardStreamEncoding() can be called before Py_Initialize(),
181 but Py_Initialize() can change the allocator. Use a known allocator
182 to be able to release the memory later. */
183 PyMemAllocatorEx old_alloc;
184 _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
185
Nick Coghland6009512014-11-20 21:39:37 +1000186 /* Can't call PyErr_NoMemory() on errors, as Python hasn't been
187 * initialised yet.
188 *
189 * However, the raw memory allocators are initialised appropriately
190 * as C static variables, so _PyMem_RawStrdup is OK even though
191 * Py_Initialize hasn't been called yet.
192 */
193 if (encoding) {
194 _Py_StandardStreamEncoding = _PyMem_RawStrdup(encoding);
195 if (!_Py_StandardStreamEncoding) {
Victor Stinner31e99082017-12-20 23:41:38 +0100196 res = -2;
197 goto done;
Nick Coghland6009512014-11-20 21:39:37 +1000198 }
199 }
200 if (errors) {
201 _Py_StandardStreamErrors = _PyMem_RawStrdup(errors);
202 if (!_Py_StandardStreamErrors) {
203 if (_Py_StandardStreamEncoding) {
204 PyMem_RawFree(_Py_StandardStreamEncoding);
205 }
Victor Stinner31e99082017-12-20 23:41:38 +0100206 res = -3;
207 goto done;
Nick Coghland6009512014-11-20 21:39:37 +1000208 }
209 }
Steve Dower39294992016-08-30 21:22:36 -0700210#ifdef MS_WINDOWS
211 if (_Py_StandardStreamEncoding) {
212 /* Overriding the stream encoding implies legacy streams */
213 Py_LegacyWindowsStdioFlag = 1;
214 }
215#endif
Victor Stinner31e99082017-12-20 23:41:38 +0100216
217done:
218 PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
219
220 return res;
Nick Coghland6009512014-11-20 21:39:37 +1000221}
222
Nick Coghlan6ea41862017-06-11 13:16:15 +1000223
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000224/* Global initializations. Can be undone by Py_FinalizeEx(). Don't
225 call this twice without an intervening Py_FinalizeEx() call. When
Nick Coghland6009512014-11-20 21:39:37 +1000226 initializations fail, a fatal error is issued and the function does
227 not return. On return, the first thread and interpreter state have
228 been created.
229
230 Locking: you must hold the interpreter lock while calling this.
231 (If the lock has not yet been initialized, that's equivalent to
232 having the lock, but you cannot use multiple threads.)
233
234*/
235
Nick Coghland6009512014-11-20 21:39:37 +1000236static char*
237get_codec_name(const char *encoding)
238{
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +0200239 const char *name_utf8;
240 char *name_str;
Nick Coghland6009512014-11-20 21:39:37 +1000241 PyObject *codec, *name = NULL;
242
243 codec = _PyCodec_Lookup(encoding);
244 if (!codec)
245 goto error;
246
247 name = _PyObject_GetAttrId(codec, &PyId_name);
248 Py_CLEAR(codec);
249 if (!name)
250 goto error;
251
Serhiy Storchaka06515832016-11-20 09:13:07 +0200252 name_utf8 = PyUnicode_AsUTF8(name);
Nick Coghland6009512014-11-20 21:39:37 +1000253 if (name_utf8 == NULL)
254 goto error;
255 name_str = _PyMem_RawStrdup(name_utf8);
256 Py_DECREF(name);
257 if (name_str == NULL) {
258 PyErr_NoMemory();
259 return NULL;
260 }
261 return name_str;
262
263error:
264 Py_XDECREF(codec);
265 Py_XDECREF(name);
266 return NULL;
267}
268
269static char*
270get_locale_encoding(void)
271{
Benjamin Petersondb610e92017-09-08 14:30:07 -0700272#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Nick Coghland6009512014-11-20 21:39:37 +1000273 char* codeset = nl_langinfo(CODESET);
274 if (!codeset || codeset[0] == '\0') {
275 PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty");
276 return NULL;
277 }
278 return get_codec_name(codeset);
Stefan Krah144da4e2016-04-26 01:56:50 +0200279#elif defined(__ANDROID__)
280 return get_codec_name("UTF-8");
Nick Coghland6009512014-11-20 21:39:37 +1000281#else
282 PyErr_SetNone(PyExc_NotImplementedError);
283 return NULL;
284#endif
285}
286
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800287static _PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700288initimport(PyInterpreterState *interp, PyObject *sysmod)
Nick Coghland6009512014-11-20 21:39:37 +1000289{
290 PyObject *importlib;
291 PyObject *impmod;
Nick Coghland6009512014-11-20 21:39:37 +1000292 PyObject *value;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800293 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +1000294
295 /* Import _importlib through its frozen version, _frozen_importlib. */
296 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800297 return _Py_INIT_ERR("can't import _frozen_importlib");
Nick Coghland6009512014-11-20 21:39:37 +1000298 }
299 else if (Py_VerboseFlag) {
300 PySys_FormatStderr("import _frozen_importlib # frozen\n");
301 }
302 importlib = PyImport_AddModule("_frozen_importlib");
303 if (importlib == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800304 return _Py_INIT_ERR("couldn't get _frozen_importlib from sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000305 }
306 interp->importlib = importlib;
307 Py_INCREF(interp->importlib);
308
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300309 interp->import_func = PyDict_GetItemString(interp->builtins, "__import__");
310 if (interp->import_func == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800311 return _Py_INIT_ERR("__import__ not found");
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300312 Py_INCREF(interp->import_func);
313
Victor Stinnercd6e6942015-09-18 09:11:57 +0200314 /* Import the _imp module */
Benjamin Petersonc65ef772018-01-29 11:33:57 -0800315 impmod = PyInit__imp();
Nick Coghland6009512014-11-20 21:39:37 +1000316 if (impmod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800317 return _Py_INIT_ERR("can't import _imp");
Nick Coghland6009512014-11-20 21:39:37 +1000318 }
319 else if (Py_VerboseFlag) {
Victor Stinnercd6e6942015-09-18 09:11:57 +0200320 PySys_FormatStderr("import _imp # builtin\n");
Nick Coghland6009512014-11-20 21:39:37 +1000321 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600322 if (_PyImport_SetModuleString("_imp", impmod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800323 return _Py_INIT_ERR("can't save _imp to sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000324 }
325
Victor Stinnercd6e6942015-09-18 09:11:57 +0200326 /* Install importlib as the implementation of import */
Nick Coghland6009512014-11-20 21:39:37 +1000327 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200328 if (value != NULL) {
329 Py_DECREF(value);
Eric Snow6b4be192017-05-22 21:36:03 -0700330 value = PyObject_CallMethod(importlib,
331 "_install_external_importers", "");
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200332 }
Nick Coghland6009512014-11-20 21:39:37 +1000333 if (value == NULL) {
334 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800335 return _Py_INIT_ERR("importlib install failed");
Nick Coghland6009512014-11-20 21:39:37 +1000336 }
337 Py_DECREF(value);
338 Py_DECREF(impmod);
339
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800340 err = _PyImportZip_Init();
341 if (_Py_INIT_FAILED(err)) {
342 return err;
343 }
344
345 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000346}
347
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800348static _PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700349initexternalimport(PyInterpreterState *interp)
350{
351 PyObject *value;
352 value = PyObject_CallMethod(interp->importlib,
353 "_install_external_importers", "");
354 if (value == NULL) {
355 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800356 return _Py_INIT_ERR("external importer setup failed");
Eric Snow1abcf672017-05-23 21:46:51 -0700357 }
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200358 Py_DECREF(value);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800359 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700360}
Nick Coghland6009512014-11-20 21:39:37 +1000361
Nick Coghlan6ea41862017-06-11 13:16:15 +1000362/* Helper functions to better handle the legacy C locale
363 *
364 * The legacy C locale assumes ASCII as the default text encoding, which
365 * causes problems not only for the CPython runtime, but also other
366 * components like GNU readline.
367 *
368 * Accordingly, when the CLI detects it, it attempts to coerce it to a
369 * more capable UTF-8 based alternative as follows:
370 *
371 * if (_Py_LegacyLocaleDetected()) {
372 * _Py_CoerceLegacyLocale();
373 * }
374 *
375 * See the documentation of the PYTHONCOERCECLOCALE setting for more details.
376 *
377 * Locale coercion also impacts the default error handler for the standard
378 * streams: while the usual default is "strict", the default for the legacy
379 * C locale and for any of the coercion target locales is "surrogateescape".
380 */
381
382int
383_Py_LegacyLocaleDetected(void)
384{
385#ifndef MS_WINDOWS
386 /* On non-Windows systems, the C locale is considered a legacy locale */
Nick Coghlaneb817952017-06-18 12:29:42 +1000387 /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat
388 * the POSIX locale as a simple alias for the C locale, so
389 * we may also want to check for that explicitly.
390 */
Nick Coghlan6ea41862017-06-11 13:16:15 +1000391 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
392 return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
393#else
394 /* Windows uses code pages instead of locales, so no locale is legacy */
395 return 0;
396#endif
397}
398
Nick Coghlaneb817952017-06-18 12:29:42 +1000399static const char *_C_LOCALE_WARNING =
400 "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
401 "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
402 "C.utf8, or UTF-8 (if available) as alternative Unicode-compatible "
403 "locales is recommended.\n";
404
Nick Coghlaneb817952017-06-18 12:29:42 +1000405static void
Victor Stinner94540602017-12-16 04:54:22 +0100406_emit_stderr_warning_for_legacy_locale(const _PyCoreConfig *core_config)
Nick Coghlaneb817952017-06-18 12:29:42 +1000407{
Victor Stinner94540602017-12-16 04:54:22 +0100408 if (core_config->coerce_c_locale_warn) {
Nick Coghlaneb817952017-06-18 12:29:42 +1000409 if (_Py_LegacyLocaleDetected()) {
410 fprintf(stderr, "%s", _C_LOCALE_WARNING);
411 }
412 }
413}
414
Nick Coghlan6ea41862017-06-11 13:16:15 +1000415typedef struct _CandidateLocale {
416 const char *locale_name; /* The locale to try as a coercion target */
417} _LocaleCoercionTarget;
418
419static _LocaleCoercionTarget _TARGET_LOCALES[] = {
420 {"C.UTF-8"},
421 {"C.utf8"},
Nick Coghlan18974c32017-06-30 00:48:14 +1000422 {"UTF-8"},
Nick Coghlan6ea41862017-06-11 13:16:15 +1000423 {NULL}
424};
425
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +0200426static const char *
Nick Coghlan6ea41862017-06-11 13:16:15 +1000427get_default_standard_stream_error_handler(void)
428{
429 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
430 if (ctype_loc != NULL) {
431 /* "surrogateescape" is the default in the legacy C locale */
432 if (strcmp(ctype_loc, "C") == 0) {
433 return "surrogateescape";
434 }
435
436#ifdef PY_COERCE_C_LOCALE
437 /* "surrogateescape" is the default in locale coercion target locales */
438 const _LocaleCoercionTarget *target = NULL;
439 for (target = _TARGET_LOCALES; target->locale_name; target++) {
440 if (strcmp(ctype_loc, target->locale_name) == 0) {
441 return "surrogateescape";
442 }
443 }
444#endif
445 }
446
447 /* Otherwise return NULL to request the typical default error handler */
448 return NULL;
449}
450
451#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100452static const char C_LOCALE_COERCION_WARNING[] =
Nick Coghlan6ea41862017-06-11 13:16:15 +1000453 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale "
454 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n";
455
456static void
Victor Stinner94540602017-12-16 04:54:22 +0100457_coerce_default_locale_settings(const _PyCoreConfig *config, const _LocaleCoercionTarget *target)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000458{
459 const char *newloc = target->locale_name;
460
461 /* Reset locale back to currently configured defaults */
xdegaye1588be62017-11-12 12:45:59 +0100462 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000463
464 /* Set the relevant locale environment variable */
465 if (setenv("LC_CTYPE", newloc, 1)) {
466 fprintf(stderr,
467 "Error setting LC_CTYPE, skipping C locale coercion\n");
468 return;
469 }
Victor Stinner94540602017-12-16 04:54:22 +0100470 if (config->coerce_c_locale_warn) {
471 fprintf(stderr, C_LOCALE_COERCION_WARNING, newloc);
Nick Coghlaneb817952017-06-18 12:29:42 +1000472 }
Nick Coghlan6ea41862017-06-11 13:16:15 +1000473
474 /* Reconfigure with the overridden environment variables */
xdegaye1588be62017-11-12 12:45:59 +0100475 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000476}
477#endif
478
479void
Victor Stinner94540602017-12-16 04:54:22 +0100480_Py_CoerceLegacyLocale(const _PyCoreConfig *config)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000481{
482#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100483 const char *locale_override = getenv("LC_ALL");
484 if (locale_override == NULL || *locale_override == '\0') {
485 /* LC_ALL is also not set (or is set to an empty string) */
486 const _LocaleCoercionTarget *target = NULL;
487 for (target = _TARGET_LOCALES; target->locale_name; target++) {
488 const char *new_locale = setlocale(LC_CTYPE,
489 target->locale_name);
490 if (new_locale != NULL) {
xdegaye1588be62017-11-12 12:45:59 +0100491#if !defined(__APPLE__) && !defined(__ANDROID__) && \
Victor Stinner94540602017-12-16 04:54:22 +0100492defined(HAVE_LANGINFO_H) && defined(CODESET)
493 /* Also ensure that nl_langinfo works in this locale */
494 char *codeset = nl_langinfo(CODESET);
495 if (!codeset || *codeset == '\0') {
496 /* CODESET is not set or empty, so skip coercion */
497 new_locale = NULL;
498 _Py_SetLocaleFromEnv(LC_CTYPE);
499 continue;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000500 }
Victor Stinner94540602017-12-16 04:54:22 +0100501#endif
502 /* Successfully configured locale, so make it the default */
503 _coerce_default_locale_settings(config, target);
504 return;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000505 }
506 }
507 }
508 /* No C locale warning here, as Py_Initialize will emit one later */
509#endif
510}
511
xdegaye1588be62017-11-12 12:45:59 +0100512/* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to
513 * isolate the idiosyncrasies of different libc implementations. It reads the
514 * appropriate environment variable and uses its value to select the locale for
515 * 'category'. */
516char *
517_Py_SetLocaleFromEnv(int category)
518{
519#ifdef __ANDROID__
520 const char *locale;
521 const char **pvar;
522#ifdef PY_COERCE_C_LOCALE
523 const char *coerce_c_locale;
524#endif
525 const char *utf8_locale = "C.UTF-8";
526 const char *env_var_set[] = {
527 "LC_ALL",
528 "LC_CTYPE",
529 "LANG",
530 NULL,
531 };
532
533 /* Android setlocale(category, "") doesn't check the environment variables
534 * and incorrectly sets the "C" locale at API 24 and older APIs. We only
535 * check the environment variables listed in env_var_set. */
536 for (pvar=env_var_set; *pvar; pvar++) {
537 locale = getenv(*pvar);
538 if (locale != NULL && *locale != '\0') {
539 if (strcmp(locale, utf8_locale) == 0 ||
540 strcmp(locale, "en_US.UTF-8") == 0) {
541 return setlocale(category, utf8_locale);
542 }
543 return setlocale(category, "C");
544 }
545 }
546
547 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
548 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
549 * Quote from POSIX section "8.2 Internationalization Variables":
550 * "4. If the LANG environment variable is not set or is set to the empty
551 * string, the implementation-defined default locale shall be used." */
552
553#ifdef PY_COERCE_C_LOCALE
554 coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
555 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
556 /* Some other ported code may check the environment variables (e.g. in
557 * extension modules), so we make sure that they match the locale
558 * configuration */
559 if (setenv("LC_CTYPE", utf8_locale, 1)) {
560 fprintf(stderr, "Warning: failed setting the LC_CTYPE "
561 "environment variable to %s\n", utf8_locale);
562 }
563 }
564#endif
565 return setlocale(category, utf8_locale);
566#else /* __ANDROID__ */
567 return setlocale(category, "");
568#endif /* __ANDROID__ */
569}
570
Nick Coghlan6ea41862017-06-11 13:16:15 +1000571
Eric Snow1abcf672017-05-23 21:46:51 -0700572/* Global initializations. Can be undone by Py_Finalize(). Don't
573 call this twice without an intervening Py_Finalize() call.
574
575 Every call to Py_InitializeCore, Py_Initialize or Py_InitializeEx
576 must have a corresponding call to Py_Finalize.
577
578 Locking: you must hold the interpreter lock while calling these APIs.
579 (If the lock has not yet been initialized, that's equivalent to
580 having the lock, but you cannot use multiple threads.)
581
582*/
583
584/* Begin interpreter initialization
585 *
586 * On return, the first thread and interpreter state have been created,
587 * but the compiler, signal handling, multithreading and
588 * multiple interpreter support, and codec infrastructure are not yet
589 * available.
590 *
591 * The import system will support builtin and frozen modules only.
592 * The only supported io is writing to sys.stderr
593 *
594 * If any operation invoked by this function fails, a fatal error is
595 * issued and the function does not return.
596 *
597 * Any code invoked from this function should *not* assume it has access
598 * to the Python C API (unless the API is explicitly listed as being
599 * safe to call without calling Py_Initialize first)
600 */
601
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800602_PyInitError
Victor Stinnerda273412017-12-15 01:46:02 +0100603_Py_InitializeCore(const _PyCoreConfig *core_config)
Nick Coghland6009512014-11-20 21:39:37 +1000604{
Victor Stinnerda273412017-12-15 01:46:02 +0100605 assert(core_config != NULL);
606
Nick Coghland6009512014-11-20 21:39:37 +1000607 PyInterpreterState *interp;
608 PyThreadState *tstate;
609 PyObject *bimod, *sysmod, *pstderr;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800610 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +1000611
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800612 err = _PyRuntime_Initialize();
613 if (_Py_INIT_FAILED(err)) {
614 return err;
615 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600616
Victor Stinner31e99082017-12-20 23:41:38 +0100617 if (core_config->allocator != NULL) {
618 if (_PyMem_SetupAllocators(core_config->allocator) < 0) {
619 return _Py_INIT_USER_ERR("Unknown PYTHONMALLOC allocator");
620 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800621 }
622
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600623 if (_PyRuntime.initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800624 return _Py_INIT_ERR("main interpreter already initialized");
Eric Snow1abcf672017-05-23 21:46:51 -0700625 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600626 if (_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800627 return _Py_INIT_ERR("runtime core already initialized");
Eric Snow1abcf672017-05-23 21:46:51 -0700628 }
629
630 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
631 * threads behave a little more gracefully at interpreter shutdown.
632 * We clobber it here so the new interpreter can start with a clean
633 * slate.
634 *
635 * However, this may still lead to misbehaviour if there are daemon
636 * threads still hanging around from a previous Py_Initialize/Finalize
637 * pair :(
638 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600639 _PyRuntime.finalizing = NULL;
640
Nick Coghlan6ea41862017-06-11 13:16:15 +1000641#ifndef MS_WINDOWS
Nick Coghland6009512014-11-20 21:39:37 +1000642 /* Set up the LC_CTYPE locale, so we can obtain
643 the locale's charset without having to switch
644 locales. */
xdegaye1588be62017-11-12 12:45:59 +0100645 _Py_SetLocaleFromEnv(LC_CTYPE);
Victor Stinner94540602017-12-16 04:54:22 +0100646 _emit_stderr_warning_for_legacy_locale(core_config);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000647#endif
Nick Coghland6009512014-11-20 21:39:37 +1000648
Victor Stinnerda273412017-12-15 01:46:02 +0100649 err = _Py_HashRandomization_Init(core_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800650 if (_Py_INIT_FAILED(err)) {
651 return err;
652 }
653
Victor Stinnerda273412017-12-15 01:46:02 +0100654 if (!core_config->use_hash_seed || core_config->hash_seed) {
Eric Snow1abcf672017-05-23 21:46:51 -0700655 /* Random or non-zero hash seed */
656 Py_HashRandomizationFlag = 1;
657 }
Nick Coghland6009512014-11-20 21:39:37 +1000658
Victor Stinnera7368ac2017-11-15 18:11:45 -0800659 err = _PyInterpreterState_Enable(&_PyRuntime);
660 if (_Py_INIT_FAILED(err)) {
661 return err;
662 }
663
Nick Coghland6009512014-11-20 21:39:37 +1000664 interp = PyInterpreterState_New();
Victor Stinnerda273412017-12-15 01:46:02 +0100665 if (interp == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800666 return _Py_INIT_ERR("can't make main interpreter");
Victor Stinnerda273412017-12-15 01:46:02 +0100667 }
668
669 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
670 return _Py_INIT_ERR("failed to copy core config");
671 }
Nick Coghland6009512014-11-20 21:39:37 +1000672
673 tstate = PyThreadState_New(interp);
674 if (tstate == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800675 return _Py_INIT_ERR("can't make first thread");
Nick Coghland6009512014-11-20 21:39:37 +1000676 (void) PyThreadState_Swap(tstate);
677
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000678 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
Nick Coghland6009512014-11-20 21:39:37 +1000679 destroying the GIL might fail when it is being referenced from
680 another running thread (see issue #9901).
681 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000682 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Nick Coghland6009512014-11-20 21:39:37 +1000683 _PyEval_FiniThreads();
Victor Stinner2914bb32018-01-29 11:57:45 +0100684
Nick Coghland6009512014-11-20 21:39:37 +1000685 /* Auto-thread-state API */
686 _PyGILState_Init(interp, tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000687
Victor Stinner2914bb32018-01-29 11:57:45 +0100688 /* Create the GIL */
689 PyEval_InitThreads();
690
Nick Coghland6009512014-11-20 21:39:37 +1000691 _Py_ReadyTypes();
692
Nick Coghland6009512014-11-20 21:39:37 +1000693 if (!_PyLong_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800694 return _Py_INIT_ERR("can't init longs");
Nick Coghland6009512014-11-20 21:39:37 +1000695
696 if (!PyByteArray_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800697 return _Py_INIT_ERR("can't init bytearray");
Nick Coghland6009512014-11-20 21:39:37 +1000698
699 if (!_PyFloat_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800700 return _Py_INIT_ERR("can't init float");
Nick Coghland6009512014-11-20 21:39:37 +1000701
Eric Snowd393c1b2017-09-14 12:18:12 -0600702 PyObject *modules = PyDict_New();
703 if (modules == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800704 return _Py_INIT_ERR("can't make modules dictionary");
Eric Snowd393c1b2017-09-14 12:18:12 -0600705 interp->modules = modules;
706
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800707 err = _PySys_BeginInit(&sysmod);
708 if (_Py_INIT_FAILED(err)) {
709 return err;
710 }
711
Eric Snowd393c1b2017-09-14 12:18:12 -0600712 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800713 if (interp->sysdict == NULL) {
714 return _Py_INIT_ERR("can't initialize sys dict");
715 }
716
Eric Snowd393c1b2017-09-14 12:18:12 -0600717 Py_INCREF(interp->sysdict);
718 PyDict_SetItemString(interp->sysdict, "modules", modules);
719 _PyImport_FixupBuiltin(sysmod, "sys", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000720
721 /* Init Unicode implementation; relies on the codec registry */
722 if (_PyUnicode_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800723 return _Py_INIT_ERR("can't initialize unicode");
Eric Snow1abcf672017-05-23 21:46:51 -0700724
Nick Coghland6009512014-11-20 21:39:37 +1000725 if (_PyStructSequence_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800726 return _Py_INIT_ERR("can't initialize structseq");
Nick Coghland6009512014-11-20 21:39:37 +1000727
728 bimod = _PyBuiltin_Init();
729 if (bimod == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800730 return _Py_INIT_ERR("can't initialize builtins modules");
Eric Snowd393c1b2017-09-14 12:18:12 -0600731 _PyImport_FixupBuiltin(bimod, "builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000732 interp->builtins = PyModule_GetDict(bimod);
733 if (interp->builtins == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800734 return _Py_INIT_ERR("can't initialize builtins dict");
Nick Coghland6009512014-11-20 21:39:37 +1000735 Py_INCREF(interp->builtins);
736
737 /* initialize builtin exceptions */
738 _PyExc_Init(bimod);
739
Nick Coghland6009512014-11-20 21:39:37 +1000740 /* Set up a preliminary stderr printer until we have enough
741 infrastructure for the io module in place. */
742 pstderr = PyFile_NewStdPrinter(fileno(stderr));
743 if (pstderr == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800744 return _Py_INIT_ERR("can't set preliminary stderr");
Nick Coghland6009512014-11-20 21:39:37 +1000745 _PySys_SetObjectId(&PyId_stderr, pstderr);
746 PySys_SetObject("__stderr__", pstderr);
747 Py_DECREF(pstderr);
748
Victor Stinner672b6ba2017-12-06 17:25:50 +0100749 err = _PyImport_Init(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800750 if (_Py_INIT_FAILED(err)) {
751 return err;
752 }
Nick Coghland6009512014-11-20 21:39:37 +1000753
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800754 err = _PyImportHooks_Init();
755 if (_Py_INIT_FAILED(err)) {
756 return err;
757 }
Nick Coghland6009512014-11-20 21:39:37 +1000758
759 /* Initialize _warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100760 if (_PyWarnings_Init() == NULL) {
Victor Stinner1f151112017-11-23 10:43:14 +0100761 return _Py_INIT_ERR("can't initialize warnings");
762 }
Nick Coghland6009512014-11-20 21:39:37 +1000763
Yury Selivanovf23746a2018-01-22 19:11:18 -0500764 if (!_PyContext_Init())
765 return _Py_INIT_ERR("can't init context");
766
Eric Snow1abcf672017-05-23 21:46:51 -0700767 /* This call sets up builtin and frozen import support */
768 if (!interp->core_config._disable_importlib) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800769 err = initimport(interp, sysmod);
770 if (_Py_INIT_FAILED(err)) {
771 return err;
772 }
Eric Snow1abcf672017-05-23 21:46:51 -0700773 }
774
775 /* Only when we get here is the runtime core fully initialized */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600776 _PyRuntime.core_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800777 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700778}
779
Eric Snowc7ec9982017-05-23 23:00:52 -0700780/* Update interpreter state based on supplied configuration settings
781 *
782 * After calling this function, most of the restrictions on the interpreter
783 * are lifted. The only remaining incomplete settings are those related
784 * to the main module (sys.argv[0], __main__ metadata)
785 *
786 * Calling this when the interpreter is not initializing, is already
787 * initialized or without a valid current thread state is a fatal error.
788 * Other errors should be reported as normal Python exceptions with a
789 * non-zero return code.
790 */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800791_PyInitError
792_Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -0700793{
794 PyInterpreterState *interp;
795 PyThreadState *tstate;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800796 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700797
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600798 if (!_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800799 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700800 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600801 if (_PyRuntime.initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800802 return _Py_INIT_ERR("main interpreter already initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700803 }
804
Eric Snow1abcf672017-05-23 21:46:51 -0700805 /* Get current thread state and interpreter pointer */
806 tstate = PyThreadState_GET();
807 if (!tstate)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800808 return _Py_INIT_ERR("failed to read thread state");
Eric Snow1abcf672017-05-23 21:46:51 -0700809 interp = tstate->interp;
810 if (!interp)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800811 return _Py_INIT_ERR("failed to get interpreter");
Eric Snow1abcf672017-05-23 21:46:51 -0700812
813 /* Now finish configuring the main interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +0100814 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
815 return _Py_INIT_ERR("failed to copy main interpreter config");
816 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700817
Eric Snow1abcf672017-05-23 21:46:51 -0700818 if (interp->core_config._disable_importlib) {
819 /* Special mode for freeze_importlib: run with no import system
820 *
821 * This means anything which needs support from extension modules
822 * or pure Python code in the standard library won't work.
823 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600824 _PyRuntime.initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800825 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700826 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100827
Victor Stinner33c377e2017-12-05 15:12:41 +0100828 if (_PyTime_Init() < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800829 return _Py_INIT_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100830 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200831
Victor Stinner41264f12017-12-15 02:05:29 +0100832 if (_PySys_EndInit(interp->sysdict, &interp->config) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800833 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100834 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800835
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800836 err = initexternalimport(interp);
837 if (_Py_INIT_FAILED(err)) {
838 return err;
839 }
Nick Coghland6009512014-11-20 21:39:37 +1000840
841 /* initialize the faulthandler module */
Victor Stinnera7368ac2017-11-15 18:11:45 -0800842 err = _PyFaulthandler_Init(interp->core_config.faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800843 if (_Py_INIT_FAILED(err)) {
844 return err;
845 }
Nick Coghland6009512014-11-20 21:39:37 +1000846
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800847 err = initfsencoding(interp);
848 if (_Py_INIT_FAILED(err)) {
849 return err;
850 }
Nick Coghland6009512014-11-20 21:39:37 +1000851
Victor Stinner1f151112017-11-23 10:43:14 +0100852 if (interp->config.install_signal_handlers) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800853 err = initsigs(); /* Signal handling stuff, including initintr() */
854 if (_Py_INIT_FAILED(err)) {
855 return err;
856 }
857 }
Nick Coghland6009512014-11-20 21:39:37 +1000858
Victor Stinnera7368ac2017-11-15 18:11:45 -0800859 if (_PyTraceMalloc_Init(interp->core_config.tracemalloc) < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800860 return _Py_INIT_ERR("can't initialize tracemalloc");
Nick Coghland6009512014-11-20 21:39:37 +1000861
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800862 err = add_main_module(interp);
863 if (_Py_INIT_FAILED(err)) {
864 return err;
865 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800866
Victor Stinner91106cd2017-12-13 12:29:09 +0100867 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -0800868 if (_Py_INIT_FAILED(err)) {
869 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800870 }
Nick Coghland6009512014-11-20 21:39:37 +1000871
872 /* Initialize warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100873 if (interp->config.warnoptions != NULL &&
874 PyList_Size(interp->config.warnoptions) > 0)
875 {
Nick Coghland6009512014-11-20 21:39:37 +1000876 PyObject *warnings_module = PyImport_ImportModule("warnings");
877 if (warnings_module == NULL) {
878 fprintf(stderr, "'import warnings' failed; traceback:\n");
879 PyErr_Print();
880 }
881 Py_XDECREF(warnings_module);
882 }
883
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600884 _PyRuntime.initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700885
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800886 if (!Py_NoSiteFlag) {
887 err = initsite(); /* Module site */
888 if (_Py_INIT_FAILED(err)) {
889 return err;
890 }
891 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800892 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000893}
894
Eric Snowc7ec9982017-05-23 23:00:52 -0700895#undef _INIT_DEBUG_PRINT
896
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800897_PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700898_Py_InitializeEx_Private(int install_sigs, int install_importlib)
899{
Victor Stinner9cfc0022017-12-20 19:36:46 +0100900 _PyCoreConfig config = _PyCoreConfig_INIT;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800901 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700902
Victor Stinner9cfc0022017-12-20 19:36:46 +0100903 config.ignore_environment = Py_IgnoreEnvironmentFlag;
904 config._disable_importlib = !install_importlib;
Eric Snowc7ec9982017-05-23 23:00:52 -0700905 config.install_signal_handlers = install_sigs;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800906
Victor Stinner9cfc0022017-12-20 19:36:46 +0100907 err = _PyCoreConfig_Read(&config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800908 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100909 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800910 }
911
Victor Stinner9cfc0022017-12-20 19:36:46 +0100912 err = _Py_InitializeCore(&config);
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100913 if (_Py_INIT_FAILED(err)) {
914 goto done;
915 }
916
Victor Stinner9cfc0022017-12-20 19:36:46 +0100917 _PyMainInterpreterConfig main_config = _PyMainInterpreterConfig_INIT;
918 err = _PyMainInterpreterConfig_Read(&main_config, &config);
919 if (!_Py_INIT_FAILED(err)) {
920 err = _Py_InitializeMainInterpreter(&main_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800921 }
Victor Stinner9cfc0022017-12-20 19:36:46 +0100922 _PyMainInterpreterConfig_Clear(&main_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800923 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100924 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800925 }
926
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100927 err = _Py_INIT_OK();
928
929done:
Victor Stinner9cfc0022017-12-20 19:36:46 +0100930 _PyCoreConfig_Clear(&config);
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100931 return err;
Eric Snow1abcf672017-05-23 21:46:51 -0700932}
933
934
935void
Nick Coghland6009512014-11-20 21:39:37 +1000936Py_InitializeEx(int install_sigs)
937{
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800938 _PyInitError err = _Py_InitializeEx_Private(install_sigs, 1);
939 if (_Py_INIT_FAILED(err)) {
940 _Py_FatalInitError(err);
941 }
Nick Coghland6009512014-11-20 21:39:37 +1000942}
943
944void
945Py_Initialize(void)
946{
947 Py_InitializeEx(1);
948}
949
950
951#ifdef COUNT_ALLOCS
952extern void dump_counts(FILE*);
953#endif
954
955/* Flush stdout and stderr */
956
957static int
958file_is_closed(PyObject *fobj)
959{
960 int r;
961 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
962 if (tmp == NULL) {
963 PyErr_Clear();
964 return 0;
965 }
966 r = PyObject_IsTrue(tmp);
967 Py_DECREF(tmp);
968 if (r < 0)
969 PyErr_Clear();
970 return r > 0;
971}
972
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000973static int
Nick Coghland6009512014-11-20 21:39:37 +1000974flush_std_files(void)
975{
976 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
977 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
978 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000979 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +1000980
981 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -0700982 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000983 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +1000984 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000985 status = -1;
986 }
Nick Coghland6009512014-11-20 21:39:37 +1000987 else
988 Py_DECREF(tmp);
989 }
990
991 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -0700992 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000993 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +1000994 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000995 status = -1;
996 }
Nick Coghland6009512014-11-20 21:39:37 +1000997 else
998 Py_DECREF(tmp);
999 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001000
1001 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001002}
1003
1004/* Undo the effect of Py_Initialize().
1005
1006 Beware: if multiple interpreter and/or thread states exist, these
1007 are not wiped out; only the current thread and interpreter state
1008 are deleted. But since everything else is deleted, those other
1009 interpreter and thread states should no longer be used.
1010
1011 (XXX We should do better, e.g. wipe out all interpreters and
1012 threads.)
1013
1014 Locking: as above.
1015
1016*/
1017
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001018int
1019Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001020{
1021 PyInterpreterState *interp;
1022 PyThreadState *tstate;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001023 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001024
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001025 if (!_PyRuntime.initialized)
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001026 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001027
1028 wait_for_thread_shutdown();
1029
Marcel Plch776407f2017-12-20 11:17:58 +01001030 /* Get current thread state and interpreter pointer */
1031 tstate = PyThreadState_GET();
1032 interp = tstate->interp;
1033
Nick Coghland6009512014-11-20 21:39:37 +10001034 /* The interpreter is still entirely intact at this point, and the
1035 * exit funcs may be relying on that. In particular, if some thread
1036 * or exit func is still waiting to do an import, the import machinery
1037 * expects Py_IsInitialized() to return true. So don't say the
1038 * interpreter is uninitialized until after the exit funcs have run.
1039 * Note that Threading.py uses an exit func to do a join on all the
1040 * threads created thru it, so this also protects pending imports in
1041 * the threads created via Threading.
1042 */
Nick Coghland6009512014-11-20 21:39:37 +10001043
Marcel Plch776407f2017-12-20 11:17:58 +01001044 call_py_exitfuncs(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001045
Victor Stinnerda273412017-12-15 01:46:02 +01001046 /* Copy the core config, PyInterpreterState_Delete() free
1047 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001048#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001049 int show_ref_count = interp->core_config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001050#endif
1051#ifdef Py_TRACE_REFS
Victor Stinnerda273412017-12-15 01:46:02 +01001052 int dump_refs = interp->core_config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001053#endif
1054#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001055 int malloc_stats = interp->core_config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001056#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001057
Nick Coghland6009512014-11-20 21:39:37 +10001058 /* Remaining threads (e.g. daemon threads) will automatically exit
1059 after taking the GIL (in PyEval_RestoreThread()). */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001060 _PyRuntime.finalizing = tstate;
1061 _PyRuntime.initialized = 0;
1062 _PyRuntime.core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001063
Victor Stinnere0deff32015-03-24 13:46:18 +01001064 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001065 if (flush_std_files() < 0) {
1066 status = -1;
1067 }
Nick Coghland6009512014-11-20 21:39:37 +10001068
1069 /* Disable signal handling */
1070 PyOS_FiniInterrupts();
1071
1072 /* Collect garbage. This may call finalizers; it's nice to call these
1073 * before all modules are destroyed.
1074 * XXX If a __del__ or weakref callback is triggered here, and tries to
1075 * XXX import a module, bad things can happen, because Python no
1076 * XXX longer believes it's initialized.
1077 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1078 * XXX is easy to provoke that way. I've also seen, e.g.,
1079 * XXX Exception exceptions.ImportError: 'No module named sha'
1080 * XXX in <function callback at 0x008F5718> ignored
1081 * XXX but I'm unclear on exactly how that one happens. In any case,
1082 * XXX I haven't seen a real-life report of either of these.
1083 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001084 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001085#ifdef COUNT_ALLOCS
1086 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1087 each collection might release some types from the type
1088 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001089 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001090 /* nothing */;
1091#endif
Eric Snowdae02762017-09-14 00:35:58 -07001092
Nick Coghland6009512014-11-20 21:39:37 +10001093 /* Destroy all modules */
1094 PyImport_Cleanup();
1095
Victor Stinnere0deff32015-03-24 13:46:18 +01001096 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001097 if (flush_std_files() < 0) {
1098 status = -1;
1099 }
Nick Coghland6009512014-11-20 21:39:37 +10001100
1101 /* Collect final garbage. This disposes of cycles created by
1102 * class definitions, for example.
1103 * XXX This is disabled because it caused too many problems. If
1104 * XXX a __del__ or weakref callback triggers here, Python code has
1105 * XXX a hard time running, because even the sys module has been
1106 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1107 * XXX One symptom is a sequence of information-free messages
1108 * XXX coming from threads (if a __del__ or callback is invoked,
1109 * XXX other threads can execute too, and any exception they encounter
1110 * XXX triggers a comedy of errors as subsystem after subsystem
1111 * XXX fails to find what it *expects* to find in sys to help report
1112 * XXX the exception and consequent unexpected failures). I've also
1113 * XXX seen segfaults then, after adding print statements to the
1114 * XXX Python code getting called.
1115 */
1116#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001117 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001118#endif
1119
1120 /* Disable tracemalloc after all Python objects have been destroyed,
1121 so it is possible to use tracemalloc in objects destructor. */
1122 _PyTraceMalloc_Fini();
1123
1124 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1125 _PyImport_Fini();
1126
1127 /* Cleanup typeobject.c's internal caches. */
1128 _PyType_Fini();
1129
1130 /* unload faulthandler module */
1131 _PyFaulthandler_Fini();
1132
1133 /* Debugging stuff */
1134#ifdef COUNT_ALLOCS
Serhiy Storchaka7e160ce2016-07-03 21:03:53 +03001135 dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001136#endif
1137 /* dump hash stats */
1138 _PyHash_Fini();
1139
Eric Snowdae02762017-09-14 00:35:58 -07001140#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001141 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001142 _PyDebug_PrintTotalRefs();
1143 }
Eric Snowdae02762017-09-14 00:35:58 -07001144#endif
Nick Coghland6009512014-11-20 21:39:37 +10001145
1146#ifdef Py_TRACE_REFS
1147 /* Display all objects still alive -- this can invoke arbitrary
1148 * __repr__ overrides, so requires a mostly-intact interpreter.
1149 * Alas, a lot of stuff may still be alive now that will be cleaned
1150 * up later.
1151 */
Victor Stinnerda273412017-12-15 01:46:02 +01001152 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001153 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001154 }
Nick Coghland6009512014-11-20 21:39:37 +10001155#endif /* Py_TRACE_REFS */
1156
1157 /* Clear interpreter state and all thread states. */
1158 PyInterpreterState_Clear(interp);
1159
1160 /* Now we decref the exception classes. After this point nothing
1161 can raise an exception. That's okay, because each Fini() method
1162 below has been checked to make sure no exceptions are ever
1163 raised.
1164 */
1165
1166 _PyExc_Fini();
1167
1168 /* Sundry finalizers */
1169 PyMethod_Fini();
1170 PyFrame_Fini();
1171 PyCFunction_Fini();
1172 PyTuple_Fini();
1173 PyList_Fini();
1174 PySet_Fini();
1175 PyBytes_Fini();
1176 PyByteArray_Fini();
1177 PyLong_Fini();
1178 PyFloat_Fini();
1179 PyDict_Fini();
1180 PySlice_Fini();
1181 _PyGC_Fini();
Eric Snow6b4be192017-05-22 21:36:03 -07001182 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001183 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001184 PyAsyncGen_Fini();
Yury Selivanovf23746a2018-01-22 19:11:18 -05001185 _PyContext_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001186
1187 /* Cleanup Unicode implementation */
1188 _PyUnicode_Fini();
1189
1190 /* reset file system default encoding */
1191 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
1192 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
1193 Py_FileSystemDefaultEncoding = NULL;
1194 }
1195
1196 /* XXX Still allocated:
1197 - various static ad-hoc pointers to interned strings
1198 - int and float free list blocks
1199 - whatever various modules and libraries allocate
1200 */
1201
1202 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1203
1204 /* Cleanup auto-thread-state */
Nick Coghland6009512014-11-20 21:39:37 +10001205 _PyGILState_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001206
1207 /* Delete current thread. After this, many C API calls become crashy. */
1208 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001209
Nick Coghland6009512014-11-20 21:39:37 +10001210 PyInterpreterState_Delete(interp);
1211
1212#ifdef Py_TRACE_REFS
1213 /* Display addresses (& refcnts) of all objects still alive.
1214 * An address can be used to find the repr of the object, printed
1215 * above by _Py_PrintReferences.
1216 */
Victor Stinnerda273412017-12-15 01:46:02 +01001217 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001218 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001219 }
Nick Coghland6009512014-11-20 21:39:37 +10001220#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001221#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001222 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001223 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be8072016-03-14 12:04:26 +01001224 }
Nick Coghland6009512014-11-20 21:39:37 +10001225#endif
1226
1227 call_ll_exitfuncs();
Victor Stinner9316ee42017-11-25 03:17:57 +01001228
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001229 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001230 return status;
1231}
1232
1233void
1234Py_Finalize(void)
1235{
1236 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001237}
1238
1239/* Create and initialize a new interpreter and thread, and return the
1240 new thread. This requires that Py_Initialize() has been called
1241 first.
1242
1243 Unsuccessful initialization yields a NULL pointer. Note that *no*
1244 exception information is available even in this case -- the
1245 exception information is held in the thread, and there is no
1246 thread.
1247
1248 Locking: as above.
1249
1250*/
1251
Victor Stinnera7368ac2017-11-15 18:11:45 -08001252static _PyInitError
1253new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001254{
1255 PyInterpreterState *interp;
1256 PyThreadState *tstate, *save_tstate;
1257 PyObject *bimod, *sysmod;
Victor Stinner9316ee42017-11-25 03:17:57 +01001258 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001259
Victor Stinnera7368ac2017-11-15 18:11:45 -08001260 if (!_PyRuntime.initialized) {
1261 return _Py_INIT_ERR("Py_Initialize must be called first");
1262 }
Nick Coghland6009512014-11-20 21:39:37 +10001263
Victor Stinner8a1be612016-03-14 22:07:55 +01001264 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1265 interpreters: disable PyGILState_Check(). */
1266 _PyGILState_check_enabled = 0;
1267
Nick Coghland6009512014-11-20 21:39:37 +10001268 interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001269 if (interp == NULL) {
1270 *tstate_p = NULL;
1271 return _Py_INIT_OK();
1272 }
Nick Coghland6009512014-11-20 21:39:37 +10001273
1274 tstate = PyThreadState_New(interp);
1275 if (tstate == NULL) {
1276 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001277 *tstate_p = NULL;
1278 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001279 }
1280
1281 save_tstate = PyThreadState_Swap(tstate);
1282
Eric Snow1abcf672017-05-23 21:46:51 -07001283 /* Copy the current interpreter config into the new interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +01001284 _PyCoreConfig *core_config;
1285 _PyMainInterpreterConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001286 if (save_tstate != NULL) {
Victor Stinnerda273412017-12-15 01:46:02 +01001287 core_config = &save_tstate->interp->core_config;
1288 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001289 } else {
1290 /* No current thread state, copy from the main interpreter */
1291 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinnerda273412017-12-15 01:46:02 +01001292 core_config = &main_interp->core_config;
1293 config = &main_interp->config;
1294 }
1295
1296 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
1297 return _Py_INIT_ERR("failed to copy core config");
1298 }
1299 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
1300 return _Py_INIT_ERR("failed to copy main interpreter config");
Eric Snow1abcf672017-05-23 21:46:51 -07001301 }
1302
Nick Coghland6009512014-11-20 21:39:37 +10001303 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001304 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001305 if (modules == NULL) {
1306 return _Py_INIT_ERR("can't make modules dictionary");
1307 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001308 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001309
Eric Snowd393c1b2017-09-14 12:18:12 -06001310 sysmod = _PyImport_FindBuiltin("sys", modules);
1311 if (sysmod != NULL) {
1312 interp->sysdict = PyModule_GetDict(sysmod);
1313 if (interp->sysdict == NULL)
1314 goto handle_error;
1315 Py_INCREF(interp->sysdict);
1316 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner41264f12017-12-15 02:05:29 +01001317 _PySys_EndInit(interp->sysdict, &interp->config);
Eric Snowd393c1b2017-09-14 12:18:12 -06001318 }
1319
1320 bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001321 if (bimod != NULL) {
1322 interp->builtins = PyModule_GetDict(bimod);
1323 if (interp->builtins == NULL)
1324 goto handle_error;
1325 Py_INCREF(interp->builtins);
1326 }
1327
1328 /* initialize builtin exceptions */
1329 _PyExc_Init(bimod);
1330
Nick Coghland6009512014-11-20 21:39:37 +10001331 if (bimod != NULL && sysmod != NULL) {
1332 PyObject *pstderr;
1333
Nick Coghland6009512014-11-20 21:39:37 +10001334 /* Set up a preliminary stderr printer until we have enough
1335 infrastructure for the io module in place. */
1336 pstderr = PyFile_NewStdPrinter(fileno(stderr));
Victor Stinnera7368ac2017-11-15 18:11:45 -08001337 if (pstderr == NULL) {
1338 return _Py_INIT_ERR("can't set preliminary stderr");
1339 }
Nick Coghland6009512014-11-20 21:39:37 +10001340 _PySys_SetObjectId(&PyId_stderr, pstderr);
1341 PySys_SetObject("__stderr__", pstderr);
1342 Py_DECREF(pstderr);
1343
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001344 err = _PyImportHooks_Init();
1345 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001346 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001347 }
Nick Coghland6009512014-11-20 21:39:37 +10001348
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001349 err = initimport(interp, sysmod);
1350 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001351 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001352 }
Nick Coghland6009512014-11-20 21:39:37 +10001353
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001354 err = initexternalimport(interp);
1355 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001356 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001357 }
Nick Coghland6009512014-11-20 21:39:37 +10001358
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001359 err = initfsencoding(interp);
1360 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001361 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001362 }
1363
Victor Stinner91106cd2017-12-13 12:29:09 +01001364 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001365 if (_Py_INIT_FAILED(err)) {
1366 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001367 }
1368
1369 err = add_main_module(interp);
1370 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001371 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001372 }
1373
1374 if (!Py_NoSiteFlag) {
1375 err = initsite();
1376 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001377 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001378 }
1379 }
Nick Coghland6009512014-11-20 21:39:37 +10001380 }
1381
Victor Stinnera7368ac2017-11-15 18:11:45 -08001382 if (PyErr_Occurred()) {
1383 goto handle_error;
1384 }
Nick Coghland6009512014-11-20 21:39:37 +10001385
Victor Stinnera7368ac2017-11-15 18:11:45 -08001386 *tstate_p = tstate;
1387 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001388
Nick Coghland6009512014-11-20 21:39:37 +10001389handle_error:
1390 /* Oops, it didn't work. Undo it all. */
1391
1392 PyErr_PrintEx(0);
1393 PyThreadState_Clear(tstate);
1394 PyThreadState_Swap(save_tstate);
1395 PyThreadState_Delete(tstate);
1396 PyInterpreterState_Delete(interp);
1397
Victor Stinnera7368ac2017-11-15 18:11:45 -08001398 *tstate_p = NULL;
1399 return _Py_INIT_OK();
1400}
1401
1402PyThreadState *
1403Py_NewInterpreter(void)
1404{
1405 PyThreadState *tstate;
1406 _PyInitError err = new_interpreter(&tstate);
1407 if (_Py_INIT_FAILED(err)) {
1408 _Py_FatalInitError(err);
1409 }
1410 return tstate;
1411
Nick Coghland6009512014-11-20 21:39:37 +10001412}
1413
1414/* Delete an interpreter and its last thread. This requires that the
1415 given thread state is current, that the thread has no remaining
1416 frames, and that it is its interpreter's only remaining thread.
1417 It is a fatal error to violate these constraints.
1418
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001419 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001420 everything, regardless.)
1421
1422 Locking: as above.
1423
1424*/
1425
1426void
1427Py_EndInterpreter(PyThreadState *tstate)
1428{
1429 PyInterpreterState *interp = tstate->interp;
1430
1431 if (tstate != PyThreadState_GET())
1432 Py_FatalError("Py_EndInterpreter: thread is not current");
1433 if (tstate->frame != NULL)
1434 Py_FatalError("Py_EndInterpreter: thread still has a frame");
1435
1436 wait_for_thread_shutdown();
1437
Marcel Plch776407f2017-12-20 11:17:58 +01001438 call_py_exitfuncs(interp);
1439
Nick Coghland6009512014-11-20 21:39:37 +10001440 if (tstate != interp->tstate_head || tstate->next != NULL)
1441 Py_FatalError("Py_EndInterpreter: not the last thread");
1442
1443 PyImport_Cleanup();
1444 PyInterpreterState_Clear(interp);
1445 PyThreadState_Swap(NULL);
1446 PyInterpreterState_Delete(interp);
1447}
1448
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001449/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001450
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001451static _PyInitError
1452add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001453{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001454 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001455 m = PyImport_AddModule("__main__");
1456 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001457 return _Py_INIT_ERR("can't create __main__ module");
1458
Nick Coghland6009512014-11-20 21:39:37 +10001459 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001460 ann_dict = PyDict_New();
1461 if ((ann_dict == NULL) ||
1462 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001463 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001464 }
1465 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001466
Nick Coghland6009512014-11-20 21:39:37 +10001467 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1468 PyObject *bimod = PyImport_ImportModule("builtins");
1469 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001470 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001471 }
1472 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001473 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001474 }
1475 Py_DECREF(bimod);
1476 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001477
Nick Coghland6009512014-11-20 21:39:37 +10001478 /* Main is a little special - imp.is_builtin("__main__") will return
1479 * False, but BuiltinImporter is still the most appropriate initial
1480 * setting for its __loader__ attribute. A more suitable value will
1481 * be set if __main__ gets further initialized later in the startup
1482 * process.
1483 */
1484 loader = PyDict_GetItemString(d, "__loader__");
1485 if (loader == NULL || loader == Py_None) {
1486 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1487 "BuiltinImporter");
1488 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001489 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001490 }
1491 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001492 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001493 }
1494 Py_DECREF(loader);
1495 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001496 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001497}
1498
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001499static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001500initfsencoding(PyInterpreterState *interp)
1501{
1502 PyObject *codec;
1503
Steve Dowercc16be82016-09-08 10:35:16 -07001504#ifdef MS_WINDOWS
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001505 if (Py_LegacyWindowsFSEncodingFlag) {
Steve Dowercc16be82016-09-08 10:35:16 -07001506 Py_FileSystemDefaultEncoding = "mbcs";
1507 Py_FileSystemDefaultEncodeErrors = "replace";
1508 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001509 else {
Steve Dowercc16be82016-09-08 10:35:16 -07001510 Py_FileSystemDefaultEncoding = "utf-8";
1511 Py_FileSystemDefaultEncodeErrors = "surrogatepass";
1512 }
1513#else
Victor Stinner91106cd2017-12-13 12:29:09 +01001514 if (Py_FileSystemDefaultEncoding == NULL &&
1515 interp->core_config.utf8_mode)
1516 {
1517 Py_FileSystemDefaultEncoding = "utf-8";
1518 Py_HasFileSystemDefaultEncoding = 1;
1519 }
1520 else if (Py_FileSystemDefaultEncoding == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001521 Py_FileSystemDefaultEncoding = get_locale_encoding();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001522 if (Py_FileSystemDefaultEncoding == NULL) {
1523 return _Py_INIT_ERR("Unable to get the locale encoding");
1524 }
Nick Coghland6009512014-11-20 21:39:37 +10001525
1526 Py_HasFileSystemDefaultEncoding = 0;
1527 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001528 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001529 }
Steve Dowercc16be82016-09-08 10:35:16 -07001530#endif
Nick Coghland6009512014-11-20 21:39:37 +10001531
1532 /* the encoding is mbcs, utf-8 or ascii */
1533 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
1534 if (!codec) {
1535 /* Such error can only occurs in critical situations: no more
1536 * memory, import a module of the standard library failed,
1537 * etc. */
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001538 return _Py_INIT_ERR("unable to load the file system codec");
Nick Coghland6009512014-11-20 21:39:37 +10001539 }
1540 Py_DECREF(codec);
1541 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001542 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001543}
1544
1545/* Import the site module (not into __main__ though) */
1546
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001547static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001548initsite(void)
1549{
1550 PyObject *m;
1551 m = PyImport_ImportModule("site");
1552 if (m == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001553 return _Py_INIT_USER_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001554 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001555 Py_DECREF(m);
1556 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001557}
1558
Victor Stinner874dbe82015-09-04 17:29:57 +02001559/* Check if a file descriptor is valid or not.
1560 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1561static int
1562is_valid_fd(int fd)
1563{
Victor Stinner1c4670e2017-05-04 00:45:56 +02001564#ifdef __APPLE__
1565 /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe
1566 and the other side of the pipe is closed, dup(1) succeed, whereas
1567 fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect
1568 such error. */
1569 struct stat st;
1570 return (fstat(fd, &st) == 0);
1571#else
Victor Stinner874dbe82015-09-04 17:29:57 +02001572 int fd2;
Steve Dower940f33a2016-09-08 11:21:54 -07001573 if (fd < 0)
Victor Stinner874dbe82015-09-04 17:29:57 +02001574 return 0;
1575 _Py_BEGIN_SUPPRESS_IPH
Victor Stinner449b2712015-09-29 13:59:50 +02001576 /* Prefer dup() over fstat(). fstat() can require input/output whereas
1577 dup() doesn't, there is a low risk of EMFILE/ENFILE at Python
1578 startup. */
Victor Stinner874dbe82015-09-04 17:29:57 +02001579 fd2 = dup(fd);
1580 if (fd2 >= 0)
1581 close(fd2);
1582 _Py_END_SUPPRESS_IPH
1583 return fd2 >= 0;
Victor Stinner1c4670e2017-05-04 00:45:56 +02001584#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001585}
1586
1587/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001588static PyObject*
1589create_stdio(PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001590 int fd, int write_mode, const char* name,
1591 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001592{
1593 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1594 const char* mode;
1595 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001596 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001597 int buffering, isatty;
1598 _Py_IDENTIFIER(open);
1599 _Py_IDENTIFIER(isatty);
1600 _Py_IDENTIFIER(TextIOWrapper);
1601 _Py_IDENTIFIER(mode);
1602
Victor Stinner874dbe82015-09-04 17:29:57 +02001603 if (!is_valid_fd(fd))
1604 Py_RETURN_NONE;
1605
Nick Coghland6009512014-11-20 21:39:37 +10001606 /* stdin is always opened in buffered mode, first because it shouldn't
1607 make a difference in common use cases, second because TextIOWrapper
1608 depends on the presence of a read1() method which only exists on
1609 buffered streams.
1610 */
1611 if (Py_UnbufferedStdioFlag && write_mode)
1612 buffering = 0;
1613 else
1614 buffering = -1;
1615 if (write_mode)
1616 mode = "wb";
1617 else
1618 mode = "rb";
1619 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1620 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001621 Py_None, Py_None, /* encoding, errors */
1622 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001623 if (buf == NULL)
1624 goto error;
1625
1626 if (buffering) {
1627 _Py_IDENTIFIER(raw);
1628 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1629 if (raw == NULL)
1630 goto error;
1631 }
1632 else {
1633 raw = buf;
1634 Py_INCREF(raw);
1635 }
1636
Steve Dower39294992016-08-30 21:22:36 -07001637#ifdef MS_WINDOWS
1638 /* Windows console IO is always UTF-8 encoded */
1639 if (PyWindowsConsoleIO_Check(raw))
1640 encoding = "utf-8";
1641#endif
1642
Nick Coghland6009512014-11-20 21:39:37 +10001643 text = PyUnicode_FromString(name);
1644 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1645 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001646 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001647 if (res == NULL)
1648 goto error;
1649 isatty = PyObject_IsTrue(res);
1650 Py_DECREF(res);
1651 if (isatty == -1)
1652 goto error;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001653 if (Py_UnbufferedStdioFlag)
1654 write_through = Py_True;
1655 else
1656 write_through = Py_False;
1657 if (isatty && !Py_UnbufferedStdioFlag)
Nick Coghland6009512014-11-20 21:39:37 +10001658 line_buffering = Py_True;
1659 else
1660 line_buffering = Py_False;
1661
1662 Py_CLEAR(raw);
1663 Py_CLEAR(text);
1664
1665#ifdef MS_WINDOWS
1666 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1667 newlines to "\n".
1668 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1669 newline = NULL;
1670#else
1671 /* sys.stdin: split lines at "\n".
1672 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1673 newline = "\n";
1674#endif
1675
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001676 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001677 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001678 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001679 Py_CLEAR(buf);
1680 if (stream == NULL)
1681 goto error;
1682
1683 if (write_mode)
1684 mode = "w";
1685 else
1686 mode = "r";
1687 text = PyUnicode_FromString(mode);
1688 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1689 goto error;
1690 Py_CLEAR(text);
1691 return stream;
1692
1693error:
1694 Py_XDECREF(buf);
1695 Py_XDECREF(stream);
1696 Py_XDECREF(text);
1697 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001698
Victor Stinner874dbe82015-09-04 17:29:57 +02001699 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1700 /* Issue #24891: the file descriptor was closed after the first
1701 is_valid_fd() check was called. Ignore the OSError and set the
1702 stream to None. */
1703 PyErr_Clear();
1704 Py_RETURN_NONE;
1705 }
1706 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001707}
1708
1709/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001710static _PyInitError
Victor Stinner91106cd2017-12-13 12:29:09 +01001711init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001712{
1713 PyObject *iomod = NULL, *wrapper;
1714 PyObject *bimod = NULL;
1715 PyObject *m;
1716 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001717 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001718 PyObject * encoding_attr;
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +02001719 char *pythonioencoding = NULL;
1720 const char *encoding, *errors;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001721 _PyInitError res = _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001722
1723 /* Hack to avoid a nasty recursion issue when Python is invoked
1724 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1725 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1726 goto error;
1727 }
1728 Py_DECREF(m);
1729
1730 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1731 goto error;
1732 }
1733 Py_DECREF(m);
1734
1735 if (!(bimod = PyImport_ImportModule("builtins"))) {
1736 goto error;
1737 }
1738
1739 if (!(iomod = PyImport_ImportModule("io"))) {
1740 goto error;
1741 }
1742 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1743 goto error;
1744 }
1745
1746 /* Set builtins.open */
1747 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1748 Py_DECREF(wrapper);
1749 goto error;
1750 }
1751 Py_DECREF(wrapper);
1752
1753 encoding = _Py_StandardStreamEncoding;
1754 errors = _Py_StandardStreamErrors;
1755 if (!encoding || !errors) {
Victor Stinner91106cd2017-12-13 12:29:09 +01001756 char *opt = Py_GETENV("PYTHONIOENCODING");
1757 if (opt && opt[0] != '\0') {
Nick Coghland6009512014-11-20 21:39:37 +10001758 char *err;
Victor Stinner91106cd2017-12-13 12:29:09 +01001759 pythonioencoding = _PyMem_Strdup(opt);
Nick Coghland6009512014-11-20 21:39:37 +10001760 if (pythonioencoding == NULL) {
1761 PyErr_NoMemory();
1762 goto error;
1763 }
1764 err = strchr(pythonioencoding, ':');
1765 if (err) {
1766 *err = '\0';
1767 err++;
Serhiy Storchakafc435112016-04-10 14:34:13 +03001768 if (*err && !errors) {
Nick Coghland6009512014-11-20 21:39:37 +10001769 errors = err;
1770 }
1771 }
1772 if (*pythonioencoding && !encoding) {
1773 encoding = pythonioencoding;
1774 }
1775 }
Victor Stinner91106cd2017-12-13 12:29:09 +01001776 else if (interp->core_config.utf8_mode) {
1777 encoding = "utf-8";
1778 errors = "surrogateescape";
1779 }
1780
1781 if (!errors && !pythonioencoding) {
Nick Coghlan6ea41862017-06-11 13:16:15 +10001782 /* Choose the default error handler based on the current locale */
1783 errors = get_default_standard_stream_error_handler();
Serhiy Storchakafc435112016-04-10 14:34:13 +03001784 }
Nick Coghland6009512014-11-20 21:39:37 +10001785 }
1786
1787 /* Set sys.stdin */
1788 fd = fileno(stdin);
1789 /* Under some conditions stdin, stdout and stderr may not be connected
1790 * and fileno() may point to an invalid file descriptor. For example
1791 * GUI apps don't have valid standard streams by default.
1792 */
Victor Stinner874dbe82015-09-04 17:29:57 +02001793 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1794 if (std == NULL)
1795 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001796 PySys_SetObject("__stdin__", std);
1797 _PySys_SetObjectId(&PyId_stdin, std);
1798 Py_DECREF(std);
1799
1800 /* Set sys.stdout */
1801 fd = fileno(stdout);
Victor Stinner874dbe82015-09-04 17:29:57 +02001802 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1803 if (std == NULL)
1804 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001805 PySys_SetObject("__stdout__", std);
1806 _PySys_SetObjectId(&PyId_stdout, std);
1807 Py_DECREF(std);
1808
1809#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1810 /* Set sys.stderr, replaces the preliminary stderr */
1811 fd = fileno(stderr);
Victor Stinner874dbe82015-09-04 17:29:57 +02001812 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1813 if (std == NULL)
1814 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001815
1816 /* Same as hack above, pre-import stderr's codec to avoid recursion
1817 when import.c tries to write to stderr in verbose mode. */
1818 encoding_attr = PyObject_GetAttrString(std, "encoding");
1819 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001820 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001821 if (std_encoding != NULL) {
1822 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1823 Py_XDECREF(codec_info);
1824 }
1825 Py_DECREF(encoding_attr);
1826 }
1827 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1828
1829 if (PySys_SetObject("__stderr__", std) < 0) {
1830 Py_DECREF(std);
1831 goto error;
1832 }
1833 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1834 Py_DECREF(std);
1835 goto error;
1836 }
1837 Py_DECREF(std);
1838#endif
1839
Victor Stinnera7368ac2017-11-15 18:11:45 -08001840 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001841
Victor Stinnera7368ac2017-11-15 18:11:45 -08001842error:
1843 res = _Py_INIT_ERR("can't initialize sys standard streams");
1844
Victor Stinner31e99082017-12-20 23:41:38 +01001845 /* Use the same allocator than Py_SetStandardStreamEncoding() */
1846 PyMemAllocatorEx old_alloc;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001847done:
Victor Stinner31e99082017-12-20 23:41:38 +01001848 _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
1849
Nick Coghland6009512014-11-20 21:39:37 +10001850 /* We won't need them anymore. */
1851 if (_Py_StandardStreamEncoding) {
1852 PyMem_RawFree(_Py_StandardStreamEncoding);
1853 _Py_StandardStreamEncoding = NULL;
1854 }
1855 if (_Py_StandardStreamErrors) {
1856 PyMem_RawFree(_Py_StandardStreamErrors);
1857 _Py_StandardStreamErrors = NULL;
1858 }
Victor Stinner31e99082017-12-20 23:41:38 +01001859
1860 PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
1861
Nick Coghland6009512014-11-20 21:39:37 +10001862 PyMem_Free(pythonioencoding);
1863 Py_XDECREF(bimod);
1864 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001865 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001866}
1867
1868
Victor Stinner10dc4842015-03-24 12:01:30 +01001869static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001870_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001871{
Victor Stinner10dc4842015-03-24 12:01:30 +01001872 fputc('\n', stderr);
1873 fflush(stderr);
1874
1875 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001876 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001877}
Victor Stinner791da1c2016-03-14 16:53:12 +01001878
1879/* Print the current exception (if an exception is set) with its traceback,
1880 or display the current Python stack.
1881
1882 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1883 called on catastrophic cases.
1884
1885 Return 1 if the traceback was displayed, 0 otherwise. */
1886
1887static int
1888_Py_FatalError_PrintExc(int fd)
1889{
1890 PyObject *ferr, *res;
1891 PyObject *exception, *v, *tb;
1892 int has_tb;
1893
1894 if (PyThreadState_GET() == NULL) {
1895 /* The GIL is released: trying to acquire it is likely to deadlock,
1896 just give up. */
1897 return 0;
1898 }
1899
1900 PyErr_Fetch(&exception, &v, &tb);
1901 if (exception == NULL) {
1902 /* No current exception */
1903 return 0;
1904 }
1905
1906 ferr = _PySys_GetObjectId(&PyId_stderr);
1907 if (ferr == NULL || ferr == Py_None) {
1908 /* sys.stderr is not set yet or set to None,
1909 no need to try to display the exception */
1910 return 0;
1911 }
1912
1913 PyErr_NormalizeException(&exception, &v, &tb);
1914 if (tb == NULL) {
1915 tb = Py_None;
1916 Py_INCREF(tb);
1917 }
1918 PyException_SetTraceback(v, tb);
1919 if (exception == NULL) {
1920 /* PyErr_NormalizeException() failed */
1921 return 0;
1922 }
1923
1924 has_tb = (tb != Py_None);
1925 PyErr_Display(exception, v, tb);
1926 Py_XDECREF(exception);
1927 Py_XDECREF(v);
1928 Py_XDECREF(tb);
1929
1930 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07001931 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01001932 if (res == NULL)
1933 PyErr_Clear();
1934 else
1935 Py_DECREF(res);
1936
1937 return has_tb;
1938}
1939
Nick Coghland6009512014-11-20 21:39:37 +10001940/* Print fatal error message and abort */
1941
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001942#ifdef MS_WINDOWS
1943static void
1944fatal_output_debug(const char *msg)
1945{
1946 /* buffer of 256 bytes allocated on the stack */
1947 WCHAR buffer[256 / sizeof(WCHAR)];
1948 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
1949 size_t msglen;
1950
1951 OutputDebugStringW(L"Fatal Python error: ");
1952
1953 msglen = strlen(msg);
1954 while (msglen) {
1955 size_t i;
1956
1957 if (buflen > msglen) {
1958 buflen = msglen;
1959 }
1960
1961 /* Convert the message to wchar_t. This uses a simple one-to-one
1962 conversion, assuming that the this error message actually uses
1963 ASCII only. If this ceases to be true, we will have to convert. */
1964 for (i=0; i < buflen; ++i) {
1965 buffer[i] = msg[i];
1966 }
1967 buffer[i] = L'\0';
1968 OutputDebugStringW(buffer);
1969
1970 msg += buflen;
1971 msglen -= buflen;
1972 }
1973 OutputDebugStringW(L"\n");
1974}
1975#endif
1976
Benjamin Petersoncef88b92017-11-25 13:02:55 -08001977static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001978fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10001979{
1980 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01001981 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01001982
1983 if (reentrant) {
1984 /* Py_FatalError() caused a second fatal error.
1985 Example: flush_std_files() raises a recursion error. */
1986 goto exit;
1987 }
1988 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001989
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001990 fprintf(stderr, "Fatal Python error: ");
1991 if (prefix) {
1992 fputs(prefix, stderr);
1993 fputs(": ", stderr);
1994 }
1995 if (msg) {
1996 fputs(msg, stderr);
1997 }
1998 else {
1999 fprintf(stderr, "<message not set>");
2000 }
2001 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10002002 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01002003
Victor Stinnere0deff32015-03-24 13:46:18 +01002004 /* Print the exception (if an exception is set) with its traceback,
2005 * or display the current Python stack. */
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002006 if (!_Py_FatalError_PrintExc(fd)) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002007 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002008 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002009
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002010 /* The main purpose of faulthandler is to display the traceback.
2011 This function already did its best to display a traceback.
2012 Disable faulthandler to prevent writing a second traceback
2013 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002014 _PyFaulthandler_Fini();
2015
Victor Stinner791da1c2016-03-14 16:53:12 +01002016 /* Check if the current Python thread hold the GIL */
2017 if (PyThreadState_GET() != NULL) {
2018 /* Flush sys.stdout and sys.stderr */
2019 flush_std_files();
2020 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002021
Nick Coghland6009512014-11-20 21:39:37 +10002022#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002023 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002024#endif /* MS_WINDOWS */
2025
2026exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002027 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002028#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002029 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002030#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002031 abort();
2032 }
2033 else {
2034 exit(status);
2035 }
2036}
2037
Victor Stinner19760862017-12-20 01:41:59 +01002038void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002039Py_FatalError(const char *msg)
2040{
2041 fatal_error(NULL, msg, -1);
2042}
2043
Victor Stinner19760862017-12-20 01:41:59 +01002044void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002045_Py_FatalInitError(_PyInitError err)
2046{
2047 /* On "user" error: exit with status 1.
2048 For all other errors, call abort(). */
2049 int status = err.user_err ? 1 : -1;
2050 fatal_error(err.prefix, err.msg, status);
Nick Coghland6009512014-11-20 21:39:37 +10002051}
2052
2053/* Clean up and exit */
2054
Victor Stinnerd7292b52016-06-17 12:29:00 +02002055# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002056
Nick Coghland6009512014-11-20 21:39:37 +10002057/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002058void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002059{
Marcel Plch776407f2017-12-20 11:17:58 +01002060 PyThreadState *ts;
2061 PyInterpreterState *is;
Victor Stinnerca719ac2017-12-20 18:00:19 +01002062
Marcel Plch776407f2017-12-20 11:17:58 +01002063 ts = PyThreadState_GET();
2064 is = ts->interp;
2065
Antoine Pitroufc5db952017-12-13 02:29:07 +01002066 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002067 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2068
2069 is->pyexitfunc = func;
2070 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002071}
2072
2073static void
Marcel Plch776407f2017-12-20 11:17:58 +01002074call_py_exitfuncs(PyInterpreterState *istate)
Nick Coghland6009512014-11-20 21:39:37 +10002075{
Marcel Plch776407f2017-12-20 11:17:58 +01002076 if (istate->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002077 return;
2078
Marcel Plch776407f2017-12-20 11:17:58 +01002079 (*istate->pyexitfunc)(istate->pyexitmodule);
Nick Coghland6009512014-11-20 21:39:37 +10002080 PyErr_Clear();
2081}
2082
2083/* Wait until threading._shutdown completes, provided
2084 the threading module was imported in the first place.
2085 The shutdown routine will wait until all non-daemon
2086 "threading" threads have completed. */
2087static void
2088wait_for_thread_shutdown(void)
2089{
Nick Coghland6009512014-11-20 21:39:37 +10002090 _Py_IDENTIFIER(_shutdown);
2091 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002092 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002093 if (threading == NULL) {
2094 /* threading not imported */
2095 PyErr_Clear();
2096 return;
2097 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002098 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002099 if (result == NULL) {
2100 PyErr_WriteUnraisable(threading);
2101 }
2102 else {
2103 Py_DECREF(result);
2104 }
2105 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002106}
2107
2108#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002109int Py_AtExit(void (*func)(void))
2110{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002111 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002112 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002113 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002114 return 0;
2115}
2116
2117static void
2118call_ll_exitfuncs(void)
2119{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002120 while (_PyRuntime.nexitfuncs > 0)
2121 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002122
2123 fflush(stdout);
2124 fflush(stderr);
2125}
2126
2127void
2128Py_Exit(int sts)
2129{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002130 if (Py_FinalizeEx() < 0) {
2131 sts = 120;
2132 }
Nick Coghland6009512014-11-20 21:39:37 +10002133
2134 exit(sts);
2135}
2136
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002137static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002138initsigs(void)
2139{
2140#ifdef SIGPIPE
2141 PyOS_setsig(SIGPIPE, SIG_IGN);
2142#endif
2143#ifdef SIGXFZ
2144 PyOS_setsig(SIGXFZ, SIG_IGN);
2145#endif
2146#ifdef SIGXFSZ
2147 PyOS_setsig(SIGXFSZ, SIG_IGN);
2148#endif
2149 PyOS_InitInterrupts(); /* May imply initsignal() */
2150 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002151 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002152 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002153 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002154}
2155
2156
2157/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2158 *
2159 * All of the code in this function must only use async-signal-safe functions,
2160 * listed at `man 7 signal` or
2161 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2162 */
2163void
2164_Py_RestoreSignals(void)
2165{
2166#ifdef SIGPIPE
2167 PyOS_setsig(SIGPIPE, SIG_DFL);
2168#endif
2169#ifdef SIGXFZ
2170 PyOS_setsig(SIGXFZ, SIG_DFL);
2171#endif
2172#ifdef SIGXFSZ
2173 PyOS_setsig(SIGXFSZ, SIG_DFL);
2174#endif
2175}
2176
2177
2178/*
2179 * The file descriptor fd is considered ``interactive'' if either
2180 * a) isatty(fd) is TRUE, or
2181 * b) the -i flag was given, and the filename associated with
2182 * the descriptor is NULL or "<stdin>" or "???".
2183 */
2184int
2185Py_FdIsInteractive(FILE *fp, const char *filename)
2186{
2187 if (isatty((int)fileno(fp)))
2188 return 1;
2189 if (!Py_InteractiveFlag)
2190 return 0;
2191 return (filename == NULL) ||
2192 (strcmp(filename, "<stdin>") == 0) ||
2193 (strcmp(filename, "???") == 0);
2194}
2195
2196
Nick Coghland6009512014-11-20 21:39:37 +10002197/* Wrappers around sigaction() or signal(). */
2198
2199PyOS_sighandler_t
2200PyOS_getsig(int sig)
2201{
2202#ifdef HAVE_SIGACTION
2203 struct sigaction context;
2204 if (sigaction(sig, NULL, &context) == -1)
2205 return SIG_ERR;
2206 return context.sa_handler;
2207#else
2208 PyOS_sighandler_t handler;
2209/* Special signal handling for the secure CRT in Visual Studio 2005 */
2210#if defined(_MSC_VER) && _MSC_VER >= 1400
2211 switch (sig) {
2212 /* Only these signals are valid */
2213 case SIGINT:
2214 case SIGILL:
2215 case SIGFPE:
2216 case SIGSEGV:
2217 case SIGTERM:
2218 case SIGBREAK:
2219 case SIGABRT:
2220 break;
2221 /* Don't call signal() with other values or it will assert */
2222 default:
2223 return SIG_ERR;
2224 }
2225#endif /* _MSC_VER && _MSC_VER >= 1400 */
2226 handler = signal(sig, SIG_IGN);
2227 if (handler != SIG_ERR)
2228 signal(sig, handler);
2229 return handler;
2230#endif
2231}
2232
2233/*
2234 * All of the code in this function must only use async-signal-safe functions,
2235 * listed at `man 7 signal` or
2236 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2237 */
2238PyOS_sighandler_t
2239PyOS_setsig(int sig, PyOS_sighandler_t handler)
2240{
2241#ifdef HAVE_SIGACTION
2242 /* Some code in Modules/signalmodule.c depends on sigaction() being
2243 * used here if HAVE_SIGACTION is defined. Fix that if this code
2244 * changes to invalidate that assumption.
2245 */
2246 struct sigaction context, ocontext;
2247 context.sa_handler = handler;
2248 sigemptyset(&context.sa_mask);
2249 context.sa_flags = 0;
2250 if (sigaction(sig, &context, &ocontext) == -1)
2251 return SIG_ERR;
2252 return ocontext.sa_handler;
2253#else
2254 PyOS_sighandler_t oldhandler;
2255 oldhandler = signal(sig, handler);
2256#ifdef HAVE_SIGINTERRUPT
2257 siginterrupt(sig, 1);
2258#endif
2259 return oldhandler;
2260#endif
2261}
2262
2263#ifdef __cplusplus
2264}
2265#endif