blob: 958219b744580d451c6f8670b2f847d5c01b3d5c [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);
328 if (value == NULL) {
329 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800330 return _Py_INIT_ERR("importlib install failed");
Nick Coghland6009512014-11-20 21:39:37 +1000331 }
332 Py_DECREF(value);
333 Py_DECREF(impmod);
334
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800335 err = _PyImportZip_Init();
336 if (_Py_INIT_FAILED(err)) {
337 return err;
338 }
339
340 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000341}
342
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800343static _PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700344initexternalimport(PyInterpreterState *interp)
345{
346 PyObject *value;
347 value = PyObject_CallMethod(interp->importlib,
348 "_install_external_importers", "");
349 if (value == NULL) {
350 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800351 return _Py_INIT_ERR("external importer setup failed");
Eric Snow1abcf672017-05-23 21:46:51 -0700352 }
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200353 Py_DECREF(value);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800354 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700355}
Nick Coghland6009512014-11-20 21:39:37 +1000356
Nick Coghlan6ea41862017-06-11 13:16:15 +1000357/* Helper functions to better handle the legacy C locale
358 *
359 * The legacy C locale assumes ASCII as the default text encoding, which
360 * causes problems not only for the CPython runtime, but also other
361 * components like GNU readline.
362 *
363 * Accordingly, when the CLI detects it, it attempts to coerce it to a
364 * more capable UTF-8 based alternative as follows:
365 *
366 * if (_Py_LegacyLocaleDetected()) {
367 * _Py_CoerceLegacyLocale();
368 * }
369 *
370 * See the documentation of the PYTHONCOERCECLOCALE setting for more details.
371 *
372 * Locale coercion also impacts the default error handler for the standard
373 * streams: while the usual default is "strict", the default for the legacy
374 * C locale and for any of the coercion target locales is "surrogateescape".
375 */
376
377int
378_Py_LegacyLocaleDetected(void)
379{
380#ifndef MS_WINDOWS
381 /* On non-Windows systems, the C locale is considered a legacy locale */
Nick Coghlaneb817952017-06-18 12:29:42 +1000382 /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat
383 * the POSIX locale as a simple alias for the C locale, so
384 * we may also want to check for that explicitly.
385 */
Nick Coghlan6ea41862017-06-11 13:16:15 +1000386 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
387 return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
388#else
389 /* Windows uses code pages instead of locales, so no locale is legacy */
390 return 0;
391#endif
392}
393
Nick Coghlaneb817952017-06-18 12:29:42 +1000394static const char *_C_LOCALE_WARNING =
395 "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
396 "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
397 "C.utf8, or UTF-8 (if available) as alternative Unicode-compatible "
398 "locales is recommended.\n";
399
Nick Coghlaneb817952017-06-18 12:29:42 +1000400static void
Victor Stinner94540602017-12-16 04:54:22 +0100401_emit_stderr_warning_for_legacy_locale(const _PyCoreConfig *core_config)
Nick Coghlaneb817952017-06-18 12:29:42 +1000402{
Victor Stinner94540602017-12-16 04:54:22 +0100403 if (core_config->coerce_c_locale_warn) {
Nick Coghlaneb817952017-06-18 12:29:42 +1000404 if (_Py_LegacyLocaleDetected()) {
405 fprintf(stderr, "%s", _C_LOCALE_WARNING);
406 }
407 }
408}
409
Nick Coghlan6ea41862017-06-11 13:16:15 +1000410typedef struct _CandidateLocale {
411 const char *locale_name; /* The locale to try as a coercion target */
412} _LocaleCoercionTarget;
413
414static _LocaleCoercionTarget _TARGET_LOCALES[] = {
415 {"C.UTF-8"},
416 {"C.utf8"},
Nick Coghlan18974c32017-06-30 00:48:14 +1000417 {"UTF-8"},
Nick Coghlan6ea41862017-06-11 13:16:15 +1000418 {NULL}
419};
420
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +0200421static const char *
Nick Coghlan6ea41862017-06-11 13:16:15 +1000422get_default_standard_stream_error_handler(void)
423{
424 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
425 if (ctype_loc != NULL) {
426 /* "surrogateescape" is the default in the legacy C locale */
427 if (strcmp(ctype_loc, "C") == 0) {
428 return "surrogateescape";
429 }
430
431#ifdef PY_COERCE_C_LOCALE
432 /* "surrogateescape" is the default in locale coercion target locales */
433 const _LocaleCoercionTarget *target = NULL;
434 for (target = _TARGET_LOCALES; target->locale_name; target++) {
435 if (strcmp(ctype_loc, target->locale_name) == 0) {
436 return "surrogateescape";
437 }
438 }
439#endif
440 }
441
442 /* Otherwise return NULL to request the typical default error handler */
443 return NULL;
444}
445
446#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100447static const char C_LOCALE_COERCION_WARNING[] =
Nick Coghlan6ea41862017-06-11 13:16:15 +1000448 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale "
449 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n";
450
451static void
Victor Stinner94540602017-12-16 04:54:22 +0100452_coerce_default_locale_settings(const _PyCoreConfig *config, const _LocaleCoercionTarget *target)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000453{
454 const char *newloc = target->locale_name;
455
456 /* Reset locale back to currently configured defaults */
xdegaye1588be62017-11-12 12:45:59 +0100457 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000458
459 /* Set the relevant locale environment variable */
460 if (setenv("LC_CTYPE", newloc, 1)) {
461 fprintf(stderr,
462 "Error setting LC_CTYPE, skipping C locale coercion\n");
463 return;
464 }
Victor Stinner94540602017-12-16 04:54:22 +0100465 if (config->coerce_c_locale_warn) {
466 fprintf(stderr, C_LOCALE_COERCION_WARNING, newloc);
Nick Coghlaneb817952017-06-18 12:29:42 +1000467 }
Nick Coghlan6ea41862017-06-11 13:16:15 +1000468
469 /* Reconfigure with the overridden environment variables */
xdegaye1588be62017-11-12 12:45:59 +0100470 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000471}
472#endif
473
474void
Victor Stinner94540602017-12-16 04:54:22 +0100475_Py_CoerceLegacyLocale(const _PyCoreConfig *config)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000476{
477#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100478 const char *locale_override = getenv("LC_ALL");
479 if (locale_override == NULL || *locale_override == '\0') {
480 /* LC_ALL is also not set (or is set to an empty string) */
481 const _LocaleCoercionTarget *target = NULL;
482 for (target = _TARGET_LOCALES; target->locale_name; target++) {
483 const char *new_locale = setlocale(LC_CTYPE,
484 target->locale_name);
485 if (new_locale != NULL) {
xdegaye1588be62017-11-12 12:45:59 +0100486#if !defined(__APPLE__) && !defined(__ANDROID__) && \
Victor Stinner94540602017-12-16 04:54:22 +0100487defined(HAVE_LANGINFO_H) && defined(CODESET)
488 /* Also ensure that nl_langinfo works in this locale */
489 char *codeset = nl_langinfo(CODESET);
490 if (!codeset || *codeset == '\0') {
491 /* CODESET is not set or empty, so skip coercion */
492 new_locale = NULL;
493 _Py_SetLocaleFromEnv(LC_CTYPE);
494 continue;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000495 }
Victor Stinner94540602017-12-16 04:54:22 +0100496#endif
497 /* Successfully configured locale, so make it the default */
498 _coerce_default_locale_settings(config, target);
499 return;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000500 }
501 }
502 }
503 /* No C locale warning here, as Py_Initialize will emit one later */
504#endif
505}
506
xdegaye1588be62017-11-12 12:45:59 +0100507/* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to
508 * isolate the idiosyncrasies of different libc implementations. It reads the
509 * appropriate environment variable and uses its value to select the locale for
510 * 'category'. */
511char *
512_Py_SetLocaleFromEnv(int category)
513{
514#ifdef __ANDROID__
515 const char *locale;
516 const char **pvar;
517#ifdef PY_COERCE_C_LOCALE
518 const char *coerce_c_locale;
519#endif
520 const char *utf8_locale = "C.UTF-8";
521 const char *env_var_set[] = {
522 "LC_ALL",
523 "LC_CTYPE",
524 "LANG",
525 NULL,
526 };
527
528 /* Android setlocale(category, "") doesn't check the environment variables
529 * and incorrectly sets the "C" locale at API 24 and older APIs. We only
530 * check the environment variables listed in env_var_set. */
531 for (pvar=env_var_set; *pvar; pvar++) {
532 locale = getenv(*pvar);
533 if (locale != NULL && *locale != '\0') {
534 if (strcmp(locale, utf8_locale) == 0 ||
535 strcmp(locale, "en_US.UTF-8") == 0) {
536 return setlocale(category, utf8_locale);
537 }
538 return setlocale(category, "C");
539 }
540 }
541
542 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
543 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
544 * Quote from POSIX section "8.2 Internationalization Variables":
545 * "4. If the LANG environment variable is not set or is set to the empty
546 * string, the implementation-defined default locale shall be used." */
547
548#ifdef PY_COERCE_C_LOCALE
549 coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
550 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
551 /* Some other ported code may check the environment variables (e.g. in
552 * extension modules), so we make sure that they match the locale
553 * configuration */
554 if (setenv("LC_CTYPE", utf8_locale, 1)) {
555 fprintf(stderr, "Warning: failed setting the LC_CTYPE "
556 "environment variable to %s\n", utf8_locale);
557 }
558 }
559#endif
560 return setlocale(category, utf8_locale);
561#else /* __ANDROID__ */
562 return setlocale(category, "");
563#endif /* __ANDROID__ */
564}
565
Nick Coghlan6ea41862017-06-11 13:16:15 +1000566
Eric Snow1abcf672017-05-23 21:46:51 -0700567/* Global initializations. Can be undone by Py_Finalize(). Don't
568 call this twice without an intervening Py_Finalize() call.
569
570 Every call to Py_InitializeCore, Py_Initialize or Py_InitializeEx
571 must have a corresponding call to Py_Finalize.
572
573 Locking: you must hold the interpreter lock while calling these APIs.
574 (If the lock has not yet been initialized, that's equivalent to
575 having the lock, but you cannot use multiple threads.)
576
577*/
578
579/* Begin interpreter initialization
580 *
581 * On return, the first thread and interpreter state have been created,
582 * but the compiler, signal handling, multithreading and
583 * multiple interpreter support, and codec infrastructure are not yet
584 * available.
585 *
586 * The import system will support builtin and frozen modules only.
587 * The only supported io is writing to sys.stderr
588 *
589 * If any operation invoked by this function fails, a fatal error is
590 * issued and the function does not return.
591 *
592 * Any code invoked from this function should *not* assume it has access
593 * to the Python C API (unless the API is explicitly listed as being
594 * safe to call without calling Py_Initialize first)
595 */
596
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800597_PyInitError
Victor Stinnerda273412017-12-15 01:46:02 +0100598_Py_InitializeCore(const _PyCoreConfig *core_config)
Nick Coghland6009512014-11-20 21:39:37 +1000599{
Victor Stinnerda273412017-12-15 01:46:02 +0100600 assert(core_config != NULL);
601
Nick Coghland6009512014-11-20 21:39:37 +1000602 PyInterpreterState *interp;
603 PyThreadState *tstate;
604 PyObject *bimod, *sysmod, *pstderr;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800605 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +1000606
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800607 err = _PyRuntime_Initialize();
608 if (_Py_INIT_FAILED(err)) {
609 return err;
610 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600611
Victor Stinner31e99082017-12-20 23:41:38 +0100612 if (core_config->allocator != NULL) {
613 if (_PyMem_SetupAllocators(core_config->allocator) < 0) {
614 return _Py_INIT_USER_ERR("Unknown PYTHONMALLOC allocator");
615 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800616 }
617
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600618 if (_PyRuntime.initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800619 return _Py_INIT_ERR("main interpreter already initialized");
Eric Snow1abcf672017-05-23 21:46:51 -0700620 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600621 if (_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800622 return _Py_INIT_ERR("runtime core already initialized");
Eric Snow1abcf672017-05-23 21:46:51 -0700623 }
624
625 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
626 * threads behave a little more gracefully at interpreter shutdown.
627 * We clobber it here so the new interpreter can start with a clean
628 * slate.
629 *
630 * However, this may still lead to misbehaviour if there are daemon
631 * threads still hanging around from a previous Py_Initialize/Finalize
632 * pair :(
633 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600634 _PyRuntime.finalizing = NULL;
635
Nick Coghlan6ea41862017-06-11 13:16:15 +1000636#ifndef MS_WINDOWS
Nick Coghland6009512014-11-20 21:39:37 +1000637 /* Set up the LC_CTYPE locale, so we can obtain
638 the locale's charset without having to switch
639 locales. */
xdegaye1588be62017-11-12 12:45:59 +0100640 _Py_SetLocaleFromEnv(LC_CTYPE);
Victor Stinner94540602017-12-16 04:54:22 +0100641 _emit_stderr_warning_for_legacy_locale(core_config);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000642#endif
Nick Coghland6009512014-11-20 21:39:37 +1000643
Victor Stinnerda273412017-12-15 01:46:02 +0100644 err = _Py_HashRandomization_Init(core_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800645 if (_Py_INIT_FAILED(err)) {
646 return err;
647 }
648
Victor Stinnerda273412017-12-15 01:46:02 +0100649 if (!core_config->use_hash_seed || core_config->hash_seed) {
Eric Snow1abcf672017-05-23 21:46:51 -0700650 /* Random or non-zero hash seed */
651 Py_HashRandomizationFlag = 1;
652 }
Nick Coghland6009512014-11-20 21:39:37 +1000653
Victor Stinnera7368ac2017-11-15 18:11:45 -0800654 err = _PyInterpreterState_Enable(&_PyRuntime);
655 if (_Py_INIT_FAILED(err)) {
656 return err;
657 }
658
Nick Coghland6009512014-11-20 21:39:37 +1000659 interp = PyInterpreterState_New();
Victor Stinnerda273412017-12-15 01:46:02 +0100660 if (interp == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800661 return _Py_INIT_ERR("can't make main interpreter");
Victor Stinnerda273412017-12-15 01:46:02 +0100662 }
663
664 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
665 return _Py_INIT_ERR("failed to copy core config");
666 }
Nick Coghland6009512014-11-20 21:39:37 +1000667
668 tstate = PyThreadState_New(interp);
669 if (tstate == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800670 return _Py_INIT_ERR("can't make first thread");
Nick Coghland6009512014-11-20 21:39:37 +1000671 (void) PyThreadState_Swap(tstate);
672
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000673 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
Nick Coghland6009512014-11-20 21:39:37 +1000674 destroying the GIL might fail when it is being referenced from
675 another running thread (see issue #9901).
676 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000677 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Nick Coghland6009512014-11-20 21:39:37 +1000678 _PyEval_FiniThreads();
Victor Stinner2914bb32018-01-29 11:57:45 +0100679
Nick Coghland6009512014-11-20 21:39:37 +1000680 /* Auto-thread-state API */
681 _PyGILState_Init(interp, tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000682
Victor Stinner2914bb32018-01-29 11:57:45 +0100683 /* Create the GIL */
684 PyEval_InitThreads();
685
Nick Coghland6009512014-11-20 21:39:37 +1000686 _Py_ReadyTypes();
687
Nick Coghland6009512014-11-20 21:39:37 +1000688 if (!_PyLong_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800689 return _Py_INIT_ERR("can't init longs");
Nick Coghland6009512014-11-20 21:39:37 +1000690
691 if (!PyByteArray_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800692 return _Py_INIT_ERR("can't init bytearray");
Nick Coghland6009512014-11-20 21:39:37 +1000693
694 if (!_PyFloat_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800695 return _Py_INIT_ERR("can't init float");
Nick Coghland6009512014-11-20 21:39:37 +1000696
Eric Snowd393c1b2017-09-14 12:18:12 -0600697 PyObject *modules = PyDict_New();
698 if (modules == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800699 return _Py_INIT_ERR("can't make modules dictionary");
Eric Snowd393c1b2017-09-14 12:18:12 -0600700 interp->modules = modules;
701
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800702 err = _PySys_BeginInit(&sysmod);
703 if (_Py_INIT_FAILED(err)) {
704 return err;
705 }
706
Eric Snowd393c1b2017-09-14 12:18:12 -0600707 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800708 if (interp->sysdict == NULL) {
709 return _Py_INIT_ERR("can't initialize sys dict");
710 }
711
Eric Snowd393c1b2017-09-14 12:18:12 -0600712 Py_INCREF(interp->sysdict);
713 PyDict_SetItemString(interp->sysdict, "modules", modules);
714 _PyImport_FixupBuiltin(sysmod, "sys", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000715
716 /* Init Unicode implementation; relies on the codec registry */
717 if (_PyUnicode_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800718 return _Py_INIT_ERR("can't initialize unicode");
Eric Snow1abcf672017-05-23 21:46:51 -0700719
Nick Coghland6009512014-11-20 21:39:37 +1000720 if (_PyStructSequence_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800721 return _Py_INIT_ERR("can't initialize structseq");
Nick Coghland6009512014-11-20 21:39:37 +1000722
723 bimod = _PyBuiltin_Init();
724 if (bimod == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800725 return _Py_INIT_ERR("can't initialize builtins modules");
Eric Snowd393c1b2017-09-14 12:18:12 -0600726 _PyImport_FixupBuiltin(bimod, "builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000727 interp->builtins = PyModule_GetDict(bimod);
728 if (interp->builtins == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800729 return _Py_INIT_ERR("can't initialize builtins dict");
Nick Coghland6009512014-11-20 21:39:37 +1000730 Py_INCREF(interp->builtins);
731
732 /* initialize builtin exceptions */
733 _PyExc_Init(bimod);
734
Nick Coghland6009512014-11-20 21:39:37 +1000735 /* Set up a preliminary stderr printer until we have enough
736 infrastructure for the io module in place. */
737 pstderr = PyFile_NewStdPrinter(fileno(stderr));
738 if (pstderr == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800739 return _Py_INIT_ERR("can't set preliminary stderr");
Nick Coghland6009512014-11-20 21:39:37 +1000740 _PySys_SetObjectId(&PyId_stderr, pstderr);
741 PySys_SetObject("__stderr__", pstderr);
742 Py_DECREF(pstderr);
743
Victor Stinner672b6ba2017-12-06 17:25:50 +0100744 err = _PyImport_Init(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800745 if (_Py_INIT_FAILED(err)) {
746 return err;
747 }
Nick Coghland6009512014-11-20 21:39:37 +1000748
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800749 err = _PyImportHooks_Init();
750 if (_Py_INIT_FAILED(err)) {
751 return err;
752 }
Nick Coghland6009512014-11-20 21:39:37 +1000753
754 /* Initialize _warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100755 if (_PyWarnings_Init() == NULL) {
Victor Stinner1f151112017-11-23 10:43:14 +0100756 return _Py_INIT_ERR("can't initialize warnings");
757 }
Nick Coghland6009512014-11-20 21:39:37 +1000758
Yury Selivanovf23746a2018-01-22 19:11:18 -0500759 if (!_PyContext_Init())
760 return _Py_INIT_ERR("can't init context");
761
Eric Snow1abcf672017-05-23 21:46:51 -0700762 /* This call sets up builtin and frozen import support */
763 if (!interp->core_config._disable_importlib) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800764 err = initimport(interp, sysmod);
765 if (_Py_INIT_FAILED(err)) {
766 return err;
767 }
Eric Snow1abcf672017-05-23 21:46:51 -0700768 }
769
770 /* Only when we get here is the runtime core fully initialized */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600771 _PyRuntime.core_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800772 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700773}
774
Eric Snowc7ec9982017-05-23 23:00:52 -0700775/* Update interpreter state based on supplied configuration settings
776 *
777 * After calling this function, most of the restrictions on the interpreter
778 * are lifted. The only remaining incomplete settings are those related
779 * to the main module (sys.argv[0], __main__ metadata)
780 *
781 * Calling this when the interpreter is not initializing, is already
782 * initialized or without a valid current thread state is a fatal error.
783 * Other errors should be reported as normal Python exceptions with a
784 * non-zero return code.
785 */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800786_PyInitError
787_Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -0700788{
789 PyInterpreterState *interp;
790 PyThreadState *tstate;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800791 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700792
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600793 if (!_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800794 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700795 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600796 if (_PyRuntime.initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800797 return _Py_INIT_ERR("main interpreter already initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700798 }
799
Eric Snow1abcf672017-05-23 21:46:51 -0700800 /* Get current thread state and interpreter pointer */
801 tstate = PyThreadState_GET();
802 if (!tstate)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800803 return _Py_INIT_ERR("failed to read thread state");
Eric Snow1abcf672017-05-23 21:46:51 -0700804 interp = tstate->interp;
805 if (!interp)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800806 return _Py_INIT_ERR("failed to get interpreter");
Eric Snow1abcf672017-05-23 21:46:51 -0700807
808 /* Now finish configuring the main interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +0100809 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
810 return _Py_INIT_ERR("failed to copy main interpreter config");
811 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700812
Eric Snow1abcf672017-05-23 21:46:51 -0700813 if (interp->core_config._disable_importlib) {
814 /* Special mode for freeze_importlib: run with no import system
815 *
816 * This means anything which needs support from extension modules
817 * or pure Python code in the standard library won't work.
818 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600819 _PyRuntime.initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800820 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700821 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100822
Victor Stinner33c377e2017-12-05 15:12:41 +0100823 if (_PyTime_Init() < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800824 return _Py_INIT_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100825 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200826
Victor Stinner41264f12017-12-15 02:05:29 +0100827 if (_PySys_EndInit(interp->sysdict, &interp->config) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800828 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100829 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800830
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800831 err = initexternalimport(interp);
832 if (_Py_INIT_FAILED(err)) {
833 return err;
834 }
Nick Coghland6009512014-11-20 21:39:37 +1000835
836 /* initialize the faulthandler module */
Victor Stinnera7368ac2017-11-15 18:11:45 -0800837 err = _PyFaulthandler_Init(interp->core_config.faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800838 if (_Py_INIT_FAILED(err)) {
839 return err;
840 }
Nick Coghland6009512014-11-20 21:39:37 +1000841
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800842 err = initfsencoding(interp);
843 if (_Py_INIT_FAILED(err)) {
844 return err;
845 }
Nick Coghland6009512014-11-20 21:39:37 +1000846
Victor Stinner1f151112017-11-23 10:43:14 +0100847 if (interp->config.install_signal_handlers) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800848 err = initsigs(); /* Signal handling stuff, including initintr() */
849 if (_Py_INIT_FAILED(err)) {
850 return err;
851 }
852 }
Nick Coghland6009512014-11-20 21:39:37 +1000853
Victor Stinnera7368ac2017-11-15 18:11:45 -0800854 if (_PyTraceMalloc_Init(interp->core_config.tracemalloc) < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800855 return _Py_INIT_ERR("can't initialize tracemalloc");
Nick Coghland6009512014-11-20 21:39:37 +1000856
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800857 err = add_main_module(interp);
858 if (_Py_INIT_FAILED(err)) {
859 return err;
860 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800861
Victor Stinner91106cd2017-12-13 12:29:09 +0100862 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -0800863 if (_Py_INIT_FAILED(err)) {
864 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800865 }
Nick Coghland6009512014-11-20 21:39:37 +1000866
867 /* Initialize warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100868 if (interp->config.warnoptions != NULL &&
869 PyList_Size(interp->config.warnoptions) > 0)
870 {
Nick Coghland6009512014-11-20 21:39:37 +1000871 PyObject *warnings_module = PyImport_ImportModule("warnings");
872 if (warnings_module == NULL) {
873 fprintf(stderr, "'import warnings' failed; traceback:\n");
874 PyErr_Print();
875 }
876 Py_XDECREF(warnings_module);
877 }
878
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600879 _PyRuntime.initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700880
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800881 if (!Py_NoSiteFlag) {
882 err = initsite(); /* Module site */
883 if (_Py_INIT_FAILED(err)) {
884 return err;
885 }
886 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800887 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000888}
889
Eric Snowc7ec9982017-05-23 23:00:52 -0700890#undef _INIT_DEBUG_PRINT
891
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800892_PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700893_Py_InitializeEx_Private(int install_sigs, int install_importlib)
894{
Victor Stinner9cfc0022017-12-20 19:36:46 +0100895 _PyCoreConfig config = _PyCoreConfig_INIT;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800896 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700897
Victor Stinner9cfc0022017-12-20 19:36:46 +0100898 config.ignore_environment = Py_IgnoreEnvironmentFlag;
899 config._disable_importlib = !install_importlib;
Eric Snowc7ec9982017-05-23 23:00:52 -0700900 config.install_signal_handlers = install_sigs;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800901
Victor Stinner9cfc0022017-12-20 19:36:46 +0100902 err = _PyCoreConfig_Read(&config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800903 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100904 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800905 }
906
Victor Stinner9cfc0022017-12-20 19:36:46 +0100907 err = _Py_InitializeCore(&config);
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100908 if (_Py_INIT_FAILED(err)) {
909 goto done;
910 }
911
Victor Stinner9cfc0022017-12-20 19:36:46 +0100912 _PyMainInterpreterConfig main_config = _PyMainInterpreterConfig_INIT;
913 err = _PyMainInterpreterConfig_Read(&main_config, &config);
914 if (!_Py_INIT_FAILED(err)) {
915 err = _Py_InitializeMainInterpreter(&main_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800916 }
Victor Stinner9cfc0022017-12-20 19:36:46 +0100917 _PyMainInterpreterConfig_Clear(&main_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800918 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100919 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800920 }
921
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100922 err = _Py_INIT_OK();
923
924done:
Victor Stinner9cfc0022017-12-20 19:36:46 +0100925 _PyCoreConfig_Clear(&config);
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100926 return err;
Eric Snow1abcf672017-05-23 21:46:51 -0700927}
928
929
930void
Nick Coghland6009512014-11-20 21:39:37 +1000931Py_InitializeEx(int install_sigs)
932{
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800933 _PyInitError err = _Py_InitializeEx_Private(install_sigs, 1);
934 if (_Py_INIT_FAILED(err)) {
935 _Py_FatalInitError(err);
936 }
Nick Coghland6009512014-11-20 21:39:37 +1000937}
938
939void
940Py_Initialize(void)
941{
942 Py_InitializeEx(1);
943}
944
945
946#ifdef COUNT_ALLOCS
947extern void dump_counts(FILE*);
948#endif
949
950/* Flush stdout and stderr */
951
952static int
953file_is_closed(PyObject *fobj)
954{
955 int r;
956 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
957 if (tmp == NULL) {
958 PyErr_Clear();
959 return 0;
960 }
961 r = PyObject_IsTrue(tmp);
962 Py_DECREF(tmp);
963 if (r < 0)
964 PyErr_Clear();
965 return r > 0;
966}
967
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000968static int
Nick Coghland6009512014-11-20 21:39:37 +1000969flush_std_files(void)
970{
971 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
972 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
973 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000974 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +1000975
976 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -0700977 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000978 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +1000979 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000980 status = -1;
981 }
Nick Coghland6009512014-11-20 21:39:37 +1000982 else
983 Py_DECREF(tmp);
984 }
985
986 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -0700987 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000988 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +1000989 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000990 status = -1;
991 }
Nick Coghland6009512014-11-20 21:39:37 +1000992 else
993 Py_DECREF(tmp);
994 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000995
996 return status;
Nick Coghland6009512014-11-20 21:39:37 +1000997}
998
999/* Undo the effect of Py_Initialize().
1000
1001 Beware: if multiple interpreter and/or thread states exist, these
1002 are not wiped out; only the current thread and interpreter state
1003 are deleted. But since everything else is deleted, those other
1004 interpreter and thread states should no longer be used.
1005
1006 (XXX We should do better, e.g. wipe out all interpreters and
1007 threads.)
1008
1009 Locking: as above.
1010
1011*/
1012
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001013int
1014Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001015{
1016 PyInterpreterState *interp;
1017 PyThreadState *tstate;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001018 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001019
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001020 if (!_PyRuntime.initialized)
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001021 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001022
1023 wait_for_thread_shutdown();
1024
Marcel Plch776407f2017-12-20 11:17:58 +01001025 /* Get current thread state and interpreter pointer */
1026 tstate = PyThreadState_GET();
1027 interp = tstate->interp;
1028
Nick Coghland6009512014-11-20 21:39:37 +10001029 /* The interpreter is still entirely intact at this point, and the
1030 * exit funcs may be relying on that. In particular, if some thread
1031 * or exit func is still waiting to do an import, the import machinery
1032 * expects Py_IsInitialized() to return true. So don't say the
1033 * interpreter is uninitialized until after the exit funcs have run.
1034 * Note that Threading.py uses an exit func to do a join on all the
1035 * threads created thru it, so this also protects pending imports in
1036 * the threads created via Threading.
1037 */
Nick Coghland6009512014-11-20 21:39:37 +10001038
Marcel Plch776407f2017-12-20 11:17:58 +01001039 call_py_exitfuncs(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001040
Victor Stinnerda273412017-12-15 01:46:02 +01001041 /* Copy the core config, PyInterpreterState_Delete() free
1042 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001043#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001044 int show_ref_count = interp->core_config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001045#endif
1046#ifdef Py_TRACE_REFS
Victor Stinnerda273412017-12-15 01:46:02 +01001047 int dump_refs = interp->core_config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001048#endif
1049#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001050 int malloc_stats = interp->core_config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001051#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001052
Nick Coghland6009512014-11-20 21:39:37 +10001053 /* Remaining threads (e.g. daemon threads) will automatically exit
1054 after taking the GIL (in PyEval_RestoreThread()). */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001055 _PyRuntime.finalizing = tstate;
1056 _PyRuntime.initialized = 0;
1057 _PyRuntime.core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001058
Victor Stinnere0deff32015-03-24 13:46:18 +01001059 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001060 if (flush_std_files() < 0) {
1061 status = -1;
1062 }
Nick Coghland6009512014-11-20 21:39:37 +10001063
1064 /* Disable signal handling */
1065 PyOS_FiniInterrupts();
1066
1067 /* Collect garbage. This may call finalizers; it's nice to call these
1068 * before all modules are destroyed.
1069 * XXX If a __del__ or weakref callback is triggered here, and tries to
1070 * XXX import a module, bad things can happen, because Python no
1071 * XXX longer believes it's initialized.
1072 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1073 * XXX is easy to provoke that way. I've also seen, e.g.,
1074 * XXX Exception exceptions.ImportError: 'No module named sha'
1075 * XXX in <function callback at 0x008F5718> ignored
1076 * XXX but I'm unclear on exactly how that one happens. In any case,
1077 * XXX I haven't seen a real-life report of either of these.
1078 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001079 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001080#ifdef COUNT_ALLOCS
1081 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1082 each collection might release some types from the type
1083 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001084 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001085 /* nothing */;
1086#endif
Eric Snowdae02762017-09-14 00:35:58 -07001087
Nick Coghland6009512014-11-20 21:39:37 +10001088 /* Destroy all modules */
1089 PyImport_Cleanup();
1090
Victor Stinnere0deff32015-03-24 13:46:18 +01001091 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001092 if (flush_std_files() < 0) {
1093 status = -1;
1094 }
Nick Coghland6009512014-11-20 21:39:37 +10001095
1096 /* Collect final garbage. This disposes of cycles created by
1097 * class definitions, for example.
1098 * XXX This is disabled because it caused too many problems. If
1099 * XXX a __del__ or weakref callback triggers here, Python code has
1100 * XXX a hard time running, because even the sys module has been
1101 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1102 * XXX One symptom is a sequence of information-free messages
1103 * XXX coming from threads (if a __del__ or callback is invoked,
1104 * XXX other threads can execute too, and any exception they encounter
1105 * XXX triggers a comedy of errors as subsystem after subsystem
1106 * XXX fails to find what it *expects* to find in sys to help report
1107 * XXX the exception and consequent unexpected failures). I've also
1108 * XXX seen segfaults then, after adding print statements to the
1109 * XXX Python code getting called.
1110 */
1111#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001112 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001113#endif
1114
1115 /* Disable tracemalloc after all Python objects have been destroyed,
1116 so it is possible to use tracemalloc in objects destructor. */
1117 _PyTraceMalloc_Fini();
1118
1119 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1120 _PyImport_Fini();
1121
1122 /* Cleanup typeobject.c's internal caches. */
1123 _PyType_Fini();
1124
1125 /* unload faulthandler module */
1126 _PyFaulthandler_Fini();
1127
1128 /* Debugging stuff */
1129#ifdef COUNT_ALLOCS
Serhiy Storchaka7e160ce2016-07-03 21:03:53 +03001130 dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001131#endif
1132 /* dump hash stats */
1133 _PyHash_Fini();
1134
Eric Snowdae02762017-09-14 00:35:58 -07001135#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001136 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001137 _PyDebug_PrintTotalRefs();
1138 }
Eric Snowdae02762017-09-14 00:35:58 -07001139#endif
Nick Coghland6009512014-11-20 21:39:37 +10001140
1141#ifdef Py_TRACE_REFS
1142 /* Display all objects still alive -- this can invoke arbitrary
1143 * __repr__ overrides, so requires a mostly-intact interpreter.
1144 * Alas, a lot of stuff may still be alive now that will be cleaned
1145 * up later.
1146 */
Victor Stinnerda273412017-12-15 01:46:02 +01001147 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001148 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001149 }
Nick Coghland6009512014-11-20 21:39:37 +10001150#endif /* Py_TRACE_REFS */
1151
1152 /* Clear interpreter state and all thread states. */
1153 PyInterpreterState_Clear(interp);
1154
1155 /* Now we decref the exception classes. After this point nothing
1156 can raise an exception. That's okay, because each Fini() method
1157 below has been checked to make sure no exceptions are ever
1158 raised.
1159 */
1160
1161 _PyExc_Fini();
1162
1163 /* Sundry finalizers */
1164 PyMethod_Fini();
1165 PyFrame_Fini();
1166 PyCFunction_Fini();
1167 PyTuple_Fini();
1168 PyList_Fini();
1169 PySet_Fini();
1170 PyBytes_Fini();
1171 PyByteArray_Fini();
1172 PyLong_Fini();
1173 PyFloat_Fini();
1174 PyDict_Fini();
1175 PySlice_Fini();
1176 _PyGC_Fini();
Eric Snow6b4be192017-05-22 21:36:03 -07001177 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001178 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001179 PyAsyncGen_Fini();
Yury Selivanovf23746a2018-01-22 19:11:18 -05001180 _PyContext_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001181
1182 /* Cleanup Unicode implementation */
1183 _PyUnicode_Fini();
1184
1185 /* reset file system default encoding */
1186 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
1187 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
1188 Py_FileSystemDefaultEncoding = NULL;
1189 }
1190
1191 /* XXX Still allocated:
1192 - various static ad-hoc pointers to interned strings
1193 - int and float free list blocks
1194 - whatever various modules and libraries allocate
1195 */
1196
1197 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1198
1199 /* Cleanup auto-thread-state */
Nick Coghland6009512014-11-20 21:39:37 +10001200 _PyGILState_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001201
1202 /* Delete current thread. After this, many C API calls become crashy. */
1203 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001204
Nick Coghland6009512014-11-20 21:39:37 +10001205 PyInterpreterState_Delete(interp);
1206
1207#ifdef Py_TRACE_REFS
1208 /* Display addresses (& refcnts) of all objects still alive.
1209 * An address can be used to find the repr of the object, printed
1210 * above by _Py_PrintReferences.
1211 */
Victor Stinnerda273412017-12-15 01:46:02 +01001212 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001213 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001214 }
Nick Coghland6009512014-11-20 21:39:37 +10001215#endif /* Py_TRACE_REFS */
Victor Stinner34be807c2016-03-14 12:04:26 +01001216#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001217 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001218 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be807c2016-03-14 12:04:26 +01001219 }
Nick Coghland6009512014-11-20 21:39:37 +10001220#endif
1221
1222 call_ll_exitfuncs();
Victor Stinner9316ee42017-11-25 03:17:57 +01001223
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001224 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001225 return status;
1226}
1227
1228void
1229Py_Finalize(void)
1230{
1231 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001232}
1233
1234/* Create and initialize a new interpreter and thread, and return the
1235 new thread. This requires that Py_Initialize() has been called
1236 first.
1237
1238 Unsuccessful initialization yields a NULL pointer. Note that *no*
1239 exception information is available even in this case -- the
1240 exception information is held in the thread, and there is no
1241 thread.
1242
1243 Locking: as above.
1244
1245*/
1246
Victor Stinnera7368ac2017-11-15 18:11:45 -08001247static _PyInitError
1248new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001249{
1250 PyInterpreterState *interp;
1251 PyThreadState *tstate, *save_tstate;
1252 PyObject *bimod, *sysmod;
Victor Stinner9316ee42017-11-25 03:17:57 +01001253 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001254
Victor Stinnera7368ac2017-11-15 18:11:45 -08001255 if (!_PyRuntime.initialized) {
1256 return _Py_INIT_ERR("Py_Initialize must be called first");
1257 }
Nick Coghland6009512014-11-20 21:39:37 +10001258
Victor Stinner8a1be612016-03-14 22:07:55 +01001259 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1260 interpreters: disable PyGILState_Check(). */
1261 _PyGILState_check_enabled = 0;
1262
Nick Coghland6009512014-11-20 21:39:37 +10001263 interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001264 if (interp == NULL) {
1265 *tstate_p = NULL;
1266 return _Py_INIT_OK();
1267 }
Nick Coghland6009512014-11-20 21:39:37 +10001268
1269 tstate = PyThreadState_New(interp);
1270 if (tstate == NULL) {
1271 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001272 *tstate_p = NULL;
1273 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001274 }
1275
1276 save_tstate = PyThreadState_Swap(tstate);
1277
Eric Snow1abcf672017-05-23 21:46:51 -07001278 /* Copy the current interpreter config into the new interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +01001279 _PyCoreConfig *core_config;
1280 _PyMainInterpreterConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001281 if (save_tstate != NULL) {
Victor Stinnerda273412017-12-15 01:46:02 +01001282 core_config = &save_tstate->interp->core_config;
1283 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001284 } else {
1285 /* No current thread state, copy from the main interpreter */
1286 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinnerda273412017-12-15 01:46:02 +01001287 core_config = &main_interp->core_config;
1288 config = &main_interp->config;
1289 }
1290
1291 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
1292 return _Py_INIT_ERR("failed to copy core config");
1293 }
1294 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
1295 return _Py_INIT_ERR("failed to copy main interpreter config");
Eric Snow1abcf672017-05-23 21:46:51 -07001296 }
1297
Nick Coghland6009512014-11-20 21:39:37 +10001298 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001299 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001300 if (modules == NULL) {
1301 return _Py_INIT_ERR("can't make modules dictionary");
1302 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001303 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001304
Eric Snowd393c1b2017-09-14 12:18:12 -06001305 sysmod = _PyImport_FindBuiltin("sys", modules);
1306 if (sysmod != NULL) {
1307 interp->sysdict = PyModule_GetDict(sysmod);
1308 if (interp->sysdict == NULL)
1309 goto handle_error;
1310 Py_INCREF(interp->sysdict);
1311 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner41264f12017-12-15 02:05:29 +01001312 _PySys_EndInit(interp->sysdict, &interp->config);
Eric Snowd393c1b2017-09-14 12:18:12 -06001313 }
1314
1315 bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001316 if (bimod != NULL) {
1317 interp->builtins = PyModule_GetDict(bimod);
1318 if (interp->builtins == NULL)
1319 goto handle_error;
1320 Py_INCREF(interp->builtins);
1321 }
1322
1323 /* initialize builtin exceptions */
1324 _PyExc_Init(bimod);
1325
Nick Coghland6009512014-11-20 21:39:37 +10001326 if (bimod != NULL && sysmod != NULL) {
1327 PyObject *pstderr;
1328
Nick Coghland6009512014-11-20 21:39:37 +10001329 /* Set up a preliminary stderr printer until we have enough
1330 infrastructure for the io module in place. */
1331 pstderr = PyFile_NewStdPrinter(fileno(stderr));
Victor Stinnera7368ac2017-11-15 18:11:45 -08001332 if (pstderr == NULL) {
1333 return _Py_INIT_ERR("can't set preliminary stderr");
1334 }
Nick Coghland6009512014-11-20 21:39:37 +10001335 _PySys_SetObjectId(&PyId_stderr, pstderr);
1336 PySys_SetObject("__stderr__", pstderr);
1337 Py_DECREF(pstderr);
1338
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001339 err = _PyImportHooks_Init();
1340 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001341 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001342 }
Nick Coghland6009512014-11-20 21:39:37 +10001343
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001344 err = initimport(interp, sysmod);
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 = initexternalimport(interp);
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 = initfsencoding(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 }
1358
Victor Stinner91106cd2017-12-13 12:29:09 +01001359 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001360 if (_Py_INIT_FAILED(err)) {
1361 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001362 }
1363
1364 err = add_main_module(interp);
1365 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001366 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001367 }
1368
1369 if (!Py_NoSiteFlag) {
1370 err = initsite();
1371 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001372 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001373 }
1374 }
Nick Coghland6009512014-11-20 21:39:37 +10001375 }
1376
Victor Stinnera7368ac2017-11-15 18:11:45 -08001377 if (PyErr_Occurred()) {
1378 goto handle_error;
1379 }
Nick Coghland6009512014-11-20 21:39:37 +10001380
Victor Stinnera7368ac2017-11-15 18:11:45 -08001381 *tstate_p = tstate;
1382 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001383
Nick Coghland6009512014-11-20 21:39:37 +10001384handle_error:
1385 /* Oops, it didn't work. Undo it all. */
1386
1387 PyErr_PrintEx(0);
1388 PyThreadState_Clear(tstate);
1389 PyThreadState_Swap(save_tstate);
1390 PyThreadState_Delete(tstate);
1391 PyInterpreterState_Delete(interp);
1392
Victor Stinnera7368ac2017-11-15 18:11:45 -08001393 *tstate_p = NULL;
1394 return _Py_INIT_OK();
1395}
1396
1397PyThreadState *
1398Py_NewInterpreter(void)
1399{
1400 PyThreadState *tstate;
1401 _PyInitError err = new_interpreter(&tstate);
1402 if (_Py_INIT_FAILED(err)) {
1403 _Py_FatalInitError(err);
1404 }
1405 return tstate;
1406
Nick Coghland6009512014-11-20 21:39:37 +10001407}
1408
1409/* Delete an interpreter and its last thread. This requires that the
1410 given thread state is current, that the thread has no remaining
1411 frames, and that it is its interpreter's only remaining thread.
1412 It is a fatal error to violate these constraints.
1413
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001414 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001415 everything, regardless.)
1416
1417 Locking: as above.
1418
1419*/
1420
1421void
1422Py_EndInterpreter(PyThreadState *tstate)
1423{
1424 PyInterpreterState *interp = tstate->interp;
1425
1426 if (tstate != PyThreadState_GET())
1427 Py_FatalError("Py_EndInterpreter: thread is not current");
1428 if (tstate->frame != NULL)
1429 Py_FatalError("Py_EndInterpreter: thread still has a frame");
1430
1431 wait_for_thread_shutdown();
1432
Marcel Plch776407f2017-12-20 11:17:58 +01001433 call_py_exitfuncs(interp);
1434
Nick Coghland6009512014-11-20 21:39:37 +10001435 if (tstate != interp->tstate_head || tstate->next != NULL)
1436 Py_FatalError("Py_EndInterpreter: not the last thread");
1437
1438 PyImport_Cleanup();
1439 PyInterpreterState_Clear(interp);
1440 PyThreadState_Swap(NULL);
1441 PyInterpreterState_Delete(interp);
1442}
1443
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001444/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001445
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001446static _PyInitError
1447add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001448{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001449 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001450 m = PyImport_AddModule("__main__");
1451 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001452 return _Py_INIT_ERR("can't create __main__ module");
1453
Nick Coghland6009512014-11-20 21:39:37 +10001454 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001455 ann_dict = PyDict_New();
1456 if ((ann_dict == NULL) ||
1457 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001458 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001459 }
1460 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001461
Nick Coghland6009512014-11-20 21:39:37 +10001462 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1463 PyObject *bimod = PyImport_ImportModule("builtins");
1464 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001465 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001466 }
1467 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001468 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001469 }
1470 Py_DECREF(bimod);
1471 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001472
Nick Coghland6009512014-11-20 21:39:37 +10001473 /* Main is a little special - imp.is_builtin("__main__") will return
1474 * False, but BuiltinImporter is still the most appropriate initial
1475 * setting for its __loader__ attribute. A more suitable value will
1476 * be set if __main__ gets further initialized later in the startup
1477 * process.
1478 */
1479 loader = PyDict_GetItemString(d, "__loader__");
1480 if (loader == NULL || loader == Py_None) {
1481 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1482 "BuiltinImporter");
1483 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001484 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001485 }
1486 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001487 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001488 }
1489 Py_DECREF(loader);
1490 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001491 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001492}
1493
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001494static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001495initfsencoding(PyInterpreterState *interp)
1496{
1497 PyObject *codec;
1498
Steve Dowercc16be82016-09-08 10:35:16 -07001499#ifdef MS_WINDOWS
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001500 if (Py_LegacyWindowsFSEncodingFlag) {
Steve Dowercc16be82016-09-08 10:35:16 -07001501 Py_FileSystemDefaultEncoding = "mbcs";
1502 Py_FileSystemDefaultEncodeErrors = "replace";
1503 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001504 else {
Steve Dowercc16be82016-09-08 10:35:16 -07001505 Py_FileSystemDefaultEncoding = "utf-8";
1506 Py_FileSystemDefaultEncodeErrors = "surrogatepass";
1507 }
1508#else
Victor Stinner91106cd2017-12-13 12:29:09 +01001509 if (Py_FileSystemDefaultEncoding == NULL &&
1510 interp->core_config.utf8_mode)
1511 {
1512 Py_FileSystemDefaultEncoding = "utf-8";
1513 Py_HasFileSystemDefaultEncoding = 1;
1514 }
1515 else if (Py_FileSystemDefaultEncoding == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001516 Py_FileSystemDefaultEncoding = get_locale_encoding();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001517 if (Py_FileSystemDefaultEncoding == NULL) {
1518 return _Py_INIT_ERR("Unable to get the locale encoding");
1519 }
Nick Coghland6009512014-11-20 21:39:37 +10001520
1521 Py_HasFileSystemDefaultEncoding = 0;
1522 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001523 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001524 }
Steve Dowercc16be82016-09-08 10:35:16 -07001525#endif
Nick Coghland6009512014-11-20 21:39:37 +10001526
1527 /* the encoding is mbcs, utf-8 or ascii */
1528 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
1529 if (!codec) {
1530 /* Such error can only occurs in critical situations: no more
1531 * memory, import a module of the standard library failed,
1532 * etc. */
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001533 return _Py_INIT_ERR("unable to load the file system codec");
Nick Coghland6009512014-11-20 21:39:37 +10001534 }
1535 Py_DECREF(codec);
1536 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001537 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001538}
1539
1540/* Import the site module (not into __main__ though) */
1541
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001542static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001543initsite(void)
1544{
1545 PyObject *m;
1546 m = PyImport_ImportModule("site");
1547 if (m == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001548 return _Py_INIT_USER_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001549 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001550 Py_DECREF(m);
1551 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001552}
1553
Victor Stinner874dbe82015-09-04 17:29:57 +02001554/* Check if a file descriptor is valid or not.
1555 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1556static int
1557is_valid_fd(int fd)
1558{
Victor Stinner1c4670e2017-05-04 00:45:56 +02001559#ifdef __APPLE__
1560 /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe
1561 and the other side of the pipe is closed, dup(1) succeed, whereas
1562 fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect
1563 such error. */
1564 struct stat st;
1565 return (fstat(fd, &st) == 0);
1566#else
Victor Stinner874dbe82015-09-04 17:29:57 +02001567 int fd2;
Steve Dower940f33a2016-09-08 11:21:54 -07001568 if (fd < 0)
Victor Stinner874dbe82015-09-04 17:29:57 +02001569 return 0;
1570 _Py_BEGIN_SUPPRESS_IPH
Victor Stinner449b2712015-09-29 13:59:50 +02001571 /* Prefer dup() over fstat(). fstat() can require input/output whereas
1572 dup() doesn't, there is a low risk of EMFILE/ENFILE at Python
1573 startup. */
Victor Stinner874dbe82015-09-04 17:29:57 +02001574 fd2 = dup(fd);
1575 if (fd2 >= 0)
1576 close(fd2);
1577 _Py_END_SUPPRESS_IPH
1578 return fd2 >= 0;
Victor Stinner1c4670e2017-05-04 00:45:56 +02001579#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001580}
1581
1582/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001583static PyObject*
1584create_stdio(PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001585 int fd, int write_mode, const char* name,
1586 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001587{
1588 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1589 const char* mode;
1590 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001591 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001592 int buffering, isatty;
1593 _Py_IDENTIFIER(open);
1594 _Py_IDENTIFIER(isatty);
1595 _Py_IDENTIFIER(TextIOWrapper);
1596 _Py_IDENTIFIER(mode);
1597
Victor Stinner874dbe82015-09-04 17:29:57 +02001598 if (!is_valid_fd(fd))
1599 Py_RETURN_NONE;
1600
Nick Coghland6009512014-11-20 21:39:37 +10001601 /* stdin is always opened in buffered mode, first because it shouldn't
1602 make a difference in common use cases, second because TextIOWrapper
1603 depends on the presence of a read1() method which only exists on
1604 buffered streams.
1605 */
1606 if (Py_UnbufferedStdioFlag && write_mode)
1607 buffering = 0;
1608 else
1609 buffering = -1;
1610 if (write_mode)
1611 mode = "wb";
1612 else
1613 mode = "rb";
1614 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1615 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001616 Py_None, Py_None, /* encoding, errors */
1617 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001618 if (buf == NULL)
1619 goto error;
1620
1621 if (buffering) {
1622 _Py_IDENTIFIER(raw);
1623 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1624 if (raw == NULL)
1625 goto error;
1626 }
1627 else {
1628 raw = buf;
1629 Py_INCREF(raw);
1630 }
1631
Steve Dower39294992016-08-30 21:22:36 -07001632#ifdef MS_WINDOWS
1633 /* Windows console IO is always UTF-8 encoded */
1634 if (PyWindowsConsoleIO_Check(raw))
1635 encoding = "utf-8";
1636#endif
1637
Nick Coghland6009512014-11-20 21:39:37 +10001638 text = PyUnicode_FromString(name);
1639 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1640 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001641 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001642 if (res == NULL)
1643 goto error;
1644 isatty = PyObject_IsTrue(res);
1645 Py_DECREF(res);
1646 if (isatty == -1)
1647 goto error;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001648 if (Py_UnbufferedStdioFlag)
1649 write_through = Py_True;
1650 else
1651 write_through = Py_False;
1652 if (isatty && !Py_UnbufferedStdioFlag)
Nick Coghland6009512014-11-20 21:39:37 +10001653 line_buffering = Py_True;
1654 else
1655 line_buffering = Py_False;
1656
1657 Py_CLEAR(raw);
1658 Py_CLEAR(text);
1659
1660#ifdef MS_WINDOWS
1661 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1662 newlines to "\n".
1663 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1664 newline = NULL;
1665#else
1666 /* sys.stdin: split lines at "\n".
1667 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1668 newline = "\n";
1669#endif
1670
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001671 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001672 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001673 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001674 Py_CLEAR(buf);
1675 if (stream == NULL)
1676 goto error;
1677
1678 if (write_mode)
1679 mode = "w";
1680 else
1681 mode = "r";
1682 text = PyUnicode_FromString(mode);
1683 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1684 goto error;
1685 Py_CLEAR(text);
1686 return stream;
1687
1688error:
1689 Py_XDECREF(buf);
1690 Py_XDECREF(stream);
1691 Py_XDECREF(text);
1692 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001693
Victor Stinner874dbe82015-09-04 17:29:57 +02001694 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1695 /* Issue #24891: the file descriptor was closed after the first
1696 is_valid_fd() check was called. Ignore the OSError and set the
1697 stream to None. */
1698 PyErr_Clear();
1699 Py_RETURN_NONE;
1700 }
1701 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001702}
1703
1704/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001705static _PyInitError
Victor Stinner91106cd2017-12-13 12:29:09 +01001706init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001707{
1708 PyObject *iomod = NULL, *wrapper;
1709 PyObject *bimod = NULL;
1710 PyObject *m;
1711 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001712 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001713 PyObject * encoding_attr;
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +02001714 char *pythonioencoding = NULL;
1715 const char *encoding, *errors;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001716 _PyInitError res = _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001717
1718 /* Hack to avoid a nasty recursion issue when Python is invoked
1719 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1720 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1721 goto error;
1722 }
1723 Py_DECREF(m);
1724
1725 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1726 goto error;
1727 }
1728 Py_DECREF(m);
1729
1730 if (!(bimod = PyImport_ImportModule("builtins"))) {
1731 goto error;
1732 }
1733
1734 if (!(iomod = PyImport_ImportModule("io"))) {
1735 goto error;
1736 }
1737 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1738 goto error;
1739 }
1740
1741 /* Set builtins.open */
1742 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1743 Py_DECREF(wrapper);
1744 goto error;
1745 }
1746 Py_DECREF(wrapper);
1747
1748 encoding = _Py_StandardStreamEncoding;
1749 errors = _Py_StandardStreamErrors;
1750 if (!encoding || !errors) {
Victor Stinner91106cd2017-12-13 12:29:09 +01001751 char *opt = Py_GETENV("PYTHONIOENCODING");
1752 if (opt && opt[0] != '\0') {
Nick Coghland6009512014-11-20 21:39:37 +10001753 char *err;
Victor Stinner91106cd2017-12-13 12:29:09 +01001754 pythonioencoding = _PyMem_Strdup(opt);
Nick Coghland6009512014-11-20 21:39:37 +10001755 if (pythonioencoding == NULL) {
1756 PyErr_NoMemory();
1757 goto error;
1758 }
1759 err = strchr(pythonioencoding, ':');
1760 if (err) {
1761 *err = '\0';
1762 err++;
Serhiy Storchakafc435112016-04-10 14:34:13 +03001763 if (*err && !errors) {
Nick Coghland6009512014-11-20 21:39:37 +10001764 errors = err;
1765 }
1766 }
1767 if (*pythonioencoding && !encoding) {
1768 encoding = pythonioencoding;
1769 }
1770 }
Victor Stinner91106cd2017-12-13 12:29:09 +01001771 else if (interp->core_config.utf8_mode) {
1772 encoding = "utf-8";
1773 errors = "surrogateescape";
1774 }
1775
1776 if (!errors && !pythonioencoding) {
Nick Coghlan6ea41862017-06-11 13:16:15 +10001777 /* Choose the default error handler based on the current locale */
1778 errors = get_default_standard_stream_error_handler();
Serhiy Storchakafc435112016-04-10 14:34:13 +03001779 }
Nick Coghland6009512014-11-20 21:39:37 +10001780 }
1781
1782 /* Set sys.stdin */
1783 fd = fileno(stdin);
1784 /* Under some conditions stdin, stdout and stderr may not be connected
1785 * and fileno() may point to an invalid file descriptor. For example
1786 * GUI apps don't have valid standard streams by default.
1787 */
Victor Stinner874dbe82015-09-04 17:29:57 +02001788 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1789 if (std == NULL)
1790 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001791 PySys_SetObject("__stdin__", std);
1792 _PySys_SetObjectId(&PyId_stdin, std);
1793 Py_DECREF(std);
1794
1795 /* Set sys.stdout */
1796 fd = fileno(stdout);
Victor Stinner874dbe82015-09-04 17:29:57 +02001797 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1798 if (std == NULL)
1799 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001800 PySys_SetObject("__stdout__", std);
1801 _PySys_SetObjectId(&PyId_stdout, std);
1802 Py_DECREF(std);
1803
1804#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1805 /* Set sys.stderr, replaces the preliminary stderr */
1806 fd = fileno(stderr);
Victor Stinner874dbe82015-09-04 17:29:57 +02001807 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1808 if (std == NULL)
1809 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001810
1811 /* Same as hack above, pre-import stderr's codec to avoid recursion
1812 when import.c tries to write to stderr in verbose mode. */
1813 encoding_attr = PyObject_GetAttrString(std, "encoding");
1814 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001815 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001816 if (std_encoding != NULL) {
1817 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1818 Py_XDECREF(codec_info);
1819 }
1820 Py_DECREF(encoding_attr);
1821 }
1822 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1823
1824 if (PySys_SetObject("__stderr__", std) < 0) {
1825 Py_DECREF(std);
1826 goto error;
1827 }
1828 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1829 Py_DECREF(std);
1830 goto error;
1831 }
1832 Py_DECREF(std);
1833#endif
1834
Victor Stinnera7368ac2017-11-15 18:11:45 -08001835 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001836
Victor Stinnera7368ac2017-11-15 18:11:45 -08001837error:
1838 res = _Py_INIT_ERR("can't initialize sys standard streams");
1839
Victor Stinner31e99082017-12-20 23:41:38 +01001840 /* Use the same allocator than Py_SetStandardStreamEncoding() */
1841 PyMemAllocatorEx old_alloc;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001842done:
Victor Stinner31e99082017-12-20 23:41:38 +01001843 _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
1844
Nick Coghland6009512014-11-20 21:39:37 +10001845 /* We won't need them anymore. */
1846 if (_Py_StandardStreamEncoding) {
1847 PyMem_RawFree(_Py_StandardStreamEncoding);
1848 _Py_StandardStreamEncoding = NULL;
1849 }
1850 if (_Py_StandardStreamErrors) {
1851 PyMem_RawFree(_Py_StandardStreamErrors);
1852 _Py_StandardStreamErrors = NULL;
1853 }
Victor Stinner31e99082017-12-20 23:41:38 +01001854
1855 PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
1856
Nick Coghland6009512014-11-20 21:39:37 +10001857 PyMem_Free(pythonioencoding);
1858 Py_XDECREF(bimod);
1859 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001860 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001861}
1862
1863
Victor Stinner10dc4842015-03-24 12:01:30 +01001864static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001865_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001866{
Victor Stinner10dc4842015-03-24 12:01:30 +01001867 fputc('\n', stderr);
1868 fflush(stderr);
1869
1870 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001871 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001872}
Victor Stinner791da1c2016-03-14 16:53:12 +01001873
1874/* Print the current exception (if an exception is set) with its traceback,
1875 or display the current Python stack.
1876
1877 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1878 called on catastrophic cases.
1879
1880 Return 1 if the traceback was displayed, 0 otherwise. */
1881
1882static int
1883_Py_FatalError_PrintExc(int fd)
1884{
1885 PyObject *ferr, *res;
1886 PyObject *exception, *v, *tb;
1887 int has_tb;
1888
1889 if (PyThreadState_GET() == NULL) {
1890 /* The GIL is released: trying to acquire it is likely to deadlock,
1891 just give up. */
1892 return 0;
1893 }
1894
1895 PyErr_Fetch(&exception, &v, &tb);
1896 if (exception == NULL) {
1897 /* No current exception */
1898 return 0;
1899 }
1900
1901 ferr = _PySys_GetObjectId(&PyId_stderr);
1902 if (ferr == NULL || ferr == Py_None) {
1903 /* sys.stderr is not set yet or set to None,
1904 no need to try to display the exception */
1905 return 0;
1906 }
1907
1908 PyErr_NormalizeException(&exception, &v, &tb);
1909 if (tb == NULL) {
1910 tb = Py_None;
1911 Py_INCREF(tb);
1912 }
1913 PyException_SetTraceback(v, tb);
1914 if (exception == NULL) {
1915 /* PyErr_NormalizeException() failed */
1916 return 0;
1917 }
1918
1919 has_tb = (tb != Py_None);
1920 PyErr_Display(exception, v, tb);
1921 Py_XDECREF(exception);
1922 Py_XDECREF(v);
1923 Py_XDECREF(tb);
1924
1925 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07001926 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01001927 if (res == NULL)
1928 PyErr_Clear();
1929 else
1930 Py_DECREF(res);
1931
1932 return has_tb;
1933}
1934
Nick Coghland6009512014-11-20 21:39:37 +10001935/* Print fatal error message and abort */
1936
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001937#ifdef MS_WINDOWS
1938static void
1939fatal_output_debug(const char *msg)
1940{
1941 /* buffer of 256 bytes allocated on the stack */
1942 WCHAR buffer[256 / sizeof(WCHAR)];
1943 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
1944 size_t msglen;
1945
1946 OutputDebugStringW(L"Fatal Python error: ");
1947
1948 msglen = strlen(msg);
1949 while (msglen) {
1950 size_t i;
1951
1952 if (buflen > msglen) {
1953 buflen = msglen;
1954 }
1955
1956 /* Convert the message to wchar_t. This uses a simple one-to-one
1957 conversion, assuming that the this error message actually uses
1958 ASCII only. If this ceases to be true, we will have to convert. */
1959 for (i=0; i < buflen; ++i) {
1960 buffer[i] = msg[i];
1961 }
1962 buffer[i] = L'\0';
1963 OutputDebugStringW(buffer);
1964
1965 msg += buflen;
1966 msglen -= buflen;
1967 }
1968 OutputDebugStringW(L"\n");
1969}
1970#endif
1971
Benjamin Petersoncef88b92017-11-25 13:02:55 -08001972static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001973fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10001974{
1975 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01001976 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01001977
1978 if (reentrant) {
1979 /* Py_FatalError() caused a second fatal error.
1980 Example: flush_std_files() raises a recursion error. */
1981 goto exit;
1982 }
1983 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001984
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001985 fprintf(stderr, "Fatal Python error: ");
1986 if (prefix) {
1987 fputs(prefix, stderr);
1988 fputs(": ", stderr);
1989 }
1990 if (msg) {
1991 fputs(msg, stderr);
1992 }
1993 else {
1994 fprintf(stderr, "<message not set>");
1995 }
1996 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001997 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01001998
Victor Stinnere0deff32015-03-24 13:46:18 +01001999 /* Print the exception (if an exception is set) with its traceback,
2000 * or display the current Python stack. */
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002001 if (!_Py_FatalError_PrintExc(fd)) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002002 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002003 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002004
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002005 /* The main purpose of faulthandler is to display the traceback.
2006 This function already did its best to display a traceback.
2007 Disable faulthandler to prevent writing a second traceback
2008 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002009 _PyFaulthandler_Fini();
2010
Victor Stinner791da1c2016-03-14 16:53:12 +01002011 /* Check if the current Python thread hold the GIL */
2012 if (PyThreadState_GET() != NULL) {
2013 /* Flush sys.stdout and sys.stderr */
2014 flush_std_files();
2015 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002016
Nick Coghland6009512014-11-20 21:39:37 +10002017#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002018 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002019#endif /* MS_WINDOWS */
2020
2021exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002022 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002023#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002024 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002025#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002026 abort();
2027 }
2028 else {
2029 exit(status);
2030 }
2031}
2032
Victor Stinner19760862017-12-20 01:41:59 +01002033void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002034Py_FatalError(const char *msg)
2035{
2036 fatal_error(NULL, msg, -1);
2037}
2038
Victor Stinner19760862017-12-20 01:41:59 +01002039void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002040_Py_FatalInitError(_PyInitError err)
2041{
2042 /* On "user" error: exit with status 1.
2043 For all other errors, call abort(). */
2044 int status = err.user_err ? 1 : -1;
2045 fatal_error(err.prefix, err.msg, status);
Nick Coghland6009512014-11-20 21:39:37 +10002046}
2047
2048/* Clean up and exit */
2049
Victor Stinnerd7292b52016-06-17 12:29:00 +02002050# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002051
Nick Coghland6009512014-11-20 21:39:37 +10002052/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002053void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002054{
Marcel Plch776407f2017-12-20 11:17:58 +01002055 PyThreadState *ts;
2056 PyInterpreterState *is;
Victor Stinnerca719ac2017-12-20 18:00:19 +01002057
Marcel Plch776407f2017-12-20 11:17:58 +01002058 ts = PyThreadState_GET();
2059 is = ts->interp;
2060
Antoine Pitroufc5db952017-12-13 02:29:07 +01002061 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002062 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2063
2064 is->pyexitfunc = func;
2065 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002066}
2067
2068static void
Marcel Plch776407f2017-12-20 11:17:58 +01002069call_py_exitfuncs(PyInterpreterState *istate)
Nick Coghland6009512014-11-20 21:39:37 +10002070{
Marcel Plch776407f2017-12-20 11:17:58 +01002071 if (istate->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002072 return;
2073
Marcel Plch776407f2017-12-20 11:17:58 +01002074 (*istate->pyexitfunc)(istate->pyexitmodule);
Nick Coghland6009512014-11-20 21:39:37 +10002075 PyErr_Clear();
2076}
2077
2078/* Wait until threading._shutdown completes, provided
2079 the threading module was imported in the first place.
2080 The shutdown routine will wait until all non-daemon
2081 "threading" threads have completed. */
2082static void
2083wait_for_thread_shutdown(void)
2084{
Nick Coghland6009512014-11-20 21:39:37 +10002085 _Py_IDENTIFIER(_shutdown);
2086 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002087 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002088 if (threading == NULL) {
2089 /* threading not imported */
2090 PyErr_Clear();
2091 return;
2092 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002093 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002094 if (result == NULL) {
2095 PyErr_WriteUnraisable(threading);
2096 }
2097 else {
2098 Py_DECREF(result);
2099 }
2100 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002101}
2102
2103#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002104int Py_AtExit(void (*func)(void))
2105{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002106 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002107 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002108 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002109 return 0;
2110}
2111
2112static void
2113call_ll_exitfuncs(void)
2114{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002115 while (_PyRuntime.nexitfuncs > 0)
2116 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002117
2118 fflush(stdout);
2119 fflush(stderr);
2120}
2121
2122void
2123Py_Exit(int sts)
2124{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002125 if (Py_FinalizeEx() < 0) {
2126 sts = 120;
2127 }
Nick Coghland6009512014-11-20 21:39:37 +10002128
2129 exit(sts);
2130}
2131
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002132static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002133initsigs(void)
2134{
2135#ifdef SIGPIPE
2136 PyOS_setsig(SIGPIPE, SIG_IGN);
2137#endif
2138#ifdef SIGXFZ
2139 PyOS_setsig(SIGXFZ, SIG_IGN);
2140#endif
2141#ifdef SIGXFSZ
2142 PyOS_setsig(SIGXFSZ, SIG_IGN);
2143#endif
2144 PyOS_InitInterrupts(); /* May imply initsignal() */
2145 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002146 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002147 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002148 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002149}
2150
2151
2152/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2153 *
2154 * All of the code in this function must only use async-signal-safe functions,
2155 * listed at `man 7 signal` or
2156 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2157 */
2158void
2159_Py_RestoreSignals(void)
2160{
2161#ifdef SIGPIPE
2162 PyOS_setsig(SIGPIPE, SIG_DFL);
2163#endif
2164#ifdef SIGXFZ
2165 PyOS_setsig(SIGXFZ, SIG_DFL);
2166#endif
2167#ifdef SIGXFSZ
2168 PyOS_setsig(SIGXFSZ, SIG_DFL);
2169#endif
2170}
2171
2172
2173/*
2174 * The file descriptor fd is considered ``interactive'' if either
2175 * a) isatty(fd) is TRUE, or
2176 * b) the -i flag was given, and the filename associated with
2177 * the descriptor is NULL or "<stdin>" or "???".
2178 */
2179int
2180Py_FdIsInteractive(FILE *fp, const char *filename)
2181{
2182 if (isatty((int)fileno(fp)))
2183 return 1;
2184 if (!Py_InteractiveFlag)
2185 return 0;
2186 return (filename == NULL) ||
2187 (strcmp(filename, "<stdin>") == 0) ||
2188 (strcmp(filename, "???") == 0);
2189}
2190
2191
Nick Coghland6009512014-11-20 21:39:37 +10002192/* Wrappers around sigaction() or signal(). */
2193
2194PyOS_sighandler_t
2195PyOS_getsig(int sig)
2196{
2197#ifdef HAVE_SIGACTION
2198 struct sigaction context;
2199 if (sigaction(sig, NULL, &context) == -1)
2200 return SIG_ERR;
2201 return context.sa_handler;
2202#else
2203 PyOS_sighandler_t handler;
2204/* Special signal handling for the secure CRT in Visual Studio 2005 */
2205#if defined(_MSC_VER) && _MSC_VER >= 1400
2206 switch (sig) {
2207 /* Only these signals are valid */
2208 case SIGINT:
2209 case SIGILL:
2210 case SIGFPE:
2211 case SIGSEGV:
2212 case SIGTERM:
2213 case SIGBREAK:
2214 case SIGABRT:
2215 break;
2216 /* Don't call signal() with other values or it will assert */
2217 default:
2218 return SIG_ERR;
2219 }
2220#endif /* _MSC_VER && _MSC_VER >= 1400 */
2221 handler = signal(sig, SIG_IGN);
2222 if (handler != SIG_ERR)
2223 signal(sig, handler);
2224 return handler;
2225#endif
2226}
2227
2228/*
2229 * All of the code in this function must only use async-signal-safe functions,
2230 * listed at `man 7 signal` or
2231 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2232 */
2233PyOS_sighandler_t
2234PyOS_setsig(int sig, PyOS_sighandler_t handler)
2235{
2236#ifdef HAVE_SIGACTION
2237 /* Some code in Modules/signalmodule.c depends on sigaction() being
2238 * used here if HAVE_SIGACTION is defined. Fix that if this code
2239 * changes to invalidate that assumption.
2240 */
2241 struct sigaction context, ocontext;
2242 context.sa_handler = handler;
2243 sigemptyset(&context.sa_mask);
2244 context.sa_flags = 0;
2245 if (sigaction(sig, &context, &ocontext) == -1)
2246 return SIG_ERR;
2247 return ocontext.sa_handler;
2248#else
2249 PyOS_sighandler_t oldhandler;
2250 oldhandler = signal(sig, handler);
2251#ifdef HAVE_SIGINTERRUPT
2252 siginterrupt(sig, 1);
2253#endif
2254 return oldhandler;
2255#endif
2256}
2257
2258#ifdef __cplusplus
2259}
2260#endif