blob: 584aa556bda0660a5ce101edd3c892a351a95202 [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
Victor Stinnerb1147e42018-07-21 02:06:16 +0200762 if (!core_config->_disable_importlib) {
763 err = _PyCoreConfig_SetPathConfig(core_config);
764 if (_Py_INIT_FAILED(err)) {
765 return err;
766 }
767 }
768
Eric Snow1abcf672017-05-23 21:46:51 -0700769 /* This call sets up builtin and frozen import support */
770 if (!interp->core_config._disable_importlib) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800771 err = initimport(interp, sysmod);
772 if (_Py_INIT_FAILED(err)) {
773 return err;
774 }
Eric Snow1abcf672017-05-23 21:46:51 -0700775 }
776
777 /* Only when we get here is the runtime core fully initialized */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600778 _PyRuntime.core_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800779 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700780}
781
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200782/* Py_Initialize() has already been called: update the main interpreter
783 configuration. Example of bpo-34008: Py_Main() called after
784 Py_Initialize(). */
785static _PyInitError
786_Py_ReconfigureMainInterpreter(PyInterpreterState *interp,
787 const _PyMainInterpreterConfig *config)
788{
789 if (config->argv != NULL) {
790 int res = PyDict_SetItemString(interp->sysdict, "argv", config->argv);
791 if (res < 0) {
792 return _Py_INIT_ERR("fail to set sys.argv");
793 }
794 }
795 return _Py_INIT_OK();
796}
797
Eric Snowc7ec9982017-05-23 23:00:52 -0700798/* Update interpreter state based on supplied configuration settings
799 *
800 * After calling this function, most of the restrictions on the interpreter
801 * are lifted. The only remaining incomplete settings are those related
802 * to the main module (sys.argv[0], __main__ metadata)
803 *
804 * Calling this when the interpreter is not initializing, is already
805 * initialized or without a valid current thread state is a fatal error.
806 * Other errors should be reported as normal Python exceptions with a
807 * non-zero return code.
808 */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800809_PyInitError
810_Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -0700811{
812 PyInterpreterState *interp;
813 PyThreadState *tstate;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800814 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700815
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600816 if (!_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800817 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700818 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700819
Eric Snow1abcf672017-05-23 21:46:51 -0700820 /* Get current thread state and interpreter pointer */
821 tstate = PyThreadState_GET();
822 if (!tstate)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800823 return _Py_INIT_ERR("failed to read thread state");
Eric Snow1abcf672017-05-23 21:46:51 -0700824 interp = tstate->interp;
825 if (!interp)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800826 return _Py_INIT_ERR("failed to get interpreter");
Eric Snow1abcf672017-05-23 21:46:51 -0700827
828 /* Now finish configuring the main interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +0100829 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
830 return _Py_INIT_ERR("failed to copy main interpreter config");
831 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700832
Victor Stinnerfb47bca2018-07-20 17:34:23 +0200833 if (_PyRuntime.initialized) {
834 return _Py_ReconfigureMainInterpreter(interp, config);
835 }
836
Eric Snow1abcf672017-05-23 21:46:51 -0700837 if (interp->core_config._disable_importlib) {
838 /* Special mode for freeze_importlib: run with no import system
839 *
840 * This means anything which needs support from extension modules
841 * or pure Python code in the standard library won't work.
842 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600843 _PyRuntime.initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800844 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700845 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100846
Victor Stinner33c377e2017-12-05 15:12:41 +0100847 if (_PyTime_Init() < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800848 return _Py_INIT_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100849 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200850
Victor Stinner41264f12017-12-15 02:05:29 +0100851 if (_PySys_EndInit(interp->sysdict, &interp->config) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800852 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100853 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800854
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800855 err = initexternalimport(interp);
856 if (_Py_INIT_FAILED(err)) {
857 return err;
858 }
Nick Coghland6009512014-11-20 21:39:37 +1000859
860 /* initialize the faulthandler module */
Victor Stinnera7368ac2017-11-15 18:11:45 -0800861 err = _PyFaulthandler_Init(interp->core_config.faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800862 if (_Py_INIT_FAILED(err)) {
863 return err;
864 }
Nick Coghland6009512014-11-20 21:39:37 +1000865
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800866 err = initfsencoding(interp);
867 if (_Py_INIT_FAILED(err)) {
868 return err;
869 }
Nick Coghland6009512014-11-20 21:39:37 +1000870
Victor Stinner1f151112017-11-23 10:43:14 +0100871 if (interp->config.install_signal_handlers) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800872 err = initsigs(); /* Signal handling stuff, including initintr() */
873 if (_Py_INIT_FAILED(err)) {
874 return err;
875 }
876 }
Nick Coghland6009512014-11-20 21:39:37 +1000877
Victor Stinnera7368ac2017-11-15 18:11:45 -0800878 if (_PyTraceMalloc_Init(interp->core_config.tracemalloc) < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800879 return _Py_INIT_ERR("can't initialize tracemalloc");
Nick Coghland6009512014-11-20 21:39:37 +1000880
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800881 err = add_main_module(interp);
882 if (_Py_INIT_FAILED(err)) {
883 return err;
884 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800885
Victor Stinner91106cd2017-12-13 12:29:09 +0100886 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -0800887 if (_Py_INIT_FAILED(err)) {
888 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800889 }
Nick Coghland6009512014-11-20 21:39:37 +1000890
891 /* Initialize warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100892 if (interp->config.warnoptions != NULL &&
893 PyList_Size(interp->config.warnoptions) > 0)
894 {
Nick Coghland6009512014-11-20 21:39:37 +1000895 PyObject *warnings_module = PyImport_ImportModule("warnings");
896 if (warnings_module == NULL) {
897 fprintf(stderr, "'import warnings' failed; traceback:\n");
898 PyErr_Print();
899 }
900 Py_XDECREF(warnings_module);
901 }
902
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600903 _PyRuntime.initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700904
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800905 if (!Py_NoSiteFlag) {
906 err = initsite(); /* Module site */
907 if (_Py_INIT_FAILED(err)) {
908 return err;
909 }
910 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800911 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000912}
913
Eric Snowc7ec9982017-05-23 23:00:52 -0700914#undef _INIT_DEBUG_PRINT
915
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800916_PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700917_Py_InitializeEx_Private(int install_sigs, int install_importlib)
918{
Victor Stinner209abf72018-06-22 19:14:51 +0200919 if (_PyRuntime.initialized) {
920 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
921 return _Py_INIT_OK();
922 }
923
Victor Stinner9cfc0022017-12-20 19:36:46 +0100924 _PyCoreConfig config = _PyCoreConfig_INIT;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800925 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700926
Victor Stinner9cfc0022017-12-20 19:36:46 +0100927 config.ignore_environment = Py_IgnoreEnvironmentFlag;
928 config._disable_importlib = !install_importlib;
Eric Snowc7ec9982017-05-23 23:00:52 -0700929 config.install_signal_handlers = install_sigs;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800930
Victor Stinnerf2626ce2018-07-21 03:54:20 +0200931 err = _PyCoreConfig_Read(&config, &Py_IsolatedFlag, &Py_NoSiteFlag);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800932 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100933 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800934 }
935
Victor Stinner9cfc0022017-12-20 19:36:46 +0100936 err = _Py_InitializeCore(&config);
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100937 if (_Py_INIT_FAILED(err)) {
938 goto done;
939 }
940
Victor Stinner9cfc0022017-12-20 19:36:46 +0100941 _PyMainInterpreterConfig main_config = _PyMainInterpreterConfig_INIT;
942 err = _PyMainInterpreterConfig_Read(&main_config, &config);
943 if (!_Py_INIT_FAILED(err)) {
944 err = _Py_InitializeMainInterpreter(&main_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800945 }
Victor Stinner9cfc0022017-12-20 19:36:46 +0100946 _PyMainInterpreterConfig_Clear(&main_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800947 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100948 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800949 }
950
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100951 err = _Py_INIT_OK();
952
953done:
Victor Stinner9cfc0022017-12-20 19:36:46 +0100954 _PyCoreConfig_Clear(&config);
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100955 return err;
Eric Snow1abcf672017-05-23 21:46:51 -0700956}
957
958
959void
Nick Coghland6009512014-11-20 21:39:37 +1000960Py_InitializeEx(int install_sigs)
961{
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800962 _PyInitError err = _Py_InitializeEx_Private(install_sigs, 1);
963 if (_Py_INIT_FAILED(err)) {
964 _Py_FatalInitError(err);
965 }
Nick Coghland6009512014-11-20 21:39:37 +1000966}
967
968void
969Py_Initialize(void)
970{
971 Py_InitializeEx(1);
972}
973
974
975#ifdef COUNT_ALLOCS
976extern void dump_counts(FILE*);
977#endif
978
979/* Flush stdout and stderr */
980
981static int
982file_is_closed(PyObject *fobj)
983{
984 int r;
985 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
986 if (tmp == NULL) {
987 PyErr_Clear();
988 return 0;
989 }
990 r = PyObject_IsTrue(tmp);
991 Py_DECREF(tmp);
992 if (r < 0)
993 PyErr_Clear();
994 return r > 0;
995}
996
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000997static int
Nick Coghland6009512014-11-20 21:39:37 +1000998flush_std_files(void)
999{
1000 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1001 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1002 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001003 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001004
1005 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001006 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001007 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001008 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001009 status = -1;
1010 }
Nick Coghland6009512014-11-20 21:39:37 +10001011 else
1012 Py_DECREF(tmp);
1013 }
1014
1015 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001016 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001017 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001018 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001019 status = -1;
1020 }
Nick Coghland6009512014-11-20 21:39:37 +10001021 else
1022 Py_DECREF(tmp);
1023 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001024
1025 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001026}
1027
1028/* Undo the effect of Py_Initialize().
1029
1030 Beware: if multiple interpreter and/or thread states exist, these
1031 are not wiped out; only the current thread and interpreter state
1032 are deleted. But since everything else is deleted, those other
1033 interpreter and thread states should no longer be used.
1034
1035 (XXX We should do better, e.g. wipe out all interpreters and
1036 threads.)
1037
1038 Locking: as above.
1039
1040*/
1041
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001042int
1043Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001044{
1045 PyInterpreterState *interp;
1046 PyThreadState *tstate;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001047 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001048
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001049 if (!_PyRuntime.initialized)
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001050 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001051
1052 wait_for_thread_shutdown();
1053
Marcel Plch776407f2017-12-20 11:17:58 +01001054 /* Get current thread state and interpreter pointer */
1055 tstate = PyThreadState_GET();
1056 interp = tstate->interp;
1057
Nick Coghland6009512014-11-20 21:39:37 +10001058 /* The interpreter is still entirely intact at this point, and the
1059 * exit funcs may be relying on that. In particular, if some thread
1060 * or exit func is still waiting to do an import, the import machinery
1061 * expects Py_IsInitialized() to return true. So don't say the
1062 * interpreter is uninitialized until after the exit funcs have run.
1063 * Note that Threading.py uses an exit func to do a join on all the
1064 * threads created thru it, so this also protects pending imports in
1065 * the threads created via Threading.
1066 */
Nick Coghland6009512014-11-20 21:39:37 +10001067
Marcel Plch776407f2017-12-20 11:17:58 +01001068 call_py_exitfuncs(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001069
Victor Stinnerda273412017-12-15 01:46:02 +01001070 /* Copy the core config, PyInterpreterState_Delete() free
1071 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001072#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001073 int show_ref_count = interp->core_config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001074#endif
1075#ifdef Py_TRACE_REFS
Victor Stinnerda273412017-12-15 01:46:02 +01001076 int dump_refs = interp->core_config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001077#endif
1078#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001079 int malloc_stats = interp->core_config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001080#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001081
Nick Coghland6009512014-11-20 21:39:37 +10001082 /* Remaining threads (e.g. daemon threads) will automatically exit
1083 after taking the GIL (in PyEval_RestoreThread()). */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001084 _PyRuntime.finalizing = tstate;
1085 _PyRuntime.initialized = 0;
1086 _PyRuntime.core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001087
Victor Stinnere0deff32015-03-24 13:46:18 +01001088 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001089 if (flush_std_files() < 0) {
1090 status = -1;
1091 }
Nick Coghland6009512014-11-20 21:39:37 +10001092
1093 /* Disable signal handling */
1094 PyOS_FiniInterrupts();
1095
1096 /* Collect garbage. This may call finalizers; it's nice to call these
1097 * before all modules are destroyed.
1098 * XXX If a __del__ or weakref callback is triggered here, and tries to
1099 * XXX import a module, bad things can happen, because Python no
1100 * XXX longer believes it's initialized.
1101 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1102 * XXX is easy to provoke that way. I've also seen, e.g.,
1103 * XXX Exception exceptions.ImportError: 'No module named sha'
1104 * XXX in <function callback at 0x008F5718> ignored
1105 * XXX but I'm unclear on exactly how that one happens. In any case,
1106 * XXX I haven't seen a real-life report of either of these.
1107 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001108 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001109#ifdef COUNT_ALLOCS
1110 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1111 each collection might release some types from the type
1112 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001113 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001114 /* nothing */;
1115#endif
Eric Snowdae02762017-09-14 00:35:58 -07001116
Nick Coghland6009512014-11-20 21:39:37 +10001117 /* Destroy all modules */
1118 PyImport_Cleanup();
1119
Victor Stinnere0deff32015-03-24 13:46:18 +01001120 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001121 if (flush_std_files() < 0) {
1122 status = -1;
1123 }
Nick Coghland6009512014-11-20 21:39:37 +10001124
1125 /* Collect final garbage. This disposes of cycles created by
1126 * class definitions, for example.
1127 * XXX This is disabled because it caused too many problems. If
1128 * XXX a __del__ or weakref callback triggers here, Python code has
1129 * XXX a hard time running, because even the sys module has been
1130 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1131 * XXX One symptom is a sequence of information-free messages
1132 * XXX coming from threads (if a __del__ or callback is invoked,
1133 * XXX other threads can execute too, and any exception they encounter
1134 * XXX triggers a comedy of errors as subsystem after subsystem
1135 * XXX fails to find what it *expects* to find in sys to help report
1136 * XXX the exception and consequent unexpected failures). I've also
1137 * XXX seen segfaults then, after adding print statements to the
1138 * XXX Python code getting called.
1139 */
1140#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001141 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001142#endif
1143
1144 /* Disable tracemalloc after all Python objects have been destroyed,
1145 so it is possible to use tracemalloc in objects destructor. */
1146 _PyTraceMalloc_Fini();
1147
1148 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1149 _PyImport_Fini();
1150
1151 /* Cleanup typeobject.c's internal caches. */
1152 _PyType_Fini();
1153
1154 /* unload faulthandler module */
1155 _PyFaulthandler_Fini();
1156
1157 /* Debugging stuff */
1158#ifdef COUNT_ALLOCS
Serhiy Storchaka7e160ce2016-07-03 21:03:53 +03001159 dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001160#endif
1161 /* dump hash stats */
1162 _PyHash_Fini();
1163
Eric Snowdae02762017-09-14 00:35:58 -07001164#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001165 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001166 _PyDebug_PrintTotalRefs();
1167 }
Eric Snowdae02762017-09-14 00:35:58 -07001168#endif
Nick Coghland6009512014-11-20 21:39:37 +10001169
1170#ifdef Py_TRACE_REFS
1171 /* Display all objects still alive -- this can invoke arbitrary
1172 * __repr__ overrides, so requires a mostly-intact interpreter.
1173 * Alas, a lot of stuff may still be alive now that will be cleaned
1174 * up later.
1175 */
Victor Stinnerda273412017-12-15 01:46:02 +01001176 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001177 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001178 }
Nick Coghland6009512014-11-20 21:39:37 +10001179#endif /* Py_TRACE_REFS */
1180
1181 /* Clear interpreter state and all thread states. */
1182 PyInterpreterState_Clear(interp);
1183
1184 /* Now we decref the exception classes. After this point nothing
1185 can raise an exception. That's okay, because each Fini() method
1186 below has been checked to make sure no exceptions are ever
1187 raised.
1188 */
1189
1190 _PyExc_Fini();
1191
1192 /* Sundry finalizers */
1193 PyMethod_Fini();
1194 PyFrame_Fini();
1195 PyCFunction_Fini();
1196 PyTuple_Fini();
1197 PyList_Fini();
1198 PySet_Fini();
1199 PyBytes_Fini();
1200 PyByteArray_Fini();
1201 PyLong_Fini();
1202 PyFloat_Fini();
1203 PyDict_Fini();
1204 PySlice_Fini();
1205 _PyGC_Fini();
Eric Snow6b4be192017-05-22 21:36:03 -07001206 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001207 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001208 PyAsyncGen_Fini();
Yury Selivanovf23746a2018-01-22 19:11:18 -05001209 _PyContext_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001210
1211 /* Cleanup Unicode implementation */
1212 _PyUnicode_Fini();
1213
1214 /* reset file system default encoding */
1215 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
1216 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
1217 Py_FileSystemDefaultEncoding = NULL;
1218 }
1219
1220 /* XXX Still allocated:
1221 - various static ad-hoc pointers to interned strings
1222 - int and float free list blocks
1223 - whatever various modules and libraries allocate
1224 */
1225
1226 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1227
1228 /* Cleanup auto-thread-state */
Nick Coghland6009512014-11-20 21:39:37 +10001229 _PyGILState_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001230
1231 /* Delete current thread. After this, many C API calls become crashy. */
1232 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001233
Nick Coghland6009512014-11-20 21:39:37 +10001234 PyInterpreterState_Delete(interp);
1235
1236#ifdef Py_TRACE_REFS
1237 /* Display addresses (& refcnts) of all objects still alive.
1238 * An address can be used to find the repr of the object, printed
1239 * above by _Py_PrintReferences.
1240 */
Victor Stinnerda273412017-12-15 01:46:02 +01001241 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001242 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001243 }
Nick Coghland6009512014-11-20 21:39:37 +10001244#endif /* Py_TRACE_REFS */
Victor Stinner34be807c2016-03-14 12:04:26 +01001245#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001246 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001247 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be807c2016-03-14 12:04:26 +01001248 }
Nick Coghland6009512014-11-20 21:39:37 +10001249#endif
1250
1251 call_ll_exitfuncs();
Victor Stinner9316ee42017-11-25 03:17:57 +01001252
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001253 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001254 return status;
1255}
1256
1257void
1258Py_Finalize(void)
1259{
1260 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001261}
1262
1263/* Create and initialize a new interpreter and thread, and return the
1264 new thread. This requires that Py_Initialize() has been called
1265 first.
1266
1267 Unsuccessful initialization yields a NULL pointer. Note that *no*
1268 exception information is available even in this case -- the
1269 exception information is held in the thread, and there is no
1270 thread.
1271
1272 Locking: as above.
1273
1274*/
1275
Victor Stinnera7368ac2017-11-15 18:11:45 -08001276static _PyInitError
1277new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001278{
1279 PyInterpreterState *interp;
1280 PyThreadState *tstate, *save_tstate;
1281 PyObject *bimod, *sysmod;
Victor Stinner9316ee42017-11-25 03:17:57 +01001282 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001283
Victor Stinnera7368ac2017-11-15 18:11:45 -08001284 if (!_PyRuntime.initialized) {
1285 return _Py_INIT_ERR("Py_Initialize must be called first");
1286 }
Nick Coghland6009512014-11-20 21:39:37 +10001287
Victor Stinner8a1be612016-03-14 22:07:55 +01001288 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1289 interpreters: disable PyGILState_Check(). */
1290 _PyGILState_check_enabled = 0;
1291
Nick Coghland6009512014-11-20 21:39:37 +10001292 interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001293 if (interp == NULL) {
1294 *tstate_p = NULL;
1295 return _Py_INIT_OK();
1296 }
Nick Coghland6009512014-11-20 21:39:37 +10001297
1298 tstate = PyThreadState_New(interp);
1299 if (tstate == NULL) {
1300 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001301 *tstate_p = NULL;
1302 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001303 }
1304
1305 save_tstate = PyThreadState_Swap(tstate);
1306
Eric Snow1abcf672017-05-23 21:46:51 -07001307 /* Copy the current interpreter config into the new interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +01001308 _PyCoreConfig *core_config;
1309 _PyMainInterpreterConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001310 if (save_tstate != NULL) {
Victor Stinnerda273412017-12-15 01:46:02 +01001311 core_config = &save_tstate->interp->core_config;
1312 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001313 } else {
1314 /* No current thread state, copy from the main interpreter */
1315 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinnerda273412017-12-15 01:46:02 +01001316 core_config = &main_interp->core_config;
1317 config = &main_interp->config;
1318 }
1319
1320 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
1321 return _Py_INIT_ERR("failed to copy core config");
1322 }
1323 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
1324 return _Py_INIT_ERR("failed to copy main interpreter config");
Eric Snow1abcf672017-05-23 21:46:51 -07001325 }
1326
Nick Coghland6009512014-11-20 21:39:37 +10001327 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001328 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001329 if (modules == NULL) {
1330 return _Py_INIT_ERR("can't make modules dictionary");
1331 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001332 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001333
Eric Snowd393c1b2017-09-14 12:18:12 -06001334 sysmod = _PyImport_FindBuiltin("sys", modules);
1335 if (sysmod != NULL) {
1336 interp->sysdict = PyModule_GetDict(sysmod);
1337 if (interp->sysdict == NULL)
1338 goto handle_error;
1339 Py_INCREF(interp->sysdict);
1340 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner41264f12017-12-15 02:05:29 +01001341 _PySys_EndInit(interp->sysdict, &interp->config);
Eric Snowd393c1b2017-09-14 12:18:12 -06001342 }
1343
1344 bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001345 if (bimod != NULL) {
1346 interp->builtins = PyModule_GetDict(bimod);
1347 if (interp->builtins == NULL)
1348 goto handle_error;
1349 Py_INCREF(interp->builtins);
1350 }
1351
1352 /* initialize builtin exceptions */
1353 _PyExc_Init(bimod);
1354
Nick Coghland6009512014-11-20 21:39:37 +10001355 if (bimod != NULL && sysmod != NULL) {
1356 PyObject *pstderr;
1357
Nick Coghland6009512014-11-20 21:39:37 +10001358 /* Set up a preliminary stderr printer until we have enough
1359 infrastructure for the io module in place. */
1360 pstderr = PyFile_NewStdPrinter(fileno(stderr));
Victor Stinnera7368ac2017-11-15 18:11:45 -08001361 if (pstderr == NULL) {
1362 return _Py_INIT_ERR("can't set preliminary stderr");
1363 }
Nick Coghland6009512014-11-20 21:39:37 +10001364 _PySys_SetObjectId(&PyId_stderr, pstderr);
1365 PySys_SetObject("__stderr__", pstderr);
1366 Py_DECREF(pstderr);
1367
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001368 err = _PyImportHooks_Init();
1369 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001370 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001371 }
Nick Coghland6009512014-11-20 21:39:37 +10001372
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001373 err = initimport(interp, sysmod);
1374 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001375 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001376 }
Nick Coghland6009512014-11-20 21:39:37 +10001377
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001378 err = initexternalimport(interp);
1379 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001380 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001381 }
Nick Coghland6009512014-11-20 21:39:37 +10001382
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001383 err = initfsencoding(interp);
1384 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001385 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001386 }
1387
Victor Stinner91106cd2017-12-13 12:29:09 +01001388 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001389 if (_Py_INIT_FAILED(err)) {
1390 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001391 }
1392
1393 err = add_main_module(interp);
1394 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001395 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001396 }
1397
1398 if (!Py_NoSiteFlag) {
1399 err = initsite();
1400 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001401 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001402 }
1403 }
Nick Coghland6009512014-11-20 21:39:37 +10001404 }
1405
Victor Stinnera7368ac2017-11-15 18:11:45 -08001406 if (PyErr_Occurred()) {
1407 goto handle_error;
1408 }
Nick Coghland6009512014-11-20 21:39:37 +10001409
Victor Stinnera7368ac2017-11-15 18:11:45 -08001410 *tstate_p = tstate;
1411 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001412
Nick Coghland6009512014-11-20 21:39:37 +10001413handle_error:
1414 /* Oops, it didn't work. Undo it all. */
1415
1416 PyErr_PrintEx(0);
1417 PyThreadState_Clear(tstate);
1418 PyThreadState_Swap(save_tstate);
1419 PyThreadState_Delete(tstate);
1420 PyInterpreterState_Delete(interp);
1421
Victor Stinnera7368ac2017-11-15 18:11:45 -08001422 *tstate_p = NULL;
1423 return _Py_INIT_OK();
1424}
1425
1426PyThreadState *
1427Py_NewInterpreter(void)
1428{
1429 PyThreadState *tstate;
1430 _PyInitError err = new_interpreter(&tstate);
1431 if (_Py_INIT_FAILED(err)) {
1432 _Py_FatalInitError(err);
1433 }
1434 return tstate;
1435
Nick Coghland6009512014-11-20 21:39:37 +10001436}
1437
1438/* Delete an interpreter and its last thread. This requires that the
1439 given thread state is current, that the thread has no remaining
1440 frames, and that it is its interpreter's only remaining thread.
1441 It is a fatal error to violate these constraints.
1442
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001443 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001444 everything, regardless.)
1445
1446 Locking: as above.
1447
1448*/
1449
1450void
1451Py_EndInterpreter(PyThreadState *tstate)
1452{
1453 PyInterpreterState *interp = tstate->interp;
1454
1455 if (tstate != PyThreadState_GET())
1456 Py_FatalError("Py_EndInterpreter: thread is not current");
1457 if (tstate->frame != NULL)
1458 Py_FatalError("Py_EndInterpreter: thread still has a frame");
1459
1460 wait_for_thread_shutdown();
1461
Marcel Plch776407f2017-12-20 11:17:58 +01001462 call_py_exitfuncs(interp);
1463
Nick Coghland6009512014-11-20 21:39:37 +10001464 if (tstate != interp->tstate_head || tstate->next != NULL)
1465 Py_FatalError("Py_EndInterpreter: not the last thread");
1466
1467 PyImport_Cleanup();
1468 PyInterpreterState_Clear(interp);
1469 PyThreadState_Swap(NULL);
1470 PyInterpreterState_Delete(interp);
1471}
1472
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001473/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001474
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001475static _PyInitError
1476add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001477{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001478 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001479 m = PyImport_AddModule("__main__");
1480 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001481 return _Py_INIT_ERR("can't create __main__ module");
1482
Nick Coghland6009512014-11-20 21:39:37 +10001483 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001484 ann_dict = PyDict_New();
1485 if ((ann_dict == NULL) ||
1486 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001487 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001488 }
1489 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001490
Nick Coghland6009512014-11-20 21:39:37 +10001491 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1492 PyObject *bimod = PyImport_ImportModule("builtins");
1493 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001494 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001495 }
1496 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001497 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001498 }
1499 Py_DECREF(bimod);
1500 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001501
Nick Coghland6009512014-11-20 21:39:37 +10001502 /* Main is a little special - imp.is_builtin("__main__") will return
1503 * False, but BuiltinImporter is still the most appropriate initial
1504 * setting for its __loader__ attribute. A more suitable value will
1505 * be set if __main__ gets further initialized later in the startup
1506 * process.
1507 */
1508 loader = PyDict_GetItemString(d, "__loader__");
1509 if (loader == NULL || loader == Py_None) {
1510 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1511 "BuiltinImporter");
1512 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001513 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001514 }
1515 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001516 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001517 }
1518 Py_DECREF(loader);
1519 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001520 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001521}
1522
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001523static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001524initfsencoding(PyInterpreterState *interp)
1525{
1526 PyObject *codec;
1527
Steve Dowercc16be82016-09-08 10:35:16 -07001528#ifdef MS_WINDOWS
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001529 if (Py_LegacyWindowsFSEncodingFlag) {
Steve Dowercc16be82016-09-08 10:35:16 -07001530 Py_FileSystemDefaultEncoding = "mbcs";
1531 Py_FileSystemDefaultEncodeErrors = "replace";
1532 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001533 else {
Steve Dowercc16be82016-09-08 10:35:16 -07001534 Py_FileSystemDefaultEncoding = "utf-8";
1535 Py_FileSystemDefaultEncodeErrors = "surrogatepass";
1536 }
1537#else
Victor Stinner91106cd2017-12-13 12:29:09 +01001538 if (Py_FileSystemDefaultEncoding == NULL &&
1539 interp->core_config.utf8_mode)
1540 {
1541 Py_FileSystemDefaultEncoding = "utf-8";
1542 Py_HasFileSystemDefaultEncoding = 1;
1543 }
1544 else if (Py_FileSystemDefaultEncoding == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001545 Py_FileSystemDefaultEncoding = get_locale_encoding();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001546 if (Py_FileSystemDefaultEncoding == NULL) {
1547 return _Py_INIT_ERR("Unable to get the locale encoding");
1548 }
Nick Coghland6009512014-11-20 21:39:37 +10001549
1550 Py_HasFileSystemDefaultEncoding = 0;
1551 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001552 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001553 }
Steve Dowercc16be82016-09-08 10:35:16 -07001554#endif
Nick Coghland6009512014-11-20 21:39:37 +10001555
1556 /* the encoding is mbcs, utf-8 or ascii */
1557 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
1558 if (!codec) {
1559 /* Such error can only occurs in critical situations: no more
1560 * memory, import a module of the standard library failed,
1561 * etc. */
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001562 return _Py_INIT_ERR("unable to load the file system codec");
Nick Coghland6009512014-11-20 21:39:37 +10001563 }
1564 Py_DECREF(codec);
1565 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001566 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001567}
1568
1569/* Import the site module (not into __main__ though) */
1570
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001571static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001572initsite(void)
1573{
1574 PyObject *m;
1575 m = PyImport_ImportModule("site");
1576 if (m == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001577 return _Py_INIT_USER_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001578 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001579 Py_DECREF(m);
1580 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001581}
1582
Victor Stinner874dbe82015-09-04 17:29:57 +02001583/* Check if a file descriptor is valid or not.
1584 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1585static int
1586is_valid_fd(int fd)
1587{
Victor Stinner1c4670e2017-05-04 00:45:56 +02001588#ifdef __APPLE__
1589 /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe
1590 and the other side of the pipe is closed, dup(1) succeed, whereas
1591 fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect
1592 such error. */
1593 struct stat st;
1594 return (fstat(fd, &st) == 0);
1595#else
Victor Stinner874dbe82015-09-04 17:29:57 +02001596 int fd2;
Steve Dower940f33a2016-09-08 11:21:54 -07001597 if (fd < 0)
Victor Stinner874dbe82015-09-04 17:29:57 +02001598 return 0;
1599 _Py_BEGIN_SUPPRESS_IPH
Victor Stinner449b2712015-09-29 13:59:50 +02001600 /* Prefer dup() over fstat(). fstat() can require input/output whereas
1601 dup() doesn't, there is a low risk of EMFILE/ENFILE at Python
1602 startup. */
Victor Stinner874dbe82015-09-04 17:29:57 +02001603 fd2 = dup(fd);
1604 if (fd2 >= 0)
1605 close(fd2);
1606 _Py_END_SUPPRESS_IPH
1607 return fd2 >= 0;
Victor Stinner1c4670e2017-05-04 00:45:56 +02001608#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001609}
1610
1611/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001612static PyObject*
1613create_stdio(PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001614 int fd, int write_mode, const char* name,
1615 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001616{
1617 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1618 const char* mode;
1619 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001620 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001621 int buffering, isatty;
1622 _Py_IDENTIFIER(open);
1623 _Py_IDENTIFIER(isatty);
1624 _Py_IDENTIFIER(TextIOWrapper);
1625 _Py_IDENTIFIER(mode);
1626
Victor Stinner874dbe82015-09-04 17:29:57 +02001627 if (!is_valid_fd(fd))
1628 Py_RETURN_NONE;
1629
Nick Coghland6009512014-11-20 21:39:37 +10001630 /* stdin is always opened in buffered mode, first because it shouldn't
1631 make a difference in common use cases, second because TextIOWrapper
1632 depends on the presence of a read1() method which only exists on
1633 buffered streams.
1634 */
1635 if (Py_UnbufferedStdioFlag && write_mode)
1636 buffering = 0;
1637 else
1638 buffering = -1;
1639 if (write_mode)
1640 mode = "wb";
1641 else
1642 mode = "rb";
1643 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1644 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001645 Py_None, Py_None, /* encoding, errors */
1646 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001647 if (buf == NULL)
1648 goto error;
1649
1650 if (buffering) {
1651 _Py_IDENTIFIER(raw);
1652 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1653 if (raw == NULL)
1654 goto error;
1655 }
1656 else {
1657 raw = buf;
1658 Py_INCREF(raw);
1659 }
1660
Steve Dower39294992016-08-30 21:22:36 -07001661#ifdef MS_WINDOWS
1662 /* Windows console IO is always UTF-8 encoded */
1663 if (PyWindowsConsoleIO_Check(raw))
1664 encoding = "utf-8";
1665#endif
1666
Nick Coghland6009512014-11-20 21:39:37 +10001667 text = PyUnicode_FromString(name);
1668 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1669 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001670 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001671 if (res == NULL)
1672 goto error;
1673 isatty = PyObject_IsTrue(res);
1674 Py_DECREF(res);
1675 if (isatty == -1)
1676 goto error;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001677 if (Py_UnbufferedStdioFlag)
1678 write_through = Py_True;
1679 else
1680 write_through = Py_False;
1681 if (isatty && !Py_UnbufferedStdioFlag)
Nick Coghland6009512014-11-20 21:39:37 +10001682 line_buffering = Py_True;
1683 else
1684 line_buffering = Py_False;
1685
1686 Py_CLEAR(raw);
1687 Py_CLEAR(text);
1688
1689#ifdef MS_WINDOWS
1690 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1691 newlines to "\n".
1692 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1693 newline = NULL;
1694#else
1695 /* sys.stdin: split lines at "\n".
1696 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1697 newline = "\n";
1698#endif
1699
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001700 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001701 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001702 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001703 Py_CLEAR(buf);
1704 if (stream == NULL)
1705 goto error;
1706
1707 if (write_mode)
1708 mode = "w";
1709 else
1710 mode = "r";
1711 text = PyUnicode_FromString(mode);
1712 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1713 goto error;
1714 Py_CLEAR(text);
1715 return stream;
1716
1717error:
1718 Py_XDECREF(buf);
1719 Py_XDECREF(stream);
1720 Py_XDECREF(text);
1721 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001722
Victor Stinner874dbe82015-09-04 17:29:57 +02001723 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1724 /* Issue #24891: the file descriptor was closed after the first
1725 is_valid_fd() check was called. Ignore the OSError and set the
1726 stream to None. */
1727 PyErr_Clear();
1728 Py_RETURN_NONE;
1729 }
1730 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001731}
1732
1733/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001734static _PyInitError
Victor Stinner91106cd2017-12-13 12:29:09 +01001735init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001736{
1737 PyObject *iomod = NULL, *wrapper;
1738 PyObject *bimod = NULL;
1739 PyObject *m;
1740 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001741 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001742 PyObject * encoding_attr;
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +02001743 char *pythonioencoding = NULL;
1744 const char *encoding, *errors;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001745 _PyInitError res = _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001746
1747 /* Hack to avoid a nasty recursion issue when Python is invoked
1748 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1749 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1750 goto error;
1751 }
1752 Py_DECREF(m);
1753
1754 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1755 goto error;
1756 }
1757 Py_DECREF(m);
1758
1759 if (!(bimod = PyImport_ImportModule("builtins"))) {
1760 goto error;
1761 }
1762
1763 if (!(iomod = PyImport_ImportModule("io"))) {
1764 goto error;
1765 }
1766 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1767 goto error;
1768 }
1769
1770 /* Set builtins.open */
1771 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1772 Py_DECREF(wrapper);
1773 goto error;
1774 }
1775 Py_DECREF(wrapper);
1776
1777 encoding = _Py_StandardStreamEncoding;
1778 errors = _Py_StandardStreamErrors;
1779 if (!encoding || !errors) {
Victor Stinner91106cd2017-12-13 12:29:09 +01001780 char *opt = Py_GETENV("PYTHONIOENCODING");
1781 if (opt && opt[0] != '\0') {
Nick Coghland6009512014-11-20 21:39:37 +10001782 char *err;
Victor Stinner91106cd2017-12-13 12:29:09 +01001783 pythonioencoding = _PyMem_Strdup(opt);
Nick Coghland6009512014-11-20 21:39:37 +10001784 if (pythonioencoding == NULL) {
1785 PyErr_NoMemory();
1786 goto error;
1787 }
1788 err = strchr(pythonioencoding, ':');
1789 if (err) {
1790 *err = '\0';
1791 err++;
Serhiy Storchakafc435112016-04-10 14:34:13 +03001792 if (*err && !errors) {
Nick Coghland6009512014-11-20 21:39:37 +10001793 errors = err;
1794 }
1795 }
1796 if (*pythonioencoding && !encoding) {
1797 encoding = pythonioencoding;
1798 }
1799 }
Victor Stinner91106cd2017-12-13 12:29:09 +01001800 else if (interp->core_config.utf8_mode) {
1801 encoding = "utf-8";
1802 errors = "surrogateescape";
1803 }
1804
1805 if (!errors && !pythonioencoding) {
Nick Coghlan6ea41862017-06-11 13:16:15 +10001806 /* Choose the default error handler based on the current locale */
1807 errors = get_default_standard_stream_error_handler();
Serhiy Storchakafc435112016-04-10 14:34:13 +03001808 }
Nick Coghland6009512014-11-20 21:39:37 +10001809 }
1810
1811 /* Set sys.stdin */
1812 fd = fileno(stdin);
1813 /* Under some conditions stdin, stdout and stderr may not be connected
1814 * and fileno() may point to an invalid file descriptor. For example
1815 * GUI apps don't have valid standard streams by default.
1816 */
Victor Stinner874dbe82015-09-04 17:29:57 +02001817 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1818 if (std == NULL)
1819 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001820 PySys_SetObject("__stdin__", std);
1821 _PySys_SetObjectId(&PyId_stdin, std);
1822 Py_DECREF(std);
1823
1824 /* Set sys.stdout */
1825 fd = fileno(stdout);
Victor Stinner874dbe82015-09-04 17:29:57 +02001826 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1827 if (std == NULL)
1828 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001829 PySys_SetObject("__stdout__", std);
1830 _PySys_SetObjectId(&PyId_stdout, std);
1831 Py_DECREF(std);
1832
1833#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1834 /* Set sys.stderr, replaces the preliminary stderr */
1835 fd = fileno(stderr);
Victor Stinner874dbe82015-09-04 17:29:57 +02001836 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1837 if (std == NULL)
1838 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001839
1840 /* Same as hack above, pre-import stderr's codec to avoid recursion
1841 when import.c tries to write to stderr in verbose mode. */
1842 encoding_attr = PyObject_GetAttrString(std, "encoding");
1843 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001844 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001845 if (std_encoding != NULL) {
1846 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1847 Py_XDECREF(codec_info);
1848 }
1849 Py_DECREF(encoding_attr);
1850 }
1851 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1852
1853 if (PySys_SetObject("__stderr__", std) < 0) {
1854 Py_DECREF(std);
1855 goto error;
1856 }
1857 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1858 Py_DECREF(std);
1859 goto error;
1860 }
1861 Py_DECREF(std);
1862#endif
1863
Victor Stinnera7368ac2017-11-15 18:11:45 -08001864 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001865
Victor Stinnera7368ac2017-11-15 18:11:45 -08001866error:
1867 res = _Py_INIT_ERR("can't initialize sys standard streams");
1868
Victor Stinner31e99082017-12-20 23:41:38 +01001869 /* Use the same allocator than Py_SetStandardStreamEncoding() */
1870 PyMemAllocatorEx old_alloc;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001871done:
Victor Stinner31e99082017-12-20 23:41:38 +01001872 _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
1873
Nick Coghland6009512014-11-20 21:39:37 +10001874 /* We won't need them anymore. */
1875 if (_Py_StandardStreamEncoding) {
1876 PyMem_RawFree(_Py_StandardStreamEncoding);
1877 _Py_StandardStreamEncoding = NULL;
1878 }
1879 if (_Py_StandardStreamErrors) {
1880 PyMem_RawFree(_Py_StandardStreamErrors);
1881 _Py_StandardStreamErrors = NULL;
1882 }
Victor Stinner31e99082017-12-20 23:41:38 +01001883
1884 PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
1885
Nick Coghland6009512014-11-20 21:39:37 +10001886 PyMem_Free(pythonioencoding);
1887 Py_XDECREF(bimod);
1888 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001889 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001890}
1891
1892
Victor Stinner10dc4842015-03-24 12:01:30 +01001893static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001894_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001895{
Victor Stinner10dc4842015-03-24 12:01:30 +01001896 fputc('\n', stderr);
1897 fflush(stderr);
1898
1899 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001900 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001901}
Victor Stinner791da1c2016-03-14 16:53:12 +01001902
1903/* Print the current exception (if an exception is set) with its traceback,
1904 or display the current Python stack.
1905
1906 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1907 called on catastrophic cases.
1908
1909 Return 1 if the traceback was displayed, 0 otherwise. */
1910
1911static int
1912_Py_FatalError_PrintExc(int fd)
1913{
1914 PyObject *ferr, *res;
1915 PyObject *exception, *v, *tb;
1916 int has_tb;
1917
1918 if (PyThreadState_GET() == NULL) {
1919 /* The GIL is released: trying to acquire it is likely to deadlock,
1920 just give up. */
1921 return 0;
1922 }
1923
1924 PyErr_Fetch(&exception, &v, &tb);
1925 if (exception == NULL) {
1926 /* No current exception */
1927 return 0;
1928 }
1929
1930 ferr = _PySys_GetObjectId(&PyId_stderr);
1931 if (ferr == NULL || ferr == Py_None) {
1932 /* sys.stderr is not set yet or set to None,
1933 no need to try to display the exception */
1934 return 0;
1935 }
1936
1937 PyErr_NormalizeException(&exception, &v, &tb);
1938 if (tb == NULL) {
1939 tb = Py_None;
1940 Py_INCREF(tb);
1941 }
1942 PyException_SetTraceback(v, tb);
1943 if (exception == NULL) {
1944 /* PyErr_NormalizeException() failed */
1945 return 0;
1946 }
1947
1948 has_tb = (tb != Py_None);
1949 PyErr_Display(exception, v, tb);
1950 Py_XDECREF(exception);
1951 Py_XDECREF(v);
1952 Py_XDECREF(tb);
1953
1954 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07001955 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01001956 if (res == NULL)
1957 PyErr_Clear();
1958 else
1959 Py_DECREF(res);
1960
1961 return has_tb;
1962}
1963
Nick Coghland6009512014-11-20 21:39:37 +10001964/* Print fatal error message and abort */
1965
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001966#ifdef MS_WINDOWS
1967static void
1968fatal_output_debug(const char *msg)
1969{
1970 /* buffer of 256 bytes allocated on the stack */
1971 WCHAR buffer[256 / sizeof(WCHAR)];
1972 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
1973 size_t msglen;
1974
1975 OutputDebugStringW(L"Fatal Python error: ");
1976
1977 msglen = strlen(msg);
1978 while (msglen) {
1979 size_t i;
1980
1981 if (buflen > msglen) {
1982 buflen = msglen;
1983 }
1984
1985 /* Convert the message to wchar_t. This uses a simple one-to-one
1986 conversion, assuming that the this error message actually uses
1987 ASCII only. If this ceases to be true, we will have to convert. */
1988 for (i=0; i < buflen; ++i) {
1989 buffer[i] = msg[i];
1990 }
1991 buffer[i] = L'\0';
1992 OutputDebugStringW(buffer);
1993
1994 msg += buflen;
1995 msglen -= buflen;
1996 }
1997 OutputDebugStringW(L"\n");
1998}
1999#endif
2000
Benjamin Petersoncef88b92017-11-25 13:02:55 -08002001static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002002fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002003{
2004 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01002005 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002006
2007 if (reentrant) {
2008 /* Py_FatalError() caused a second fatal error.
2009 Example: flush_std_files() raises a recursion error. */
2010 goto exit;
2011 }
2012 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002013
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002014 fprintf(stderr, "Fatal Python error: ");
2015 if (prefix) {
2016 fputs(prefix, stderr);
2017 fputs(": ", stderr);
2018 }
2019 if (msg) {
2020 fputs(msg, stderr);
2021 }
2022 else {
2023 fprintf(stderr, "<message not set>");
2024 }
2025 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10002026 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01002027
Victor Stinnere0deff32015-03-24 13:46:18 +01002028 /* Print the exception (if an exception is set) with its traceback,
2029 * or display the current Python stack. */
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002030 if (!_Py_FatalError_PrintExc(fd)) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002031 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002032 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002033
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002034 /* The main purpose of faulthandler is to display the traceback.
2035 This function already did its best to display a traceback.
2036 Disable faulthandler to prevent writing a second traceback
2037 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002038 _PyFaulthandler_Fini();
2039
Victor Stinner791da1c2016-03-14 16:53:12 +01002040 /* Check if the current Python thread hold the GIL */
2041 if (PyThreadState_GET() != NULL) {
2042 /* Flush sys.stdout and sys.stderr */
2043 flush_std_files();
2044 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002045
Nick Coghland6009512014-11-20 21:39:37 +10002046#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002047 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002048#endif /* MS_WINDOWS */
2049
2050exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002051 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002052#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002053 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002054#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002055 abort();
2056 }
2057 else {
2058 exit(status);
2059 }
2060}
2061
Victor Stinner19760862017-12-20 01:41:59 +01002062void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002063Py_FatalError(const char *msg)
2064{
2065 fatal_error(NULL, msg, -1);
2066}
2067
Victor Stinner19760862017-12-20 01:41:59 +01002068void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002069_Py_FatalInitError(_PyInitError err)
2070{
2071 /* On "user" error: exit with status 1.
2072 For all other errors, call abort(). */
2073 int status = err.user_err ? 1 : -1;
2074 fatal_error(err.prefix, err.msg, status);
Nick Coghland6009512014-11-20 21:39:37 +10002075}
2076
2077/* Clean up and exit */
2078
Victor Stinnerd7292b52016-06-17 12:29:00 +02002079# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002080
Nick Coghland6009512014-11-20 21:39:37 +10002081/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002082void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002083{
Marcel Plch776407f2017-12-20 11:17:58 +01002084 PyThreadState *ts;
2085 PyInterpreterState *is;
Victor Stinnerca719ac2017-12-20 18:00:19 +01002086
Marcel Plch776407f2017-12-20 11:17:58 +01002087 ts = PyThreadState_GET();
2088 is = ts->interp;
2089
Antoine Pitroufc5db952017-12-13 02:29:07 +01002090 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002091 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2092
2093 is->pyexitfunc = func;
2094 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002095}
2096
2097static void
Marcel Plch776407f2017-12-20 11:17:58 +01002098call_py_exitfuncs(PyInterpreterState *istate)
Nick Coghland6009512014-11-20 21:39:37 +10002099{
Marcel Plch776407f2017-12-20 11:17:58 +01002100 if (istate->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002101 return;
2102
Marcel Plch776407f2017-12-20 11:17:58 +01002103 (*istate->pyexitfunc)(istate->pyexitmodule);
Nick Coghland6009512014-11-20 21:39:37 +10002104 PyErr_Clear();
2105}
2106
2107/* Wait until threading._shutdown completes, provided
2108 the threading module was imported in the first place.
2109 The shutdown routine will wait until all non-daemon
2110 "threading" threads have completed. */
2111static void
2112wait_for_thread_shutdown(void)
2113{
Nick Coghland6009512014-11-20 21:39:37 +10002114 _Py_IDENTIFIER(_shutdown);
2115 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002116 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002117 if (threading == NULL) {
2118 /* threading not imported */
2119 PyErr_Clear();
2120 return;
2121 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002122 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002123 if (result == NULL) {
2124 PyErr_WriteUnraisable(threading);
2125 }
2126 else {
2127 Py_DECREF(result);
2128 }
2129 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002130}
2131
2132#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002133int Py_AtExit(void (*func)(void))
2134{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002135 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002136 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002137 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002138 return 0;
2139}
2140
2141static void
2142call_ll_exitfuncs(void)
2143{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002144 while (_PyRuntime.nexitfuncs > 0)
2145 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002146
2147 fflush(stdout);
2148 fflush(stderr);
2149}
2150
2151void
2152Py_Exit(int sts)
2153{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002154 if (Py_FinalizeEx() < 0) {
2155 sts = 120;
2156 }
Nick Coghland6009512014-11-20 21:39:37 +10002157
2158 exit(sts);
2159}
2160
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002161static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002162initsigs(void)
2163{
2164#ifdef SIGPIPE
2165 PyOS_setsig(SIGPIPE, SIG_IGN);
2166#endif
2167#ifdef SIGXFZ
2168 PyOS_setsig(SIGXFZ, SIG_IGN);
2169#endif
2170#ifdef SIGXFSZ
2171 PyOS_setsig(SIGXFSZ, SIG_IGN);
2172#endif
2173 PyOS_InitInterrupts(); /* May imply initsignal() */
2174 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002175 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002176 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002177 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002178}
2179
2180
2181/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2182 *
2183 * All of the code in this function must only use async-signal-safe functions,
2184 * listed at `man 7 signal` or
2185 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2186 */
2187void
2188_Py_RestoreSignals(void)
2189{
2190#ifdef SIGPIPE
2191 PyOS_setsig(SIGPIPE, SIG_DFL);
2192#endif
2193#ifdef SIGXFZ
2194 PyOS_setsig(SIGXFZ, SIG_DFL);
2195#endif
2196#ifdef SIGXFSZ
2197 PyOS_setsig(SIGXFSZ, SIG_DFL);
2198#endif
2199}
2200
2201
2202/*
2203 * The file descriptor fd is considered ``interactive'' if either
2204 * a) isatty(fd) is TRUE, or
2205 * b) the -i flag was given, and the filename associated with
2206 * the descriptor is NULL or "<stdin>" or "???".
2207 */
2208int
2209Py_FdIsInteractive(FILE *fp, const char *filename)
2210{
2211 if (isatty((int)fileno(fp)))
2212 return 1;
2213 if (!Py_InteractiveFlag)
2214 return 0;
2215 return (filename == NULL) ||
2216 (strcmp(filename, "<stdin>") == 0) ||
2217 (strcmp(filename, "???") == 0);
2218}
2219
2220
Nick Coghland6009512014-11-20 21:39:37 +10002221/* Wrappers around sigaction() or signal(). */
2222
2223PyOS_sighandler_t
2224PyOS_getsig(int sig)
2225{
2226#ifdef HAVE_SIGACTION
2227 struct sigaction context;
2228 if (sigaction(sig, NULL, &context) == -1)
2229 return SIG_ERR;
2230 return context.sa_handler;
2231#else
2232 PyOS_sighandler_t handler;
2233/* Special signal handling for the secure CRT in Visual Studio 2005 */
2234#if defined(_MSC_VER) && _MSC_VER >= 1400
2235 switch (sig) {
2236 /* Only these signals are valid */
2237 case SIGINT:
2238 case SIGILL:
2239 case SIGFPE:
2240 case SIGSEGV:
2241 case SIGTERM:
2242 case SIGBREAK:
2243 case SIGABRT:
2244 break;
2245 /* Don't call signal() with other values or it will assert */
2246 default:
2247 return SIG_ERR;
2248 }
2249#endif /* _MSC_VER && _MSC_VER >= 1400 */
2250 handler = signal(sig, SIG_IGN);
2251 if (handler != SIG_ERR)
2252 signal(sig, handler);
2253 return handler;
2254#endif
2255}
2256
2257/*
2258 * All of the code in this function must only use async-signal-safe functions,
2259 * listed at `man 7 signal` or
2260 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2261 */
2262PyOS_sighandler_t
2263PyOS_setsig(int sig, PyOS_sighandler_t handler)
2264{
2265#ifdef HAVE_SIGACTION
2266 /* Some code in Modules/signalmodule.c depends on sigaction() being
2267 * used here if HAVE_SIGACTION is defined. Fix that if this code
2268 * changes to invalidate that assumption.
2269 */
2270 struct sigaction context, ocontext;
2271 context.sa_handler = handler;
2272 sigemptyset(&context.sa_mask);
2273 context.sa_flags = 0;
2274 if (sigaction(sig, &context, &ocontext) == -1)
2275 return SIG_ERR;
2276 return ocontext.sa_handler;
2277#else
2278 PyOS_sighandler_t oldhandler;
2279 oldhandler = signal(sig, handler);
2280#ifdef HAVE_SIGINTERRUPT
2281 siginterrupt(sig, 1);
2282#endif
2283 return oldhandler;
2284#endif
2285}
2286
2287#ifdef __cplusplus
2288}
2289#endif