blob: 219a46558825bcb40ba41050a810bf40a1b3b17e [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
688 if (!_PyFrame_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800689 return _Py_INIT_ERR("can't init frames");
Nick Coghland6009512014-11-20 21:39:37 +1000690
691 if (!_PyLong_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800692 return _Py_INIT_ERR("can't init longs");
Nick Coghland6009512014-11-20 21:39:37 +1000693
694 if (!PyByteArray_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800695 return _Py_INIT_ERR("can't init bytearray");
Nick Coghland6009512014-11-20 21:39:37 +1000696
697 if (!_PyFloat_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800698 return _Py_INIT_ERR("can't init float");
Nick Coghland6009512014-11-20 21:39:37 +1000699
Eric Snowd393c1b2017-09-14 12:18:12 -0600700 PyObject *modules = PyDict_New();
701 if (modules == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800702 return _Py_INIT_ERR("can't make modules dictionary");
Eric Snowd393c1b2017-09-14 12:18:12 -0600703 interp->modules = modules;
704
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800705 err = _PySys_BeginInit(&sysmod);
706 if (_Py_INIT_FAILED(err)) {
707 return err;
708 }
709
Eric Snowd393c1b2017-09-14 12:18:12 -0600710 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800711 if (interp->sysdict == NULL) {
712 return _Py_INIT_ERR("can't initialize sys dict");
713 }
714
Eric Snowd393c1b2017-09-14 12:18:12 -0600715 Py_INCREF(interp->sysdict);
716 PyDict_SetItemString(interp->sysdict, "modules", modules);
717 _PyImport_FixupBuiltin(sysmod, "sys", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000718
719 /* Init Unicode implementation; relies on the codec registry */
720 if (_PyUnicode_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800721 return _Py_INIT_ERR("can't initialize unicode");
Eric Snow1abcf672017-05-23 21:46:51 -0700722
Nick Coghland6009512014-11-20 21:39:37 +1000723 if (_PyStructSequence_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800724 return _Py_INIT_ERR("can't initialize structseq");
Nick Coghland6009512014-11-20 21:39:37 +1000725
726 bimod = _PyBuiltin_Init();
727 if (bimod == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800728 return _Py_INIT_ERR("can't initialize builtins modules");
Eric Snowd393c1b2017-09-14 12:18:12 -0600729 _PyImport_FixupBuiltin(bimod, "builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000730 interp->builtins = PyModule_GetDict(bimod);
731 if (interp->builtins == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800732 return _Py_INIT_ERR("can't initialize builtins dict");
Nick Coghland6009512014-11-20 21:39:37 +1000733 Py_INCREF(interp->builtins);
734
735 /* initialize builtin exceptions */
736 _PyExc_Init(bimod);
737
Nick Coghland6009512014-11-20 21:39:37 +1000738 /* Set up a preliminary stderr printer until we have enough
739 infrastructure for the io module in place. */
740 pstderr = PyFile_NewStdPrinter(fileno(stderr));
741 if (pstderr == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800742 return _Py_INIT_ERR("can't set preliminary stderr");
Nick Coghland6009512014-11-20 21:39:37 +1000743 _PySys_SetObjectId(&PyId_stderr, pstderr);
744 PySys_SetObject("__stderr__", pstderr);
745 Py_DECREF(pstderr);
746
Victor Stinner672b6ba2017-12-06 17:25:50 +0100747 err = _PyImport_Init(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800748 if (_Py_INIT_FAILED(err)) {
749 return err;
750 }
Nick Coghland6009512014-11-20 21:39:37 +1000751
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800752 err = _PyImportHooks_Init();
753 if (_Py_INIT_FAILED(err)) {
754 return err;
755 }
Nick Coghland6009512014-11-20 21:39:37 +1000756
757 /* Initialize _warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100758 if (_PyWarnings_Init() == NULL) {
Victor Stinner1f151112017-11-23 10:43:14 +0100759 return _Py_INIT_ERR("can't initialize warnings");
760 }
Nick Coghland6009512014-11-20 21:39:37 +1000761
Yury Selivanovf23746a2018-01-22 19:11:18 -0500762 if (!_PyContext_Init())
763 return _Py_INIT_ERR("can't init context");
764
Eric Snow1abcf672017-05-23 21:46:51 -0700765 /* This call sets up builtin and frozen import support */
766 if (!interp->core_config._disable_importlib) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800767 err = initimport(interp, sysmod);
768 if (_Py_INIT_FAILED(err)) {
769 return err;
770 }
Eric Snow1abcf672017-05-23 21:46:51 -0700771 }
772
773 /* Only when we get here is the runtime core fully initialized */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600774 _PyRuntime.core_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800775 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700776}
777
Miss Islington (bot)03ec4df2018-07-20 17:16:22 -0700778/* Py_Initialize() has already been called: update the main interpreter
779 configuration. Example of bpo-34008: Py_Main() called after
780 Py_Initialize(). */
781static _PyInitError
782_Py_ReconfigureMainInterpreter(PyInterpreterState *interp,
783 const _PyMainInterpreterConfig *config)
784{
785 if (config->argv != NULL) {
786 int res = PyDict_SetItemString(interp->sysdict, "argv", config->argv);
787 if (res < 0) {
788 return _Py_INIT_ERR("fail to set sys.argv");
789 }
790 }
791 return _Py_INIT_OK();
792}
793
Eric Snowc7ec9982017-05-23 23:00:52 -0700794/* Update interpreter state based on supplied configuration settings
795 *
796 * After calling this function, most of the restrictions on the interpreter
797 * are lifted. The only remaining incomplete settings are those related
798 * to the main module (sys.argv[0], __main__ metadata)
799 *
800 * Calling this when the interpreter is not initializing, is already
801 * initialized or without a valid current thread state is a fatal error.
802 * Other errors should be reported as normal Python exceptions with a
803 * non-zero return code.
804 */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800805_PyInitError
806_Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -0700807{
808 PyInterpreterState *interp;
809 PyThreadState *tstate;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800810 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700811
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600812 if (!_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800813 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700814 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700815
Eric Snow1abcf672017-05-23 21:46:51 -0700816 /* Get current thread state and interpreter pointer */
817 tstate = PyThreadState_GET();
818 if (!tstate)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800819 return _Py_INIT_ERR("failed to read thread state");
Eric Snow1abcf672017-05-23 21:46:51 -0700820 interp = tstate->interp;
821 if (!interp)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800822 return _Py_INIT_ERR("failed to get interpreter");
Eric Snow1abcf672017-05-23 21:46:51 -0700823
824 /* Now finish configuring the main interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +0100825 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
826 return _Py_INIT_ERR("failed to copy main interpreter config");
827 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700828
Miss Islington (bot)03ec4df2018-07-20 17:16:22 -0700829 if (_PyRuntime.initialized) {
830 return _Py_ReconfigureMainInterpreter(interp, config);
831 }
832
Eric Snow1abcf672017-05-23 21:46:51 -0700833 if (interp->core_config._disable_importlib) {
834 /* Special mode for freeze_importlib: run with no import system
835 *
836 * This means anything which needs support from extension modules
837 * or pure Python code in the standard library won't work.
838 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600839 _PyRuntime.initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800840 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700841 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100842
Victor Stinner33c377e2017-12-05 15:12:41 +0100843 if (_PyTime_Init() < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800844 return _Py_INIT_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100845 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200846
Victor Stinner41264f12017-12-15 02:05:29 +0100847 if (_PySys_EndInit(interp->sysdict, &interp->config) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800848 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100849 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800850
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800851 err = initexternalimport(interp);
852 if (_Py_INIT_FAILED(err)) {
853 return err;
854 }
Nick Coghland6009512014-11-20 21:39:37 +1000855
856 /* initialize the faulthandler module */
Victor Stinnera7368ac2017-11-15 18:11:45 -0800857 err = _PyFaulthandler_Init(interp->core_config.faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800858 if (_Py_INIT_FAILED(err)) {
859 return err;
860 }
Nick Coghland6009512014-11-20 21:39:37 +1000861
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800862 err = initfsencoding(interp);
863 if (_Py_INIT_FAILED(err)) {
864 return err;
865 }
Nick Coghland6009512014-11-20 21:39:37 +1000866
Victor Stinner1f151112017-11-23 10:43:14 +0100867 if (interp->config.install_signal_handlers) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800868 err = initsigs(); /* Signal handling stuff, including initintr() */
869 if (_Py_INIT_FAILED(err)) {
870 return err;
871 }
872 }
Nick Coghland6009512014-11-20 21:39:37 +1000873
Victor Stinnera7368ac2017-11-15 18:11:45 -0800874 if (_PyTraceMalloc_Init(interp->core_config.tracemalloc) < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800875 return _Py_INIT_ERR("can't initialize tracemalloc");
Nick Coghland6009512014-11-20 21:39:37 +1000876
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800877 err = add_main_module(interp);
878 if (_Py_INIT_FAILED(err)) {
879 return err;
880 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800881
Victor Stinner91106cd2017-12-13 12:29:09 +0100882 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -0800883 if (_Py_INIT_FAILED(err)) {
884 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800885 }
Nick Coghland6009512014-11-20 21:39:37 +1000886
887 /* Initialize warnings. */
Victor Stinner5d862462017-12-19 11:35:58 +0100888 if (interp->config.warnoptions != NULL &&
889 PyList_Size(interp->config.warnoptions) > 0)
890 {
Nick Coghland6009512014-11-20 21:39:37 +1000891 PyObject *warnings_module = PyImport_ImportModule("warnings");
892 if (warnings_module == NULL) {
893 fprintf(stderr, "'import warnings' failed; traceback:\n");
894 PyErr_Print();
895 }
896 Py_XDECREF(warnings_module);
897 }
898
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600899 _PyRuntime.initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700900
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800901 if (!Py_NoSiteFlag) {
902 err = initsite(); /* Module site */
903 if (_Py_INIT_FAILED(err)) {
904 return err;
905 }
906 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800907 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000908}
909
Eric Snowc7ec9982017-05-23 23:00:52 -0700910#undef _INIT_DEBUG_PRINT
911
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800912_PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700913_Py_InitializeEx_Private(int install_sigs, int install_importlib)
914{
Miss Islington (bot)3747dd12018-06-22 10:33:48 -0700915 if (_PyRuntime.initialized) {
916 /* bpo-33932: Calling Py_Initialize() twice does nothing. */
917 return _Py_INIT_OK();
918 }
919
Victor Stinner9cfc0022017-12-20 19:36:46 +0100920 _PyCoreConfig config = _PyCoreConfig_INIT;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800921 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700922
Victor Stinner9cfc0022017-12-20 19:36:46 +0100923 config.ignore_environment = Py_IgnoreEnvironmentFlag;
924 config._disable_importlib = !install_importlib;
Eric Snowc7ec9982017-05-23 23:00:52 -0700925 config.install_signal_handlers = install_sigs;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800926
Victor Stinner9cfc0022017-12-20 19:36:46 +0100927 err = _PyCoreConfig_Read(&config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800928 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100929 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800930 }
931
Victor Stinner9cfc0022017-12-20 19:36:46 +0100932 err = _Py_InitializeCore(&config);
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100933 if (_Py_INIT_FAILED(err)) {
934 goto done;
935 }
936
Victor Stinner9cfc0022017-12-20 19:36:46 +0100937 _PyMainInterpreterConfig main_config = _PyMainInterpreterConfig_INIT;
938 err = _PyMainInterpreterConfig_Read(&main_config, &config);
939 if (!_Py_INIT_FAILED(err)) {
940 err = _Py_InitializeMainInterpreter(&main_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800941 }
Victor Stinner9cfc0022017-12-20 19:36:46 +0100942 _PyMainInterpreterConfig_Clear(&main_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800943 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100944 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800945 }
946
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100947 err = _Py_INIT_OK();
948
949done:
Victor Stinner9cfc0022017-12-20 19:36:46 +0100950 _PyCoreConfig_Clear(&config);
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100951 return err;
Eric Snow1abcf672017-05-23 21:46:51 -0700952}
953
954
955void
Nick Coghland6009512014-11-20 21:39:37 +1000956Py_InitializeEx(int install_sigs)
957{
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800958 _PyInitError err = _Py_InitializeEx_Private(install_sigs, 1);
959 if (_Py_INIT_FAILED(err)) {
960 _Py_FatalInitError(err);
961 }
Nick Coghland6009512014-11-20 21:39:37 +1000962}
963
964void
965Py_Initialize(void)
966{
967 Py_InitializeEx(1);
968}
969
970
971#ifdef COUNT_ALLOCS
972extern void dump_counts(FILE*);
973#endif
974
975/* Flush stdout and stderr */
976
977static int
978file_is_closed(PyObject *fobj)
979{
980 int r;
981 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
982 if (tmp == NULL) {
983 PyErr_Clear();
984 return 0;
985 }
986 r = PyObject_IsTrue(tmp);
987 Py_DECREF(tmp);
988 if (r < 0)
989 PyErr_Clear();
990 return r > 0;
991}
992
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000993static int
Nick Coghland6009512014-11-20 21:39:37 +1000994flush_std_files(void)
995{
996 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
997 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
998 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000999 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001000
1001 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001002 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001003 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001004 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001005 status = -1;
1006 }
Nick Coghland6009512014-11-20 21:39:37 +10001007 else
1008 Py_DECREF(tmp);
1009 }
1010
1011 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001012 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001013 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001014 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001015 status = -1;
1016 }
Nick Coghland6009512014-11-20 21:39:37 +10001017 else
1018 Py_DECREF(tmp);
1019 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001020
1021 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001022}
1023
1024/* Undo the effect of Py_Initialize().
1025
1026 Beware: if multiple interpreter and/or thread states exist, these
1027 are not wiped out; only the current thread and interpreter state
1028 are deleted. But since everything else is deleted, those other
1029 interpreter and thread states should no longer be used.
1030
1031 (XXX We should do better, e.g. wipe out all interpreters and
1032 threads.)
1033
1034 Locking: as above.
1035
1036*/
1037
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001038int
1039Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001040{
1041 PyInterpreterState *interp;
1042 PyThreadState *tstate;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001043 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001044
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001045 if (!_PyRuntime.initialized)
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001046 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001047
1048 wait_for_thread_shutdown();
1049
Marcel Plch776407f2017-12-20 11:17:58 +01001050 /* Get current thread state and interpreter pointer */
1051 tstate = PyThreadState_GET();
1052 interp = tstate->interp;
1053
Nick Coghland6009512014-11-20 21:39:37 +10001054 /* The interpreter is still entirely intact at this point, and the
1055 * exit funcs may be relying on that. In particular, if some thread
1056 * or exit func is still waiting to do an import, the import machinery
1057 * expects Py_IsInitialized() to return true. So don't say the
1058 * interpreter is uninitialized until after the exit funcs have run.
1059 * Note that Threading.py uses an exit func to do a join on all the
1060 * threads created thru it, so this also protects pending imports in
1061 * the threads created via Threading.
1062 */
Nick Coghland6009512014-11-20 21:39:37 +10001063
Marcel Plch776407f2017-12-20 11:17:58 +01001064 call_py_exitfuncs(interp);
Nick Coghland6009512014-11-20 21:39:37 +10001065
Victor Stinnerda273412017-12-15 01:46:02 +01001066 /* Copy the core config, PyInterpreterState_Delete() free
1067 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001068#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001069 int show_ref_count = interp->core_config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001070#endif
1071#ifdef Py_TRACE_REFS
Victor Stinnerda273412017-12-15 01:46:02 +01001072 int dump_refs = interp->core_config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001073#endif
1074#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001075 int malloc_stats = interp->core_config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001076#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001077
Nick Coghland6009512014-11-20 21:39:37 +10001078 /* Remaining threads (e.g. daemon threads) will automatically exit
1079 after taking the GIL (in PyEval_RestoreThread()). */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001080 _PyRuntime.finalizing = tstate;
1081 _PyRuntime.initialized = 0;
1082 _PyRuntime.core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001083
Victor Stinnere0deff32015-03-24 13:46:18 +01001084 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001085 if (flush_std_files() < 0) {
1086 status = -1;
1087 }
Nick Coghland6009512014-11-20 21:39:37 +10001088
1089 /* Disable signal handling */
1090 PyOS_FiniInterrupts();
1091
1092 /* Collect garbage. This may call finalizers; it's nice to call these
1093 * before all modules are destroyed.
1094 * XXX If a __del__ or weakref callback is triggered here, and tries to
1095 * XXX import a module, bad things can happen, because Python no
1096 * XXX longer believes it's initialized.
1097 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1098 * XXX is easy to provoke that way. I've also seen, e.g.,
1099 * XXX Exception exceptions.ImportError: 'No module named sha'
1100 * XXX in <function callback at 0x008F5718> ignored
1101 * XXX but I'm unclear on exactly how that one happens. In any case,
1102 * XXX I haven't seen a real-life report of either of these.
1103 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001104 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001105#ifdef COUNT_ALLOCS
1106 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1107 each collection might release some types from the type
1108 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001109 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001110 /* nothing */;
1111#endif
Eric Snowdae02762017-09-14 00:35:58 -07001112
Nick Coghland6009512014-11-20 21:39:37 +10001113 /* Destroy all modules */
1114 PyImport_Cleanup();
1115
Victor Stinnere0deff32015-03-24 13:46:18 +01001116 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001117 if (flush_std_files() < 0) {
1118 status = -1;
1119 }
Nick Coghland6009512014-11-20 21:39:37 +10001120
1121 /* Collect final garbage. This disposes of cycles created by
1122 * class definitions, for example.
1123 * XXX This is disabled because it caused too many problems. If
1124 * XXX a __del__ or weakref callback triggers here, Python code has
1125 * XXX a hard time running, because even the sys module has been
1126 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1127 * XXX One symptom is a sequence of information-free messages
1128 * XXX coming from threads (if a __del__ or callback is invoked,
1129 * XXX other threads can execute too, and any exception they encounter
1130 * XXX triggers a comedy of errors as subsystem after subsystem
1131 * XXX fails to find what it *expects* to find in sys to help report
1132 * XXX the exception and consequent unexpected failures). I've also
1133 * XXX seen segfaults then, after adding print statements to the
1134 * XXX Python code getting called.
1135 */
1136#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001137 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001138#endif
1139
1140 /* Disable tracemalloc after all Python objects have been destroyed,
1141 so it is possible to use tracemalloc in objects destructor. */
1142 _PyTraceMalloc_Fini();
1143
1144 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1145 _PyImport_Fini();
1146
1147 /* Cleanup typeobject.c's internal caches. */
1148 _PyType_Fini();
1149
1150 /* unload faulthandler module */
1151 _PyFaulthandler_Fini();
1152
1153 /* Debugging stuff */
1154#ifdef COUNT_ALLOCS
Serhiy Storchaka7e160ce2016-07-03 21:03:53 +03001155 dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001156#endif
1157 /* dump hash stats */
1158 _PyHash_Fini();
1159
Eric Snowdae02762017-09-14 00:35:58 -07001160#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001161 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001162 _PyDebug_PrintTotalRefs();
1163 }
Eric Snowdae02762017-09-14 00:35:58 -07001164#endif
Nick Coghland6009512014-11-20 21:39:37 +10001165
1166#ifdef Py_TRACE_REFS
1167 /* Display all objects still alive -- this can invoke arbitrary
1168 * __repr__ overrides, so requires a mostly-intact interpreter.
1169 * Alas, a lot of stuff may still be alive now that will be cleaned
1170 * up later.
1171 */
Victor Stinnerda273412017-12-15 01:46:02 +01001172 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001173 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001174 }
Nick Coghland6009512014-11-20 21:39:37 +10001175#endif /* Py_TRACE_REFS */
1176
1177 /* Clear interpreter state and all thread states. */
1178 PyInterpreterState_Clear(interp);
1179
1180 /* Now we decref the exception classes. After this point nothing
1181 can raise an exception. That's okay, because each Fini() method
1182 below has been checked to make sure no exceptions are ever
1183 raised.
1184 */
1185
1186 _PyExc_Fini();
1187
1188 /* Sundry finalizers */
1189 PyMethod_Fini();
1190 PyFrame_Fini();
1191 PyCFunction_Fini();
1192 PyTuple_Fini();
1193 PyList_Fini();
1194 PySet_Fini();
1195 PyBytes_Fini();
1196 PyByteArray_Fini();
1197 PyLong_Fini();
1198 PyFloat_Fini();
1199 PyDict_Fini();
1200 PySlice_Fini();
1201 _PyGC_Fini();
Eric Snow6b4be192017-05-22 21:36:03 -07001202 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001203 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001204 PyAsyncGen_Fini();
Yury Selivanovf23746a2018-01-22 19:11:18 -05001205 _PyContext_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001206
1207 /* Cleanup Unicode implementation */
1208 _PyUnicode_Fini();
1209
1210 /* reset file system default encoding */
1211 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
1212 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
1213 Py_FileSystemDefaultEncoding = NULL;
1214 }
1215
1216 /* XXX Still allocated:
1217 - various static ad-hoc pointers to interned strings
1218 - int and float free list blocks
1219 - whatever various modules and libraries allocate
1220 */
1221
1222 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1223
1224 /* Cleanup auto-thread-state */
Nick Coghland6009512014-11-20 21:39:37 +10001225 _PyGILState_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001226
1227 /* Delete current thread. After this, many C API calls become crashy. */
1228 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001229
Nick Coghland6009512014-11-20 21:39:37 +10001230 PyInterpreterState_Delete(interp);
1231
1232#ifdef Py_TRACE_REFS
1233 /* Display addresses (& refcnts) of all objects still alive.
1234 * An address can be used to find the repr of the object, printed
1235 * above by _Py_PrintReferences.
1236 */
Victor Stinnerda273412017-12-15 01:46:02 +01001237 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001238 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001239 }
Nick Coghland6009512014-11-20 21:39:37 +10001240#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001241#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001242 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001243 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be8072016-03-14 12:04:26 +01001244 }
Nick Coghland6009512014-11-20 21:39:37 +10001245#endif
1246
1247 call_ll_exitfuncs();
Victor Stinner9316ee42017-11-25 03:17:57 +01001248
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001249 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001250 return status;
1251}
1252
1253void
1254Py_Finalize(void)
1255{
1256 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001257}
1258
1259/* Create and initialize a new interpreter and thread, and return the
1260 new thread. This requires that Py_Initialize() has been called
1261 first.
1262
1263 Unsuccessful initialization yields a NULL pointer. Note that *no*
1264 exception information is available even in this case -- the
1265 exception information is held in the thread, and there is no
1266 thread.
1267
1268 Locking: as above.
1269
1270*/
1271
Victor Stinnera7368ac2017-11-15 18:11:45 -08001272static _PyInitError
1273new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001274{
1275 PyInterpreterState *interp;
1276 PyThreadState *tstate, *save_tstate;
1277 PyObject *bimod, *sysmod;
Victor Stinner9316ee42017-11-25 03:17:57 +01001278 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001279
Victor Stinnera7368ac2017-11-15 18:11:45 -08001280 if (!_PyRuntime.initialized) {
1281 return _Py_INIT_ERR("Py_Initialize must be called first");
1282 }
Nick Coghland6009512014-11-20 21:39:37 +10001283
Victor Stinner8a1be612016-03-14 22:07:55 +01001284 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1285 interpreters: disable PyGILState_Check(). */
1286 _PyGILState_check_enabled = 0;
1287
Nick Coghland6009512014-11-20 21:39:37 +10001288 interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001289 if (interp == NULL) {
1290 *tstate_p = NULL;
1291 return _Py_INIT_OK();
1292 }
Nick Coghland6009512014-11-20 21:39:37 +10001293
1294 tstate = PyThreadState_New(interp);
1295 if (tstate == NULL) {
1296 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001297 *tstate_p = NULL;
1298 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001299 }
1300
1301 save_tstate = PyThreadState_Swap(tstate);
1302
Eric Snow1abcf672017-05-23 21:46:51 -07001303 /* Copy the current interpreter config into the new interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +01001304 _PyCoreConfig *core_config;
1305 _PyMainInterpreterConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001306 if (save_tstate != NULL) {
Victor Stinnerda273412017-12-15 01:46:02 +01001307 core_config = &save_tstate->interp->core_config;
1308 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001309 } else {
1310 /* No current thread state, copy from the main interpreter */
1311 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinnerda273412017-12-15 01:46:02 +01001312 core_config = &main_interp->core_config;
1313 config = &main_interp->config;
1314 }
1315
1316 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
1317 return _Py_INIT_ERR("failed to copy core config");
1318 }
1319 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
1320 return _Py_INIT_ERR("failed to copy main interpreter config");
Eric Snow1abcf672017-05-23 21:46:51 -07001321 }
1322
Nick Coghland6009512014-11-20 21:39:37 +10001323 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001324 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001325 if (modules == NULL) {
1326 return _Py_INIT_ERR("can't make modules dictionary");
1327 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001328 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001329
Eric Snowd393c1b2017-09-14 12:18:12 -06001330 sysmod = _PyImport_FindBuiltin("sys", modules);
1331 if (sysmod != NULL) {
1332 interp->sysdict = PyModule_GetDict(sysmod);
1333 if (interp->sysdict == NULL)
1334 goto handle_error;
1335 Py_INCREF(interp->sysdict);
1336 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner41264f12017-12-15 02:05:29 +01001337 _PySys_EndInit(interp->sysdict, &interp->config);
Eric Snowd393c1b2017-09-14 12:18:12 -06001338 }
1339
1340 bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001341 if (bimod != NULL) {
1342 interp->builtins = PyModule_GetDict(bimod);
1343 if (interp->builtins == NULL)
1344 goto handle_error;
1345 Py_INCREF(interp->builtins);
1346 }
1347
1348 /* initialize builtin exceptions */
1349 _PyExc_Init(bimod);
1350
Nick Coghland6009512014-11-20 21:39:37 +10001351 if (bimod != NULL && sysmod != NULL) {
1352 PyObject *pstderr;
1353
Nick Coghland6009512014-11-20 21:39:37 +10001354 /* Set up a preliminary stderr printer until we have enough
1355 infrastructure for the io module in place. */
1356 pstderr = PyFile_NewStdPrinter(fileno(stderr));
Victor Stinnera7368ac2017-11-15 18:11:45 -08001357 if (pstderr == NULL) {
1358 return _Py_INIT_ERR("can't set preliminary stderr");
1359 }
Nick Coghland6009512014-11-20 21:39:37 +10001360 _PySys_SetObjectId(&PyId_stderr, pstderr);
1361 PySys_SetObject("__stderr__", pstderr);
1362 Py_DECREF(pstderr);
1363
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001364 err = _PyImportHooks_Init();
1365 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001366 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001367 }
Nick Coghland6009512014-11-20 21:39:37 +10001368
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001369 err = initimport(interp, sysmod);
1370 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001371 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001372 }
Nick Coghland6009512014-11-20 21:39:37 +10001373
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001374 err = initexternalimport(interp);
1375 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001376 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001377 }
Nick Coghland6009512014-11-20 21:39:37 +10001378
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001379 err = initfsencoding(interp);
1380 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001381 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001382 }
1383
Victor Stinner91106cd2017-12-13 12:29:09 +01001384 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001385 if (_Py_INIT_FAILED(err)) {
1386 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001387 }
1388
1389 err = add_main_module(interp);
1390 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001391 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001392 }
1393
1394 if (!Py_NoSiteFlag) {
1395 err = initsite();
1396 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001397 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001398 }
1399 }
Nick Coghland6009512014-11-20 21:39:37 +10001400 }
1401
Victor Stinnera7368ac2017-11-15 18:11:45 -08001402 if (PyErr_Occurred()) {
1403 goto handle_error;
1404 }
Nick Coghland6009512014-11-20 21:39:37 +10001405
Victor Stinnera7368ac2017-11-15 18:11:45 -08001406 *tstate_p = tstate;
1407 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001408
Nick Coghland6009512014-11-20 21:39:37 +10001409handle_error:
1410 /* Oops, it didn't work. Undo it all. */
1411
1412 PyErr_PrintEx(0);
1413 PyThreadState_Clear(tstate);
1414 PyThreadState_Swap(save_tstate);
1415 PyThreadState_Delete(tstate);
1416 PyInterpreterState_Delete(interp);
1417
Victor Stinnera7368ac2017-11-15 18:11:45 -08001418 *tstate_p = NULL;
1419 return _Py_INIT_OK();
1420}
1421
1422PyThreadState *
1423Py_NewInterpreter(void)
1424{
1425 PyThreadState *tstate;
1426 _PyInitError err = new_interpreter(&tstate);
1427 if (_Py_INIT_FAILED(err)) {
1428 _Py_FatalInitError(err);
1429 }
1430 return tstate;
1431
Nick Coghland6009512014-11-20 21:39:37 +10001432}
1433
1434/* Delete an interpreter and its last thread. This requires that the
1435 given thread state is current, that the thread has no remaining
1436 frames, and that it is its interpreter's only remaining thread.
1437 It is a fatal error to violate these constraints.
1438
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001439 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001440 everything, regardless.)
1441
1442 Locking: as above.
1443
1444*/
1445
1446void
1447Py_EndInterpreter(PyThreadState *tstate)
1448{
1449 PyInterpreterState *interp = tstate->interp;
1450
1451 if (tstate != PyThreadState_GET())
1452 Py_FatalError("Py_EndInterpreter: thread is not current");
1453 if (tstate->frame != NULL)
1454 Py_FatalError("Py_EndInterpreter: thread still has a frame");
1455
1456 wait_for_thread_shutdown();
1457
Marcel Plch776407f2017-12-20 11:17:58 +01001458 call_py_exitfuncs(interp);
1459
Nick Coghland6009512014-11-20 21:39:37 +10001460 if (tstate != interp->tstate_head || tstate->next != NULL)
1461 Py_FatalError("Py_EndInterpreter: not the last thread");
1462
1463 PyImport_Cleanup();
1464 PyInterpreterState_Clear(interp);
1465 PyThreadState_Swap(NULL);
1466 PyInterpreterState_Delete(interp);
1467}
1468
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001469/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001470
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001471static _PyInitError
1472add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001473{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001474 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001475 m = PyImport_AddModule("__main__");
1476 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001477 return _Py_INIT_ERR("can't create __main__ module");
1478
Nick Coghland6009512014-11-20 21:39:37 +10001479 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001480 ann_dict = PyDict_New();
1481 if ((ann_dict == NULL) ||
1482 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001483 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001484 }
1485 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001486
Nick Coghland6009512014-11-20 21:39:37 +10001487 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1488 PyObject *bimod = PyImport_ImportModule("builtins");
1489 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001490 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001491 }
1492 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001493 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001494 }
1495 Py_DECREF(bimod);
1496 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001497
Nick Coghland6009512014-11-20 21:39:37 +10001498 /* Main is a little special - imp.is_builtin("__main__") will return
1499 * False, but BuiltinImporter is still the most appropriate initial
1500 * setting for its __loader__ attribute. A more suitable value will
1501 * be set if __main__ gets further initialized later in the startup
1502 * process.
1503 */
1504 loader = PyDict_GetItemString(d, "__loader__");
1505 if (loader == NULL || loader == Py_None) {
1506 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1507 "BuiltinImporter");
1508 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001509 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001510 }
1511 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001512 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001513 }
1514 Py_DECREF(loader);
1515 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001516 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001517}
1518
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001519static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001520initfsencoding(PyInterpreterState *interp)
1521{
1522 PyObject *codec;
1523
Steve Dowercc16be82016-09-08 10:35:16 -07001524#ifdef MS_WINDOWS
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001525 if (Py_LegacyWindowsFSEncodingFlag) {
Steve Dowercc16be82016-09-08 10:35:16 -07001526 Py_FileSystemDefaultEncoding = "mbcs";
1527 Py_FileSystemDefaultEncodeErrors = "replace";
1528 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001529 else {
Steve Dowercc16be82016-09-08 10:35:16 -07001530 Py_FileSystemDefaultEncoding = "utf-8";
1531 Py_FileSystemDefaultEncodeErrors = "surrogatepass";
1532 }
1533#else
Victor Stinner91106cd2017-12-13 12:29:09 +01001534 if (Py_FileSystemDefaultEncoding == NULL &&
1535 interp->core_config.utf8_mode)
1536 {
1537 Py_FileSystemDefaultEncoding = "utf-8";
1538 Py_HasFileSystemDefaultEncoding = 1;
1539 }
1540 else if (Py_FileSystemDefaultEncoding == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001541 Py_FileSystemDefaultEncoding = get_locale_encoding();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001542 if (Py_FileSystemDefaultEncoding == NULL) {
1543 return _Py_INIT_ERR("Unable to get the locale encoding");
1544 }
Nick Coghland6009512014-11-20 21:39:37 +10001545
1546 Py_HasFileSystemDefaultEncoding = 0;
1547 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001548 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001549 }
Steve Dowercc16be82016-09-08 10:35:16 -07001550#endif
Nick Coghland6009512014-11-20 21:39:37 +10001551
1552 /* the encoding is mbcs, utf-8 or ascii */
1553 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
1554 if (!codec) {
1555 /* Such error can only occurs in critical situations: no more
1556 * memory, import a module of the standard library failed,
1557 * etc. */
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001558 return _Py_INIT_ERR("unable to load the file system codec");
Nick Coghland6009512014-11-20 21:39:37 +10001559 }
1560 Py_DECREF(codec);
1561 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001562 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001563}
1564
1565/* Import the site module (not into __main__ though) */
1566
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001567static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001568initsite(void)
1569{
1570 PyObject *m;
1571 m = PyImport_ImportModule("site");
1572 if (m == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001573 return _Py_INIT_USER_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001574 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001575 Py_DECREF(m);
1576 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001577}
1578
Victor Stinner874dbe82015-09-04 17:29:57 +02001579/* Check if a file descriptor is valid or not.
1580 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1581static int
1582is_valid_fd(int fd)
1583{
Victor Stinner1c4670e2017-05-04 00:45:56 +02001584#ifdef __APPLE__
1585 /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe
1586 and the other side of the pipe is closed, dup(1) succeed, whereas
1587 fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect
1588 such error. */
1589 struct stat st;
1590 return (fstat(fd, &st) == 0);
1591#else
Victor Stinner874dbe82015-09-04 17:29:57 +02001592 int fd2;
Steve Dower940f33a2016-09-08 11:21:54 -07001593 if (fd < 0)
Victor Stinner874dbe82015-09-04 17:29:57 +02001594 return 0;
1595 _Py_BEGIN_SUPPRESS_IPH
Victor Stinner449b2712015-09-29 13:59:50 +02001596 /* Prefer dup() over fstat(). fstat() can require input/output whereas
1597 dup() doesn't, there is a low risk of EMFILE/ENFILE at Python
1598 startup. */
Victor Stinner874dbe82015-09-04 17:29:57 +02001599 fd2 = dup(fd);
1600 if (fd2 >= 0)
1601 close(fd2);
1602 _Py_END_SUPPRESS_IPH
1603 return fd2 >= 0;
Victor Stinner1c4670e2017-05-04 00:45:56 +02001604#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001605}
1606
1607/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001608static PyObject*
1609create_stdio(PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001610 int fd, int write_mode, const char* name,
1611 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001612{
1613 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1614 const char* mode;
1615 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001616 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001617 int buffering, isatty;
1618 _Py_IDENTIFIER(open);
1619 _Py_IDENTIFIER(isatty);
1620 _Py_IDENTIFIER(TextIOWrapper);
1621 _Py_IDENTIFIER(mode);
1622
Victor Stinner874dbe82015-09-04 17:29:57 +02001623 if (!is_valid_fd(fd))
1624 Py_RETURN_NONE;
1625
Nick Coghland6009512014-11-20 21:39:37 +10001626 /* stdin is always opened in buffered mode, first because it shouldn't
1627 make a difference in common use cases, second because TextIOWrapper
1628 depends on the presence of a read1() method which only exists on
1629 buffered streams.
1630 */
1631 if (Py_UnbufferedStdioFlag && write_mode)
1632 buffering = 0;
1633 else
1634 buffering = -1;
1635 if (write_mode)
1636 mode = "wb";
1637 else
1638 mode = "rb";
1639 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1640 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001641 Py_None, Py_None, /* encoding, errors */
1642 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001643 if (buf == NULL)
1644 goto error;
1645
1646 if (buffering) {
1647 _Py_IDENTIFIER(raw);
1648 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1649 if (raw == NULL)
1650 goto error;
1651 }
1652 else {
1653 raw = buf;
1654 Py_INCREF(raw);
1655 }
1656
Steve Dower39294992016-08-30 21:22:36 -07001657#ifdef MS_WINDOWS
1658 /* Windows console IO is always UTF-8 encoded */
1659 if (PyWindowsConsoleIO_Check(raw))
1660 encoding = "utf-8";
1661#endif
1662
Nick Coghland6009512014-11-20 21:39:37 +10001663 text = PyUnicode_FromString(name);
1664 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1665 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001666 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001667 if (res == NULL)
1668 goto error;
1669 isatty = PyObject_IsTrue(res);
1670 Py_DECREF(res);
1671 if (isatty == -1)
1672 goto error;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001673 if (Py_UnbufferedStdioFlag)
1674 write_through = Py_True;
1675 else
1676 write_through = Py_False;
1677 if (isatty && !Py_UnbufferedStdioFlag)
Nick Coghland6009512014-11-20 21:39:37 +10001678 line_buffering = Py_True;
1679 else
1680 line_buffering = Py_False;
1681
1682 Py_CLEAR(raw);
1683 Py_CLEAR(text);
1684
1685#ifdef MS_WINDOWS
1686 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1687 newlines to "\n".
1688 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1689 newline = NULL;
1690#else
1691 /* sys.stdin: split lines at "\n".
1692 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1693 newline = "\n";
1694#endif
1695
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001696 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001697 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001698 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001699 Py_CLEAR(buf);
1700 if (stream == NULL)
1701 goto error;
1702
1703 if (write_mode)
1704 mode = "w";
1705 else
1706 mode = "r";
1707 text = PyUnicode_FromString(mode);
1708 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1709 goto error;
1710 Py_CLEAR(text);
1711 return stream;
1712
1713error:
1714 Py_XDECREF(buf);
1715 Py_XDECREF(stream);
1716 Py_XDECREF(text);
1717 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001718
Victor Stinner874dbe82015-09-04 17:29:57 +02001719 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1720 /* Issue #24891: the file descriptor was closed after the first
1721 is_valid_fd() check was called. Ignore the OSError and set the
1722 stream to None. */
1723 PyErr_Clear();
1724 Py_RETURN_NONE;
1725 }
1726 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001727}
1728
1729/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001730static _PyInitError
Victor Stinner91106cd2017-12-13 12:29:09 +01001731init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001732{
1733 PyObject *iomod = NULL, *wrapper;
1734 PyObject *bimod = NULL;
1735 PyObject *m;
1736 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001737 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001738 PyObject * encoding_attr;
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +02001739 char *pythonioencoding = NULL;
1740 const char *encoding, *errors;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001741 _PyInitError res = _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001742
1743 /* Hack to avoid a nasty recursion issue when Python is invoked
1744 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1745 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1746 goto error;
1747 }
1748 Py_DECREF(m);
1749
1750 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1751 goto error;
1752 }
1753 Py_DECREF(m);
1754
1755 if (!(bimod = PyImport_ImportModule("builtins"))) {
1756 goto error;
1757 }
1758
1759 if (!(iomod = PyImport_ImportModule("io"))) {
1760 goto error;
1761 }
1762 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1763 goto error;
1764 }
1765
1766 /* Set builtins.open */
1767 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1768 Py_DECREF(wrapper);
1769 goto error;
1770 }
1771 Py_DECREF(wrapper);
1772
1773 encoding = _Py_StandardStreamEncoding;
1774 errors = _Py_StandardStreamErrors;
1775 if (!encoding || !errors) {
Victor Stinner91106cd2017-12-13 12:29:09 +01001776 char *opt = Py_GETENV("PYTHONIOENCODING");
1777 if (opt && opt[0] != '\0') {
Nick Coghland6009512014-11-20 21:39:37 +10001778 char *err;
Victor Stinner91106cd2017-12-13 12:29:09 +01001779 pythonioencoding = _PyMem_Strdup(opt);
Nick Coghland6009512014-11-20 21:39:37 +10001780 if (pythonioencoding == NULL) {
1781 PyErr_NoMemory();
1782 goto error;
1783 }
1784 err = strchr(pythonioencoding, ':');
1785 if (err) {
1786 *err = '\0';
1787 err++;
Serhiy Storchakafc435112016-04-10 14:34:13 +03001788 if (*err && !errors) {
Nick Coghland6009512014-11-20 21:39:37 +10001789 errors = err;
1790 }
1791 }
1792 if (*pythonioencoding && !encoding) {
1793 encoding = pythonioencoding;
1794 }
1795 }
Victor Stinner91106cd2017-12-13 12:29:09 +01001796 else if (interp->core_config.utf8_mode) {
1797 encoding = "utf-8";
1798 errors = "surrogateescape";
1799 }
1800
1801 if (!errors && !pythonioencoding) {
Nick Coghlan6ea41862017-06-11 13:16:15 +10001802 /* Choose the default error handler based on the current locale */
1803 errors = get_default_standard_stream_error_handler();
Serhiy Storchakafc435112016-04-10 14:34:13 +03001804 }
Nick Coghland6009512014-11-20 21:39:37 +10001805 }
1806
1807 /* Set sys.stdin */
1808 fd = fileno(stdin);
1809 /* Under some conditions stdin, stdout and stderr may not be connected
1810 * and fileno() may point to an invalid file descriptor. For example
1811 * GUI apps don't have valid standard streams by default.
1812 */
Victor Stinner874dbe82015-09-04 17:29:57 +02001813 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1814 if (std == NULL)
1815 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001816 PySys_SetObject("__stdin__", std);
1817 _PySys_SetObjectId(&PyId_stdin, std);
1818 Py_DECREF(std);
1819
1820 /* Set sys.stdout */
1821 fd = fileno(stdout);
Victor Stinner874dbe82015-09-04 17:29:57 +02001822 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1823 if (std == NULL)
1824 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001825 PySys_SetObject("__stdout__", std);
1826 _PySys_SetObjectId(&PyId_stdout, std);
1827 Py_DECREF(std);
1828
1829#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1830 /* Set sys.stderr, replaces the preliminary stderr */
1831 fd = fileno(stderr);
Victor Stinner874dbe82015-09-04 17:29:57 +02001832 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1833 if (std == NULL)
1834 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001835
1836 /* Same as hack above, pre-import stderr's codec to avoid recursion
1837 when import.c tries to write to stderr in verbose mode. */
1838 encoding_attr = PyObject_GetAttrString(std, "encoding");
1839 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001840 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001841 if (std_encoding != NULL) {
1842 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1843 Py_XDECREF(codec_info);
1844 }
1845 Py_DECREF(encoding_attr);
1846 }
1847 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1848
1849 if (PySys_SetObject("__stderr__", std) < 0) {
1850 Py_DECREF(std);
1851 goto error;
1852 }
1853 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1854 Py_DECREF(std);
1855 goto error;
1856 }
1857 Py_DECREF(std);
1858#endif
1859
Victor Stinnera7368ac2017-11-15 18:11:45 -08001860 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001861
Victor Stinnera7368ac2017-11-15 18:11:45 -08001862error:
1863 res = _Py_INIT_ERR("can't initialize sys standard streams");
1864
Victor Stinner31e99082017-12-20 23:41:38 +01001865 /* Use the same allocator than Py_SetStandardStreamEncoding() */
1866 PyMemAllocatorEx old_alloc;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001867done:
Victor Stinner31e99082017-12-20 23:41:38 +01001868 _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
1869
Nick Coghland6009512014-11-20 21:39:37 +10001870 /* We won't need them anymore. */
1871 if (_Py_StandardStreamEncoding) {
1872 PyMem_RawFree(_Py_StandardStreamEncoding);
1873 _Py_StandardStreamEncoding = NULL;
1874 }
1875 if (_Py_StandardStreamErrors) {
1876 PyMem_RawFree(_Py_StandardStreamErrors);
1877 _Py_StandardStreamErrors = NULL;
1878 }
Victor Stinner31e99082017-12-20 23:41:38 +01001879
1880 PyMem_SetAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
1881
Nick Coghland6009512014-11-20 21:39:37 +10001882 PyMem_Free(pythonioencoding);
1883 Py_XDECREF(bimod);
1884 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001885 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001886}
1887
1888
Victor Stinner10dc4842015-03-24 12:01:30 +01001889static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001890_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001891{
Victor Stinner10dc4842015-03-24 12:01:30 +01001892 fputc('\n', stderr);
1893 fflush(stderr);
1894
1895 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001896 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001897}
Victor Stinner791da1c2016-03-14 16:53:12 +01001898
1899/* Print the current exception (if an exception is set) with its traceback,
1900 or display the current Python stack.
1901
1902 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1903 called on catastrophic cases.
1904
1905 Return 1 if the traceback was displayed, 0 otherwise. */
1906
1907static int
1908_Py_FatalError_PrintExc(int fd)
1909{
1910 PyObject *ferr, *res;
1911 PyObject *exception, *v, *tb;
1912 int has_tb;
1913
1914 if (PyThreadState_GET() == NULL) {
1915 /* The GIL is released: trying to acquire it is likely to deadlock,
1916 just give up. */
1917 return 0;
1918 }
1919
1920 PyErr_Fetch(&exception, &v, &tb);
1921 if (exception == NULL) {
1922 /* No current exception */
1923 return 0;
1924 }
1925
1926 ferr = _PySys_GetObjectId(&PyId_stderr);
1927 if (ferr == NULL || ferr == Py_None) {
1928 /* sys.stderr is not set yet or set to None,
1929 no need to try to display the exception */
1930 return 0;
1931 }
1932
1933 PyErr_NormalizeException(&exception, &v, &tb);
1934 if (tb == NULL) {
1935 tb = Py_None;
1936 Py_INCREF(tb);
1937 }
1938 PyException_SetTraceback(v, tb);
1939 if (exception == NULL) {
1940 /* PyErr_NormalizeException() failed */
1941 return 0;
1942 }
1943
1944 has_tb = (tb != Py_None);
1945 PyErr_Display(exception, v, tb);
1946 Py_XDECREF(exception);
1947 Py_XDECREF(v);
1948 Py_XDECREF(tb);
1949
1950 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07001951 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01001952 if (res == NULL)
1953 PyErr_Clear();
1954 else
1955 Py_DECREF(res);
1956
1957 return has_tb;
1958}
1959
Nick Coghland6009512014-11-20 21:39:37 +10001960/* Print fatal error message and abort */
1961
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001962#ifdef MS_WINDOWS
1963static void
1964fatal_output_debug(const char *msg)
1965{
1966 /* buffer of 256 bytes allocated on the stack */
1967 WCHAR buffer[256 / sizeof(WCHAR)];
1968 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
1969 size_t msglen;
1970
1971 OutputDebugStringW(L"Fatal Python error: ");
1972
1973 msglen = strlen(msg);
1974 while (msglen) {
1975 size_t i;
1976
1977 if (buflen > msglen) {
1978 buflen = msglen;
1979 }
1980
1981 /* Convert the message to wchar_t. This uses a simple one-to-one
1982 conversion, assuming that the this error message actually uses
1983 ASCII only. If this ceases to be true, we will have to convert. */
1984 for (i=0; i < buflen; ++i) {
1985 buffer[i] = msg[i];
1986 }
1987 buffer[i] = L'\0';
1988 OutputDebugStringW(buffer);
1989
1990 msg += buflen;
1991 msglen -= buflen;
1992 }
1993 OutputDebugStringW(L"\n");
1994}
1995#endif
1996
Benjamin Petersoncef88b92017-11-25 13:02:55 -08001997static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001998fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10001999{
2000 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01002001 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002002
2003 if (reentrant) {
2004 /* Py_FatalError() caused a second fatal error.
2005 Example: flush_std_files() raises a recursion error. */
2006 goto exit;
2007 }
2008 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002009
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002010 fprintf(stderr, "Fatal Python error: ");
2011 if (prefix) {
2012 fputs(prefix, stderr);
2013 fputs(": ", stderr);
2014 }
2015 if (msg) {
2016 fputs(msg, stderr);
2017 }
2018 else {
2019 fprintf(stderr, "<message not set>");
2020 }
2021 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10002022 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01002023
Victor Stinnere0deff32015-03-24 13:46:18 +01002024 /* Print the exception (if an exception is set) with its traceback,
2025 * or display the current Python stack. */
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002026 if (!_Py_FatalError_PrintExc(fd)) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002027 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002028 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002029
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002030 /* The main purpose of faulthandler is to display the traceback.
2031 This function already did its best to display a traceback.
2032 Disable faulthandler to prevent writing a second traceback
2033 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002034 _PyFaulthandler_Fini();
2035
Victor Stinner791da1c2016-03-14 16:53:12 +01002036 /* Check if the current Python thread hold the GIL */
2037 if (PyThreadState_GET() != NULL) {
2038 /* Flush sys.stdout and sys.stderr */
2039 flush_std_files();
2040 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002041
Nick Coghland6009512014-11-20 21:39:37 +10002042#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002043 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002044#endif /* MS_WINDOWS */
2045
2046exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002047 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002048#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002049 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002050#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002051 abort();
2052 }
2053 else {
2054 exit(status);
2055 }
2056}
2057
Victor Stinner19760862017-12-20 01:41:59 +01002058void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002059Py_FatalError(const char *msg)
2060{
2061 fatal_error(NULL, msg, -1);
2062}
2063
Victor Stinner19760862017-12-20 01:41:59 +01002064void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002065_Py_FatalInitError(_PyInitError err)
2066{
2067 /* On "user" error: exit with status 1.
2068 For all other errors, call abort(). */
2069 int status = err.user_err ? 1 : -1;
2070 fatal_error(err.prefix, err.msg, status);
Nick Coghland6009512014-11-20 21:39:37 +10002071}
2072
2073/* Clean up and exit */
2074
Victor Stinnerd7292b52016-06-17 12:29:00 +02002075# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002076
Nick Coghland6009512014-11-20 21:39:37 +10002077/* For the atexit module. */
Marcel Plch776407f2017-12-20 11:17:58 +01002078void _Py_PyAtExit(void (*func)(PyObject *), PyObject *module)
Nick Coghland6009512014-11-20 21:39:37 +10002079{
Marcel Plch776407f2017-12-20 11:17:58 +01002080 PyThreadState *ts;
2081 PyInterpreterState *is;
Victor Stinnerca719ac2017-12-20 18:00:19 +01002082
Marcel Plch776407f2017-12-20 11:17:58 +01002083 ts = PyThreadState_GET();
2084 is = ts->interp;
2085
Antoine Pitroufc5db952017-12-13 02:29:07 +01002086 /* Guard against API misuse (see bpo-17852) */
Marcel Plch776407f2017-12-20 11:17:58 +01002087 assert(is->pyexitfunc == NULL || is->pyexitfunc == func);
2088
2089 is->pyexitfunc = func;
2090 is->pyexitmodule = module;
Nick Coghland6009512014-11-20 21:39:37 +10002091}
2092
2093static void
Marcel Plch776407f2017-12-20 11:17:58 +01002094call_py_exitfuncs(PyInterpreterState *istate)
Nick Coghland6009512014-11-20 21:39:37 +10002095{
Marcel Plch776407f2017-12-20 11:17:58 +01002096 if (istate->pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002097 return;
2098
Marcel Plch776407f2017-12-20 11:17:58 +01002099 (*istate->pyexitfunc)(istate->pyexitmodule);
Nick Coghland6009512014-11-20 21:39:37 +10002100 PyErr_Clear();
2101}
2102
2103/* Wait until threading._shutdown completes, provided
2104 the threading module was imported in the first place.
2105 The shutdown routine will wait until all non-daemon
2106 "threading" threads have completed. */
2107static void
2108wait_for_thread_shutdown(void)
2109{
Nick Coghland6009512014-11-20 21:39:37 +10002110 _Py_IDENTIFIER(_shutdown);
2111 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002112 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002113 if (threading == NULL) {
2114 /* threading not imported */
2115 PyErr_Clear();
2116 return;
2117 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002118 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002119 if (result == NULL) {
2120 PyErr_WriteUnraisable(threading);
2121 }
2122 else {
2123 Py_DECREF(result);
2124 }
2125 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002126}
2127
2128#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002129int Py_AtExit(void (*func)(void))
2130{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002131 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002132 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002133 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002134 return 0;
2135}
2136
2137static void
2138call_ll_exitfuncs(void)
2139{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002140 while (_PyRuntime.nexitfuncs > 0)
2141 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002142
2143 fflush(stdout);
2144 fflush(stderr);
2145}
2146
2147void
2148Py_Exit(int sts)
2149{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002150 if (Py_FinalizeEx() < 0) {
2151 sts = 120;
2152 }
Nick Coghland6009512014-11-20 21:39:37 +10002153
2154 exit(sts);
2155}
2156
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002157static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002158initsigs(void)
2159{
2160#ifdef SIGPIPE
2161 PyOS_setsig(SIGPIPE, SIG_IGN);
2162#endif
2163#ifdef SIGXFZ
2164 PyOS_setsig(SIGXFZ, SIG_IGN);
2165#endif
2166#ifdef SIGXFSZ
2167 PyOS_setsig(SIGXFSZ, SIG_IGN);
2168#endif
2169 PyOS_InitInterrupts(); /* May imply initsignal() */
2170 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002171 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002172 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002173 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002174}
2175
2176
2177/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2178 *
2179 * All of the code in this function must only use async-signal-safe functions,
2180 * listed at `man 7 signal` or
2181 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2182 */
2183void
2184_Py_RestoreSignals(void)
2185{
2186#ifdef SIGPIPE
2187 PyOS_setsig(SIGPIPE, SIG_DFL);
2188#endif
2189#ifdef SIGXFZ
2190 PyOS_setsig(SIGXFZ, SIG_DFL);
2191#endif
2192#ifdef SIGXFSZ
2193 PyOS_setsig(SIGXFSZ, SIG_DFL);
2194#endif
2195}
2196
2197
2198/*
2199 * The file descriptor fd is considered ``interactive'' if either
2200 * a) isatty(fd) is TRUE, or
2201 * b) the -i flag was given, and the filename associated with
2202 * the descriptor is NULL or "<stdin>" or "???".
2203 */
2204int
2205Py_FdIsInteractive(FILE *fp, const char *filename)
2206{
2207 if (isatty((int)fileno(fp)))
2208 return 1;
2209 if (!Py_InteractiveFlag)
2210 return 0;
2211 return (filename == NULL) ||
2212 (strcmp(filename, "<stdin>") == 0) ||
2213 (strcmp(filename, "???") == 0);
2214}
2215
2216
Nick Coghland6009512014-11-20 21:39:37 +10002217/* Wrappers around sigaction() or signal(). */
2218
2219PyOS_sighandler_t
2220PyOS_getsig(int sig)
2221{
2222#ifdef HAVE_SIGACTION
2223 struct sigaction context;
2224 if (sigaction(sig, NULL, &context) == -1)
2225 return SIG_ERR;
2226 return context.sa_handler;
2227#else
2228 PyOS_sighandler_t handler;
2229/* Special signal handling for the secure CRT in Visual Studio 2005 */
2230#if defined(_MSC_VER) && _MSC_VER >= 1400
2231 switch (sig) {
2232 /* Only these signals are valid */
2233 case SIGINT:
2234 case SIGILL:
2235 case SIGFPE:
2236 case SIGSEGV:
2237 case SIGTERM:
2238 case SIGBREAK:
2239 case SIGABRT:
2240 break;
2241 /* Don't call signal() with other values or it will assert */
2242 default:
2243 return SIG_ERR;
2244 }
2245#endif /* _MSC_VER && _MSC_VER >= 1400 */
2246 handler = signal(sig, SIG_IGN);
2247 if (handler != SIG_ERR)
2248 signal(sig, handler);
2249 return handler;
2250#endif
2251}
2252
2253/*
2254 * All of the code in this function must only use async-signal-safe functions,
2255 * listed at `man 7 signal` or
2256 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2257 */
2258PyOS_sighandler_t
2259PyOS_setsig(int sig, PyOS_sighandler_t handler)
2260{
2261#ifdef HAVE_SIGACTION
2262 /* Some code in Modules/signalmodule.c depends on sigaction() being
2263 * used here if HAVE_SIGACTION is defined. Fix that if this code
2264 * changes to invalidate that assumption.
2265 */
2266 struct sigaction context, ocontext;
2267 context.sa_handler = handler;
2268 sigemptyset(&context.sa_mask);
2269 context.sa_flags = 0;
2270 if (sigaction(sig, &context, &ocontext) == -1)
2271 return SIG_ERR;
2272 return ocontext.sa_handler;
2273#else
2274 PyOS_sighandler_t oldhandler;
2275 oldhandler = signal(sig, handler);
2276#ifdef HAVE_SIGINTERRUPT
2277 siginterrupt(sig, 1);
2278#endif
2279 return oldhandler;
2280#endif
2281}
2282
2283#ifdef __cplusplus
2284}
2285#endif