blob: 6500995ee245878a8f43f6cb933422c18f2cb9b6 [file] [log] [blame]
Nick Coghland6009512014-11-20 21:39:37 +10001/* Python interpreter top-level routines, including init/exit */
2
3#include "Python.h"
4
5#include "Python-ast.h"
6#undef Yield /* undefine macro conflicting with winbase.h */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06007#include "internal/pystate.h"
Nick Coghland6009512014-11-20 21:39:37 +10008#include "grammar.h"
9#include "node.h"
10#include "token.h"
11#include "parsetok.h"
12#include "errcode.h"
13#include "code.h"
14#include "symtable.h"
15#include "ast.h"
16#include "marshal.h"
17#include "osdefs.h"
18#include <locale.h>
19
20#ifdef HAVE_SIGNAL_H
21#include <signal.h>
22#endif
23
24#ifdef MS_WINDOWS
25#include "malloc.h" /* for alloca */
26#endif
27
28#ifdef HAVE_LANGINFO_H
29#include <langinfo.h>
30#endif
31
32#ifdef MS_WINDOWS
33#undef BYTE
34#include "windows.h"
Steve Dower39294992016-08-30 21:22:36 -070035
36extern PyTypeObject PyWindowsConsoleIO_Type;
37#define PyWindowsConsoleIO_Check(op) (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type))
Nick Coghland6009512014-11-20 21:39:37 +100038#endif
39
40_Py_IDENTIFIER(flush);
41_Py_IDENTIFIER(name);
42_Py_IDENTIFIER(stdin);
43_Py_IDENTIFIER(stdout);
44_Py_IDENTIFIER(stderr);
Eric Snow3f9eee62017-09-15 16:35:20 -060045_Py_IDENTIFIER(threading);
Nick Coghland6009512014-11-20 21:39:37 +100046
47#ifdef __cplusplus
48extern "C" {
49#endif
50
Nick Coghland6009512014-11-20 21:39:37 +100051extern grammar _PyParser_Grammar; /* From graminit.c */
52
53/* Forward */
Victor Stinnerf7e5b562017-11-15 15:48:08 -080054static _PyInitError add_main_module(PyInterpreterState *interp);
55static _PyInitError initfsencoding(PyInterpreterState *interp);
56static _PyInitError initsite(void);
Victor Stinner91106cd2017-12-13 12:29:09 +010057static _PyInitError init_sys_streams(PyInterpreterState *interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -080058static _PyInitError initsigs(void);
Nick Coghland6009512014-11-20 21:39:37 +100059static void call_py_exitfuncs(void);
60static void wait_for_thread_shutdown(void);
61static void call_ll_exitfuncs(void);
62extern int _PyUnicode_Init(void);
63extern int _PyStructSequence_Init(void);
64extern void _PyUnicode_Fini(void);
65extern int _PyLong_Init(void);
66extern void PyLong_Fini(void);
Victor Stinnera7368ac2017-11-15 18:11:45 -080067extern _PyInitError _PyFaulthandler_Init(int enable);
Nick Coghland6009512014-11-20 21:39:37 +100068extern void _PyFaulthandler_Fini(void);
69extern void _PyHash_Fini(void);
Victor Stinnera7368ac2017-11-15 18:11:45 -080070extern int _PyTraceMalloc_Init(int enable);
Nick Coghland6009512014-11-20 21:39:37 +100071extern int _PyTraceMalloc_Fini(void);
Eric Snowc7ec9982017-05-23 23:00:52 -070072extern void _Py_ReadyTypes(void);
Nick Coghland6009512014-11-20 21:39:37 +100073
Nick Coghland6009512014-11-20 21:39:37 +100074extern void _PyGILState_Init(PyInterpreterState *, PyThreadState *);
75extern void _PyGILState_Fini(void);
Nick Coghland6009512014-11-20 21:39:37 +100076
Victor Stinnerf7e5b562017-11-15 15:48:08 -080077_PyRuntimeState _PyRuntime = _PyRuntimeState_INIT;
Eric Snow2ebc5ce2017-09-07 23:51:28 -060078
Victor Stinnerf7e5b562017-11-15 15:48:08 -080079_PyInitError
Eric Snow2ebc5ce2017-09-07 23:51:28 -060080_PyRuntime_Initialize(void)
81{
82 /* XXX We only initialize once in the process, which aligns with
83 the static initialization of the former globals now found in
84 _PyRuntime. However, _PyRuntime *should* be initialized with
85 every Py_Initialize() call, but doing so breaks the runtime.
86 This is because the runtime state is not properly finalized
87 currently. */
88 static int initialized = 0;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080089 if (initialized) {
90 return _Py_INIT_OK();
91 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -060092 initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -080093
94 return _PyRuntimeState_Init(&_PyRuntime);
Eric Snow2ebc5ce2017-09-07 23:51:28 -060095}
96
97void
98_PyRuntime_Finalize(void)
99{
100 _PyRuntimeState_Fini(&_PyRuntime);
101}
102
103int
104_Py_IsFinalizing(void)
105{
106 return _PyRuntime.finalizing != NULL;
107}
108
Nick Coghland6009512014-11-20 21:39:37 +1000109/* Global configuration variable declarations are in pydebug.h */
110/* XXX (ncoghlan): move those declarations to pylifecycle.h? */
111int Py_DebugFlag; /* Needed by parser.c */
112int Py_VerboseFlag; /* Needed by import.c */
113int Py_QuietFlag; /* Needed by sysmodule.c */
114int Py_InteractiveFlag; /* Needed by Py_FdIsInteractive() below */
115int Py_InspectFlag; /* Needed to determine whether to exit at SystemExit */
116int Py_OptimizeFlag = 0; /* Needed by compile.c */
117int Py_NoSiteFlag; /* Suppress 'import site' */
118int Py_BytesWarningFlag; /* Warn on str(bytes) and str(buffer) */
Nick Coghland6009512014-11-20 21:39:37 +1000119int Py_FrozenFlag; /* Needed by getpath.c */
120int Py_IgnoreEnvironmentFlag; /* e.g. PYTHONPATH, PYTHONHOME */
Xiang Zhang0710d752017-03-11 13:02:52 +0800121int Py_DontWriteBytecodeFlag; /* Suppress writing bytecode files (*.pyc) */
Nick Coghland6009512014-11-20 21:39:37 +1000122int Py_NoUserSiteDirectory = 0; /* for -s and site.py */
123int Py_UnbufferedStdioFlag = 0; /* Unbuffered binary std{in,out,err} */
124int Py_HashRandomizationFlag = 0; /* for -R and PYTHONHASHSEED */
125int Py_IsolatedFlag = 0; /* for -I, isolate from user's env */
Steve Dowercc16be82016-09-08 10:35:16 -0700126#ifdef MS_WINDOWS
127int Py_LegacyWindowsFSEncodingFlag = 0; /* Uses mbcs instead of utf-8 */
Steve Dower39294992016-08-30 21:22:36 -0700128int Py_LegacyWindowsStdioFlag = 0; /* Uses FileIO instead of WindowsConsoleIO */
Steve Dowercc16be82016-09-08 10:35:16 -0700129#endif
Nick Coghland6009512014-11-20 21:39:37 +1000130
Nick Coghland6009512014-11-20 21:39:37 +1000131/* Hack to force loading of object files */
132int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \
133 PyOS_mystrnicmp; /* Python/pystrcmp.o */
134
135/* PyModule_GetWarningsModule is no longer necessary as of 2.6
136since _warnings is builtin. This API should not be used. */
137PyObject *
138PyModule_GetWarningsModule(void)
139{
140 return PyImport_ImportModule("warnings");
141}
142
Eric Snowc7ec9982017-05-23 23:00:52 -0700143
Eric Snow1abcf672017-05-23 21:46:51 -0700144/* APIs to access the initialization flags
145 *
146 * Can be called prior to Py_Initialize.
147 */
Nick Coghland6009512014-11-20 21:39:37 +1000148
Eric Snow1abcf672017-05-23 21:46:51 -0700149int
150_Py_IsCoreInitialized(void)
151{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600152 return _PyRuntime.core_initialized;
Eric Snow1abcf672017-05-23 21:46:51 -0700153}
Nick Coghland6009512014-11-20 21:39:37 +1000154
155int
156Py_IsInitialized(void)
157{
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600158 return _PyRuntime.initialized;
Nick Coghland6009512014-11-20 21:39:37 +1000159}
160
161/* Helper to allow an embedding application to override the normal
162 * mechanism that attempts to figure out an appropriate IO encoding
163 */
164
165static char *_Py_StandardStreamEncoding = NULL;
166static char *_Py_StandardStreamErrors = NULL;
167
168int
169Py_SetStandardStreamEncoding(const char *encoding, const char *errors)
170{
171 if (Py_IsInitialized()) {
172 /* This is too late to have any effect */
173 return -1;
174 }
175 /* Can't call PyErr_NoMemory() on errors, as Python hasn't been
176 * initialised yet.
177 *
178 * However, the raw memory allocators are initialised appropriately
179 * as C static variables, so _PyMem_RawStrdup is OK even though
180 * Py_Initialize hasn't been called yet.
181 */
182 if (encoding) {
183 _Py_StandardStreamEncoding = _PyMem_RawStrdup(encoding);
184 if (!_Py_StandardStreamEncoding) {
185 return -2;
186 }
187 }
188 if (errors) {
189 _Py_StandardStreamErrors = _PyMem_RawStrdup(errors);
190 if (!_Py_StandardStreamErrors) {
191 if (_Py_StandardStreamEncoding) {
192 PyMem_RawFree(_Py_StandardStreamEncoding);
193 }
194 return -3;
195 }
196 }
Steve Dower39294992016-08-30 21:22:36 -0700197#ifdef MS_WINDOWS
198 if (_Py_StandardStreamEncoding) {
199 /* Overriding the stream encoding implies legacy streams */
200 Py_LegacyWindowsStdioFlag = 1;
201 }
202#endif
Nick Coghland6009512014-11-20 21:39:37 +1000203 return 0;
204}
205
Nick Coghlan6ea41862017-06-11 13:16:15 +1000206
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000207/* Global initializations. Can be undone by Py_FinalizeEx(). Don't
208 call this twice without an intervening Py_FinalizeEx() call. When
Nick Coghland6009512014-11-20 21:39:37 +1000209 initializations fail, a fatal error is issued and the function does
210 not return. On return, the first thread and interpreter state have
211 been created.
212
213 Locking: you must hold the interpreter lock while calling this.
214 (If the lock has not yet been initialized, that's equivalent to
215 having the lock, but you cannot use multiple threads.)
216
217*/
218
Nick Coghland6009512014-11-20 21:39:37 +1000219static char*
220get_codec_name(const char *encoding)
221{
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +0200222 const char *name_utf8;
223 char *name_str;
Nick Coghland6009512014-11-20 21:39:37 +1000224 PyObject *codec, *name = NULL;
225
226 codec = _PyCodec_Lookup(encoding);
227 if (!codec)
228 goto error;
229
230 name = _PyObject_GetAttrId(codec, &PyId_name);
231 Py_CLEAR(codec);
232 if (!name)
233 goto error;
234
Serhiy Storchaka06515832016-11-20 09:13:07 +0200235 name_utf8 = PyUnicode_AsUTF8(name);
Nick Coghland6009512014-11-20 21:39:37 +1000236 if (name_utf8 == NULL)
237 goto error;
238 name_str = _PyMem_RawStrdup(name_utf8);
239 Py_DECREF(name);
240 if (name_str == NULL) {
241 PyErr_NoMemory();
242 return NULL;
243 }
244 return name_str;
245
246error:
247 Py_XDECREF(codec);
248 Py_XDECREF(name);
249 return NULL;
250}
251
252static char*
253get_locale_encoding(void)
254{
Benjamin Petersondb610e92017-09-08 14:30:07 -0700255#if defined(HAVE_LANGINFO_H) && defined(CODESET)
Nick Coghland6009512014-11-20 21:39:37 +1000256 char* codeset = nl_langinfo(CODESET);
257 if (!codeset || codeset[0] == '\0') {
258 PyErr_SetString(PyExc_ValueError, "CODESET is not set or empty");
259 return NULL;
260 }
261 return get_codec_name(codeset);
Stefan Krah144da4e2016-04-26 01:56:50 +0200262#elif defined(__ANDROID__)
263 return get_codec_name("UTF-8");
Nick Coghland6009512014-11-20 21:39:37 +1000264#else
265 PyErr_SetNone(PyExc_NotImplementedError);
266 return NULL;
267#endif
268}
269
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800270static _PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700271initimport(PyInterpreterState *interp, PyObject *sysmod)
Nick Coghland6009512014-11-20 21:39:37 +1000272{
273 PyObject *importlib;
274 PyObject *impmod;
Nick Coghland6009512014-11-20 21:39:37 +1000275 PyObject *value;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800276 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +1000277
278 /* Import _importlib through its frozen version, _frozen_importlib. */
279 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800280 return _Py_INIT_ERR("can't import _frozen_importlib");
Nick Coghland6009512014-11-20 21:39:37 +1000281 }
282 else if (Py_VerboseFlag) {
283 PySys_FormatStderr("import _frozen_importlib # frozen\n");
284 }
285 importlib = PyImport_AddModule("_frozen_importlib");
286 if (importlib == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800287 return _Py_INIT_ERR("couldn't get _frozen_importlib from sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000288 }
289 interp->importlib = importlib;
290 Py_INCREF(interp->importlib);
291
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300292 interp->import_func = PyDict_GetItemString(interp->builtins, "__import__");
293 if (interp->import_func == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800294 return _Py_INIT_ERR("__import__ not found");
Serhiy Storchaka133138a2016-08-02 22:51:21 +0300295 Py_INCREF(interp->import_func);
296
Victor Stinnercd6e6942015-09-18 09:11:57 +0200297 /* Import the _imp module */
Nick Coghland6009512014-11-20 21:39:37 +1000298 impmod = PyInit_imp();
299 if (impmod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800300 return _Py_INIT_ERR("can't import _imp");
Nick Coghland6009512014-11-20 21:39:37 +1000301 }
302 else if (Py_VerboseFlag) {
Victor Stinnercd6e6942015-09-18 09:11:57 +0200303 PySys_FormatStderr("import _imp # builtin\n");
Nick Coghland6009512014-11-20 21:39:37 +1000304 }
Eric Snow3f9eee62017-09-15 16:35:20 -0600305 if (_PyImport_SetModuleString("_imp", impmod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800306 return _Py_INIT_ERR("can't save _imp to sys.modules");
Nick Coghland6009512014-11-20 21:39:37 +1000307 }
308
Victor Stinnercd6e6942015-09-18 09:11:57 +0200309 /* Install importlib as the implementation of import */
Nick Coghland6009512014-11-20 21:39:37 +1000310 value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200311 if (value != NULL) {
312 Py_DECREF(value);
Eric Snow6b4be192017-05-22 21:36:03 -0700313 value = PyObject_CallMethod(importlib,
314 "_install_external_importers", "");
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200315 }
Nick Coghland6009512014-11-20 21:39:37 +1000316 if (value == NULL) {
317 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800318 return _Py_INIT_ERR("importlib install failed");
Nick Coghland6009512014-11-20 21:39:37 +1000319 }
320 Py_DECREF(value);
321 Py_DECREF(impmod);
322
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800323 err = _PyImportZip_Init();
324 if (_Py_INIT_FAILED(err)) {
325 return err;
326 }
327
328 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000329}
330
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800331static _PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700332initexternalimport(PyInterpreterState *interp)
333{
334 PyObject *value;
335 value = PyObject_CallMethod(interp->importlib,
336 "_install_external_importers", "");
337 if (value == NULL) {
338 PyErr_Print();
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800339 return _Py_INIT_ERR("external importer setup failed");
Eric Snow1abcf672017-05-23 21:46:51 -0700340 }
Stéphane Wirtelab1cb802017-06-08 13:13:20 +0200341 Py_DECREF(value);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800342 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700343}
Nick Coghland6009512014-11-20 21:39:37 +1000344
Nick Coghlan6ea41862017-06-11 13:16:15 +1000345/* Helper functions to better handle the legacy C locale
346 *
347 * The legacy C locale assumes ASCII as the default text encoding, which
348 * causes problems not only for the CPython runtime, but also other
349 * components like GNU readline.
350 *
351 * Accordingly, when the CLI detects it, it attempts to coerce it to a
352 * more capable UTF-8 based alternative as follows:
353 *
354 * if (_Py_LegacyLocaleDetected()) {
355 * _Py_CoerceLegacyLocale();
356 * }
357 *
358 * See the documentation of the PYTHONCOERCECLOCALE setting for more details.
359 *
360 * Locale coercion also impacts the default error handler for the standard
361 * streams: while the usual default is "strict", the default for the legacy
362 * C locale and for any of the coercion target locales is "surrogateescape".
363 */
364
365int
366_Py_LegacyLocaleDetected(void)
367{
368#ifndef MS_WINDOWS
369 /* On non-Windows systems, the C locale is considered a legacy locale */
Nick Coghlaneb817952017-06-18 12:29:42 +1000370 /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat
371 * the POSIX locale as a simple alias for the C locale, so
372 * we may also want to check for that explicitly.
373 */
Nick Coghlan6ea41862017-06-11 13:16:15 +1000374 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
375 return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
376#else
377 /* Windows uses code pages instead of locales, so no locale is legacy */
378 return 0;
379#endif
380}
381
Nick Coghlaneb817952017-06-18 12:29:42 +1000382static const char *_C_LOCALE_WARNING =
383 "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII "
384 "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, "
385 "C.utf8, or UTF-8 (if available) as alternative Unicode-compatible "
386 "locales is recommended.\n";
387
Nick Coghlaneb817952017-06-18 12:29:42 +1000388static void
Victor Stinner94540602017-12-16 04:54:22 +0100389_emit_stderr_warning_for_legacy_locale(const _PyCoreConfig *core_config)
Nick Coghlaneb817952017-06-18 12:29:42 +1000390{
Victor Stinner94540602017-12-16 04:54:22 +0100391 if (core_config->coerce_c_locale_warn) {
Nick Coghlaneb817952017-06-18 12:29:42 +1000392 if (_Py_LegacyLocaleDetected()) {
393 fprintf(stderr, "%s", _C_LOCALE_WARNING);
394 }
395 }
396}
397
Nick Coghlan6ea41862017-06-11 13:16:15 +1000398typedef struct _CandidateLocale {
399 const char *locale_name; /* The locale to try as a coercion target */
400} _LocaleCoercionTarget;
401
402static _LocaleCoercionTarget _TARGET_LOCALES[] = {
403 {"C.UTF-8"},
404 {"C.utf8"},
Nick Coghlan18974c32017-06-30 00:48:14 +1000405 {"UTF-8"},
Nick Coghlan6ea41862017-06-11 13:16:15 +1000406 {NULL}
407};
408
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +0200409static const char *
Nick Coghlan6ea41862017-06-11 13:16:15 +1000410get_default_standard_stream_error_handler(void)
411{
412 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
413 if (ctype_loc != NULL) {
414 /* "surrogateescape" is the default in the legacy C locale */
415 if (strcmp(ctype_loc, "C") == 0) {
416 return "surrogateescape";
417 }
418
419#ifdef PY_COERCE_C_LOCALE
420 /* "surrogateescape" is the default in locale coercion target locales */
421 const _LocaleCoercionTarget *target = NULL;
422 for (target = _TARGET_LOCALES; target->locale_name; target++) {
423 if (strcmp(ctype_loc, target->locale_name) == 0) {
424 return "surrogateescape";
425 }
426 }
427#endif
428 }
429
430 /* Otherwise return NULL to request the typical default error handler */
431 return NULL;
432}
433
434#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100435static const char C_LOCALE_COERCION_WARNING[] =
Nick Coghlan6ea41862017-06-11 13:16:15 +1000436 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale "
437 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n";
438
439static void
Victor Stinner94540602017-12-16 04:54:22 +0100440_coerce_default_locale_settings(const _PyCoreConfig *config, const _LocaleCoercionTarget *target)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000441{
442 const char *newloc = target->locale_name;
443
444 /* Reset locale back to currently configured defaults */
xdegaye1588be62017-11-12 12:45:59 +0100445 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000446
447 /* Set the relevant locale environment variable */
448 if (setenv("LC_CTYPE", newloc, 1)) {
449 fprintf(stderr,
450 "Error setting LC_CTYPE, skipping C locale coercion\n");
451 return;
452 }
Victor Stinner94540602017-12-16 04:54:22 +0100453 if (config->coerce_c_locale_warn) {
454 fprintf(stderr, C_LOCALE_COERCION_WARNING, newloc);
Nick Coghlaneb817952017-06-18 12:29:42 +1000455 }
Nick Coghlan6ea41862017-06-11 13:16:15 +1000456
457 /* Reconfigure with the overridden environment variables */
xdegaye1588be62017-11-12 12:45:59 +0100458 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000459}
460#endif
461
462void
Victor Stinner94540602017-12-16 04:54:22 +0100463_Py_CoerceLegacyLocale(const _PyCoreConfig *config)
Nick Coghlan6ea41862017-06-11 13:16:15 +1000464{
465#ifdef PY_COERCE_C_LOCALE
Victor Stinner94540602017-12-16 04:54:22 +0100466 const char *locale_override = getenv("LC_ALL");
467 if (locale_override == NULL || *locale_override == '\0') {
468 /* LC_ALL is also not set (or is set to an empty string) */
469 const _LocaleCoercionTarget *target = NULL;
470 for (target = _TARGET_LOCALES; target->locale_name; target++) {
471 const char *new_locale = setlocale(LC_CTYPE,
472 target->locale_name);
473 if (new_locale != NULL) {
xdegaye1588be62017-11-12 12:45:59 +0100474#if !defined(__APPLE__) && !defined(__ANDROID__) && \
Victor Stinner94540602017-12-16 04:54:22 +0100475defined(HAVE_LANGINFO_H) && defined(CODESET)
476 /* Also ensure that nl_langinfo works in this locale */
477 char *codeset = nl_langinfo(CODESET);
478 if (!codeset || *codeset == '\0') {
479 /* CODESET is not set or empty, so skip coercion */
480 new_locale = NULL;
481 _Py_SetLocaleFromEnv(LC_CTYPE);
482 continue;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000483 }
Victor Stinner94540602017-12-16 04:54:22 +0100484#endif
485 /* Successfully configured locale, so make it the default */
486 _coerce_default_locale_settings(config, target);
487 return;
Nick Coghlan6ea41862017-06-11 13:16:15 +1000488 }
489 }
490 }
491 /* No C locale warning here, as Py_Initialize will emit one later */
492#endif
493}
494
xdegaye1588be62017-11-12 12:45:59 +0100495/* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to
496 * isolate the idiosyncrasies of different libc implementations. It reads the
497 * appropriate environment variable and uses its value to select the locale for
498 * 'category'. */
499char *
500_Py_SetLocaleFromEnv(int category)
501{
502#ifdef __ANDROID__
503 const char *locale;
504 const char **pvar;
505#ifdef PY_COERCE_C_LOCALE
506 const char *coerce_c_locale;
507#endif
508 const char *utf8_locale = "C.UTF-8";
509 const char *env_var_set[] = {
510 "LC_ALL",
511 "LC_CTYPE",
512 "LANG",
513 NULL,
514 };
515
516 /* Android setlocale(category, "") doesn't check the environment variables
517 * and incorrectly sets the "C" locale at API 24 and older APIs. We only
518 * check the environment variables listed in env_var_set. */
519 for (pvar=env_var_set; *pvar; pvar++) {
520 locale = getenv(*pvar);
521 if (locale != NULL && *locale != '\0') {
522 if (strcmp(locale, utf8_locale) == 0 ||
523 strcmp(locale, "en_US.UTF-8") == 0) {
524 return setlocale(category, utf8_locale);
525 }
526 return setlocale(category, "C");
527 }
528 }
529
530 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
531 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
532 * Quote from POSIX section "8.2 Internationalization Variables":
533 * "4. If the LANG environment variable is not set or is set to the empty
534 * string, the implementation-defined default locale shall be used." */
535
536#ifdef PY_COERCE_C_LOCALE
537 coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
538 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
539 /* Some other ported code may check the environment variables (e.g. in
540 * extension modules), so we make sure that they match the locale
541 * configuration */
542 if (setenv("LC_CTYPE", utf8_locale, 1)) {
543 fprintf(stderr, "Warning: failed setting the LC_CTYPE "
544 "environment variable to %s\n", utf8_locale);
545 }
546 }
547#endif
548 return setlocale(category, utf8_locale);
549#else /* __ANDROID__ */
550 return setlocale(category, "");
551#endif /* __ANDROID__ */
552}
553
Nick Coghlan6ea41862017-06-11 13:16:15 +1000554
Eric Snow1abcf672017-05-23 21:46:51 -0700555/* Global initializations. Can be undone by Py_Finalize(). Don't
556 call this twice without an intervening Py_Finalize() call.
557
558 Every call to Py_InitializeCore, Py_Initialize or Py_InitializeEx
559 must have a corresponding call to Py_Finalize.
560
561 Locking: you must hold the interpreter lock while calling these APIs.
562 (If the lock has not yet been initialized, that's equivalent to
563 having the lock, but you cannot use multiple threads.)
564
565*/
566
567/* Begin interpreter initialization
568 *
569 * On return, the first thread and interpreter state have been created,
570 * but the compiler, signal handling, multithreading and
571 * multiple interpreter support, and codec infrastructure are not yet
572 * available.
573 *
574 * The import system will support builtin and frozen modules only.
575 * The only supported io is writing to sys.stderr
576 *
577 * If any operation invoked by this function fails, a fatal error is
578 * issued and the function does not return.
579 *
580 * Any code invoked from this function should *not* assume it has access
581 * to the Python C API (unless the API is explicitly listed as being
582 * safe to call without calling Py_Initialize first)
583 */
584
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800585_PyInitError
Victor Stinnerda273412017-12-15 01:46:02 +0100586_Py_InitializeCore(const _PyCoreConfig *core_config)
Nick Coghland6009512014-11-20 21:39:37 +1000587{
Victor Stinnerda273412017-12-15 01:46:02 +0100588 assert(core_config != NULL);
589
Nick Coghland6009512014-11-20 21:39:37 +1000590 PyInterpreterState *interp;
591 PyThreadState *tstate;
592 PyObject *bimod, *sysmod, *pstderr;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800593 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +1000594
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800595 err = _PyRuntime_Initialize();
596 if (_Py_INIT_FAILED(err)) {
597 return err;
598 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600599
Victor Stinnerda273412017-12-15 01:46:02 +0100600 if (_PyMem_SetupAllocators(core_config->allocator) < 0) {
Victor Stinner5d39e042017-11-29 17:20:38 +0100601 return _Py_INIT_USER_ERR("Unknown PYTHONMALLOC allocator");
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800602 }
603
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600604 if (_PyRuntime.initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800605 return _Py_INIT_ERR("main interpreter already initialized");
Eric Snow1abcf672017-05-23 21:46:51 -0700606 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600607 if (_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800608 return _Py_INIT_ERR("runtime core already initialized");
Eric Snow1abcf672017-05-23 21:46:51 -0700609 }
610
611 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
612 * threads behave a little more gracefully at interpreter shutdown.
613 * We clobber it here so the new interpreter can start with a clean
614 * slate.
615 *
616 * However, this may still lead to misbehaviour if there are daemon
617 * threads still hanging around from a previous Py_Initialize/Finalize
618 * pair :(
619 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600620 _PyRuntime.finalizing = NULL;
621
Nick Coghlan6ea41862017-06-11 13:16:15 +1000622#ifndef MS_WINDOWS
Nick Coghland6009512014-11-20 21:39:37 +1000623 /* Set up the LC_CTYPE locale, so we can obtain
624 the locale's charset without having to switch
625 locales. */
xdegaye1588be62017-11-12 12:45:59 +0100626 _Py_SetLocaleFromEnv(LC_CTYPE);
Victor Stinner94540602017-12-16 04:54:22 +0100627 _emit_stderr_warning_for_legacy_locale(core_config);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000628#endif
Nick Coghland6009512014-11-20 21:39:37 +1000629
Victor Stinnerda273412017-12-15 01:46:02 +0100630 err = _Py_HashRandomization_Init(core_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800631 if (_Py_INIT_FAILED(err)) {
632 return err;
633 }
634
Victor Stinnerda273412017-12-15 01:46:02 +0100635 if (!core_config->use_hash_seed || core_config->hash_seed) {
Eric Snow1abcf672017-05-23 21:46:51 -0700636 /* Random or non-zero hash seed */
637 Py_HashRandomizationFlag = 1;
638 }
Nick Coghland6009512014-11-20 21:39:37 +1000639
Victor Stinnera7368ac2017-11-15 18:11:45 -0800640 err = _PyInterpreterState_Enable(&_PyRuntime);
641 if (_Py_INIT_FAILED(err)) {
642 return err;
643 }
644
Nick Coghland6009512014-11-20 21:39:37 +1000645 interp = PyInterpreterState_New();
Victor Stinnerda273412017-12-15 01:46:02 +0100646 if (interp == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800647 return _Py_INIT_ERR("can't make main interpreter");
Victor Stinnerda273412017-12-15 01:46:02 +0100648 }
649
650 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
651 return _Py_INIT_ERR("failed to copy core config");
652 }
Nick Coghland6009512014-11-20 21:39:37 +1000653
654 tstate = PyThreadState_New(interp);
655 if (tstate == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800656 return _Py_INIT_ERR("can't make first thread");
Nick Coghland6009512014-11-20 21:39:37 +1000657 (void) PyThreadState_Swap(tstate);
658
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000659 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
Nick Coghland6009512014-11-20 21:39:37 +1000660 destroying the GIL might fail when it is being referenced from
661 another running thread (see issue #9901).
662 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000663 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Nick Coghland6009512014-11-20 21:39:37 +1000664 _PyEval_FiniThreads();
Nick Coghland6009512014-11-20 21:39:37 +1000665 /* Auto-thread-state API */
666 _PyGILState_Init(interp, tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000667
668 _Py_ReadyTypes();
669
670 if (!_PyFrame_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800671 return _Py_INIT_ERR("can't init frames");
Nick Coghland6009512014-11-20 21:39:37 +1000672
673 if (!_PyLong_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800674 return _Py_INIT_ERR("can't init longs");
Nick Coghland6009512014-11-20 21:39:37 +1000675
676 if (!PyByteArray_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800677 return _Py_INIT_ERR("can't init bytearray");
Nick Coghland6009512014-11-20 21:39:37 +1000678
679 if (!_PyFloat_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800680 return _Py_INIT_ERR("can't init float");
Nick Coghland6009512014-11-20 21:39:37 +1000681
Eric Snowd393c1b2017-09-14 12:18:12 -0600682 PyObject *modules = PyDict_New();
683 if (modules == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800684 return _Py_INIT_ERR("can't make modules dictionary");
Eric Snowd393c1b2017-09-14 12:18:12 -0600685 interp->modules = modules;
686
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800687 err = _PySys_BeginInit(&sysmod);
688 if (_Py_INIT_FAILED(err)) {
689 return err;
690 }
691
Eric Snowd393c1b2017-09-14 12:18:12 -0600692 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800693 if (interp->sysdict == NULL) {
694 return _Py_INIT_ERR("can't initialize sys dict");
695 }
696
Eric Snowd393c1b2017-09-14 12:18:12 -0600697 Py_INCREF(interp->sysdict);
698 PyDict_SetItemString(interp->sysdict, "modules", modules);
699 _PyImport_FixupBuiltin(sysmod, "sys", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000700
701 /* Init Unicode implementation; relies on the codec registry */
702 if (_PyUnicode_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800703 return _Py_INIT_ERR("can't initialize unicode");
Eric Snow1abcf672017-05-23 21:46:51 -0700704
Nick Coghland6009512014-11-20 21:39:37 +1000705 if (_PyStructSequence_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800706 return _Py_INIT_ERR("can't initialize structseq");
Nick Coghland6009512014-11-20 21:39:37 +1000707
708 bimod = _PyBuiltin_Init();
709 if (bimod == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800710 return _Py_INIT_ERR("can't initialize builtins modules");
Eric Snowd393c1b2017-09-14 12:18:12 -0600711 _PyImport_FixupBuiltin(bimod, "builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000712 interp->builtins = PyModule_GetDict(bimod);
713 if (interp->builtins == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800714 return _Py_INIT_ERR("can't initialize builtins dict");
Nick Coghland6009512014-11-20 21:39:37 +1000715 Py_INCREF(interp->builtins);
716
717 /* initialize builtin exceptions */
718 _PyExc_Init(bimod);
719
Nick Coghland6009512014-11-20 21:39:37 +1000720 /* Set up a preliminary stderr printer until we have enough
721 infrastructure for the io module in place. */
722 pstderr = PyFile_NewStdPrinter(fileno(stderr));
723 if (pstderr == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800724 return _Py_INIT_ERR("can't set preliminary stderr");
Nick Coghland6009512014-11-20 21:39:37 +1000725 _PySys_SetObjectId(&PyId_stderr, pstderr);
726 PySys_SetObject("__stderr__", pstderr);
727 Py_DECREF(pstderr);
728
Victor Stinner672b6ba2017-12-06 17:25:50 +0100729 err = _PyImport_Init(interp);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800730 if (_Py_INIT_FAILED(err)) {
731 return err;
732 }
Nick Coghland6009512014-11-20 21:39:37 +1000733
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800734 err = _PyImportHooks_Init();
735 if (_Py_INIT_FAILED(err)) {
736 return err;
737 }
Nick Coghland6009512014-11-20 21:39:37 +1000738
739 /* Initialize _warnings. */
Victor Stinner1f151112017-11-23 10:43:14 +0100740 if (_PyWarnings_InitWithConfig(&interp->core_config) == NULL) {
741 return _Py_INIT_ERR("can't initialize warnings");
742 }
Nick Coghland6009512014-11-20 21:39:37 +1000743
Eric Snow1abcf672017-05-23 21:46:51 -0700744 /* This call sets up builtin and frozen import support */
745 if (!interp->core_config._disable_importlib) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800746 err = initimport(interp, sysmod);
747 if (_Py_INIT_FAILED(err)) {
748 return err;
749 }
Eric Snow1abcf672017-05-23 21:46:51 -0700750 }
751
752 /* Only when we get here is the runtime core fully initialized */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600753 _PyRuntime.core_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800754 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700755}
756
Eric Snowc7ec9982017-05-23 23:00:52 -0700757/* Update interpreter state based on supplied configuration settings
758 *
759 * After calling this function, most of the restrictions on the interpreter
760 * are lifted. The only remaining incomplete settings are those related
761 * to the main module (sys.argv[0], __main__ metadata)
762 *
763 * Calling this when the interpreter is not initializing, is already
764 * initialized or without a valid current thread state is a fatal error.
765 * Other errors should be reported as normal Python exceptions with a
766 * non-zero return code.
767 */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800768_PyInitError
769_Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -0700770{
771 PyInterpreterState *interp;
772 PyThreadState *tstate;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800773 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700774
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600775 if (!_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800776 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700777 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600778 if (_PyRuntime.initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800779 return _Py_INIT_ERR("main interpreter already initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700780 }
781
Eric Snow1abcf672017-05-23 21:46:51 -0700782 /* Get current thread state and interpreter pointer */
783 tstate = PyThreadState_GET();
784 if (!tstate)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800785 return _Py_INIT_ERR("failed to read thread state");
Eric Snow1abcf672017-05-23 21:46:51 -0700786 interp = tstate->interp;
787 if (!interp)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800788 return _Py_INIT_ERR("failed to get interpreter");
Eric Snow1abcf672017-05-23 21:46:51 -0700789
790 /* Now finish configuring the main interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +0100791 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
792 return _Py_INIT_ERR("failed to copy main interpreter config");
793 }
Eric Snowc7ec9982017-05-23 23:00:52 -0700794
Eric Snow1abcf672017-05-23 21:46:51 -0700795 if (interp->core_config._disable_importlib) {
796 /* Special mode for freeze_importlib: run with no import system
797 *
798 * This means anything which needs support from extension modules
799 * or pure Python code in the standard library won't work.
800 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600801 _PyRuntime.initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800802 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700803 }
Victor Stinner9316ee42017-11-25 03:17:57 +0100804
Victor Stinner33c377e2017-12-05 15:12:41 +0100805 if (_PyTime_Init() < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800806 return _Py_INIT_ERR("can't initialize time");
Victor Stinner33c377e2017-12-05 15:12:41 +0100807 }
Victor Stinner13019fd2015-04-03 13:10:54 +0200808
Victor Stinner41264f12017-12-15 02:05:29 +0100809 if (_PySys_EndInit(interp->sysdict, &interp->config) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800810 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnerda273412017-12-15 01:46:02 +0100811 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800812
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800813 err = initexternalimport(interp);
814 if (_Py_INIT_FAILED(err)) {
815 return err;
816 }
Nick Coghland6009512014-11-20 21:39:37 +1000817
818 /* initialize the faulthandler module */
Victor Stinnera7368ac2017-11-15 18:11:45 -0800819 err = _PyFaulthandler_Init(interp->core_config.faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800820 if (_Py_INIT_FAILED(err)) {
821 return err;
822 }
Nick Coghland6009512014-11-20 21:39:37 +1000823
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800824 err = initfsencoding(interp);
825 if (_Py_INIT_FAILED(err)) {
826 return err;
827 }
Nick Coghland6009512014-11-20 21:39:37 +1000828
Victor Stinner1f151112017-11-23 10:43:14 +0100829 if (interp->config.install_signal_handlers) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800830 err = initsigs(); /* Signal handling stuff, including initintr() */
831 if (_Py_INIT_FAILED(err)) {
832 return err;
833 }
834 }
Nick Coghland6009512014-11-20 21:39:37 +1000835
Victor Stinnera7368ac2017-11-15 18:11:45 -0800836 if (_PyTraceMalloc_Init(interp->core_config.tracemalloc) < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800837 return _Py_INIT_ERR("can't initialize tracemalloc");
Nick Coghland6009512014-11-20 21:39:37 +1000838
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800839 err = add_main_module(interp);
840 if (_Py_INIT_FAILED(err)) {
841 return err;
842 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800843
Victor Stinner91106cd2017-12-13 12:29:09 +0100844 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -0800845 if (_Py_INIT_FAILED(err)) {
846 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800847 }
Nick Coghland6009512014-11-20 21:39:37 +1000848
849 /* Initialize warnings. */
850 if (PySys_HasWarnOptions()) {
851 PyObject *warnings_module = PyImport_ImportModule("warnings");
852 if (warnings_module == NULL) {
853 fprintf(stderr, "'import warnings' failed; traceback:\n");
854 PyErr_Print();
855 }
856 Py_XDECREF(warnings_module);
857 }
858
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600859 _PyRuntime.initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700860
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800861 if (!Py_NoSiteFlag) {
862 err = initsite(); /* Module site */
863 if (_Py_INIT_FAILED(err)) {
864 return err;
865 }
866 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800867 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000868}
869
Eric Snowc7ec9982017-05-23 23:00:52 -0700870#undef _INIT_DEBUG_PRINT
871
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800872_PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700873_Py_InitializeEx_Private(int install_sigs, int install_importlib)
874{
875 _PyCoreConfig core_config = _PyCoreConfig_INIT;
Eric Snowc7ec9982017-05-23 23:00:52 -0700876 _PyMainInterpreterConfig config = _PyMainInterpreterConfig_INIT;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800877 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700878
Eric Snow1abcf672017-05-23 21:46:51 -0700879 core_config.ignore_environment = Py_IgnoreEnvironmentFlag;
880 core_config._disable_importlib = !install_importlib;
Eric Snowc7ec9982017-05-23 23:00:52 -0700881 config.install_signal_handlers = install_sigs;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800882
Victor Stinnerda273412017-12-15 01:46:02 +0100883 err = _PyCoreConfig_ReadEnv(&core_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800884 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100885 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800886 }
887
Victor Stinnerda273412017-12-15 01:46:02 +0100888 err = _Py_InitializeCore(&core_config);
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100889 if (_Py_INIT_FAILED(err)) {
890 goto done;
891 }
892
Victor Stinnerb5fd9ad2017-12-14 02:20:52 +0100893 err = _PyMainInterpreterConfig_Read(&config, &core_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800894 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100895 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800896 }
897
898 err = _Py_InitializeMainInterpreter(&config);
899 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100900 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800901 }
902
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100903 err = _Py_INIT_OK();
904
905done:
Victor Stinnerb5fd9ad2017-12-14 02:20:52 +0100906 _PyCoreConfig_Clear(&core_config);
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100907 _PyMainInterpreterConfig_Clear(&config);
908 return err;
Eric Snow1abcf672017-05-23 21:46:51 -0700909}
910
911
912void
Nick Coghland6009512014-11-20 21:39:37 +1000913Py_InitializeEx(int install_sigs)
914{
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800915 _PyInitError err = _Py_InitializeEx_Private(install_sigs, 1);
916 if (_Py_INIT_FAILED(err)) {
917 _Py_FatalInitError(err);
918 }
Nick Coghland6009512014-11-20 21:39:37 +1000919}
920
921void
922Py_Initialize(void)
923{
924 Py_InitializeEx(1);
925}
926
927
928#ifdef COUNT_ALLOCS
929extern void dump_counts(FILE*);
930#endif
931
932/* Flush stdout and stderr */
933
934static int
935file_is_closed(PyObject *fobj)
936{
937 int r;
938 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
939 if (tmp == NULL) {
940 PyErr_Clear();
941 return 0;
942 }
943 r = PyObject_IsTrue(tmp);
944 Py_DECREF(tmp);
945 if (r < 0)
946 PyErr_Clear();
947 return r > 0;
948}
949
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000950static int
Nick Coghland6009512014-11-20 21:39:37 +1000951flush_std_files(void)
952{
953 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
954 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
955 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000956 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +1000957
958 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -0700959 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000960 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +1000961 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000962 status = -1;
963 }
Nick Coghland6009512014-11-20 21:39:37 +1000964 else
965 Py_DECREF(tmp);
966 }
967
968 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -0700969 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000970 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +1000971 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000972 status = -1;
973 }
Nick Coghland6009512014-11-20 21:39:37 +1000974 else
975 Py_DECREF(tmp);
976 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000977
978 return status;
Nick Coghland6009512014-11-20 21:39:37 +1000979}
980
981/* Undo the effect of Py_Initialize().
982
983 Beware: if multiple interpreter and/or thread states exist, these
984 are not wiped out; only the current thread and interpreter state
985 are deleted. But since everything else is deleted, those other
986 interpreter and thread states should no longer be used.
987
988 (XXX We should do better, e.g. wipe out all interpreters and
989 threads.)
990
991 Locking: as above.
992
993*/
994
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000995int
996Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +1000997{
998 PyInterpreterState *interp;
999 PyThreadState *tstate;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001000 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001001
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001002 if (!_PyRuntime.initialized)
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001003 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001004
1005 wait_for_thread_shutdown();
1006
1007 /* The interpreter is still entirely intact at this point, and the
1008 * exit funcs may be relying on that. In particular, if some thread
1009 * or exit func is still waiting to do an import, the import machinery
1010 * expects Py_IsInitialized() to return true. So don't say the
1011 * interpreter is uninitialized until after the exit funcs have run.
1012 * Note that Threading.py uses an exit func to do a join on all the
1013 * threads created thru it, so this also protects pending imports in
1014 * the threads created via Threading.
1015 */
1016 call_py_exitfuncs();
1017
1018 /* Get current thread state and interpreter pointer */
1019 tstate = PyThreadState_GET();
1020 interp = tstate->interp;
1021
Victor Stinnerda273412017-12-15 01:46:02 +01001022 /* Copy the core config, PyInterpreterState_Delete() free
1023 the core config memory */
1024 int show_ref_count = interp->core_config.show_ref_count;
1025 int dump_refs = interp->core_config.dump_refs;
1026 int malloc_stats = interp->core_config.malloc_stats;
Victor Stinner6bf992a2017-12-06 17:26:10 +01001027
Nick Coghland6009512014-11-20 21:39:37 +10001028 /* Remaining threads (e.g. daemon threads) will automatically exit
1029 after taking the GIL (in PyEval_RestoreThread()). */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001030 _PyRuntime.finalizing = tstate;
1031 _PyRuntime.initialized = 0;
1032 _PyRuntime.core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001033
Victor Stinnere0deff32015-03-24 13:46:18 +01001034 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001035 if (flush_std_files() < 0) {
1036 status = -1;
1037 }
Nick Coghland6009512014-11-20 21:39:37 +10001038
1039 /* Disable signal handling */
1040 PyOS_FiniInterrupts();
1041
1042 /* Collect garbage. This may call finalizers; it's nice to call these
1043 * before all modules are destroyed.
1044 * XXX If a __del__ or weakref callback is triggered here, and tries to
1045 * XXX import a module, bad things can happen, because Python no
1046 * XXX longer believes it's initialized.
1047 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1048 * XXX is easy to provoke that way. I've also seen, e.g.,
1049 * XXX Exception exceptions.ImportError: 'No module named sha'
1050 * XXX in <function callback at 0x008F5718> ignored
1051 * XXX but I'm unclear on exactly how that one happens. In any case,
1052 * XXX I haven't seen a real-life report of either of these.
1053 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001054 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001055#ifdef COUNT_ALLOCS
1056 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1057 each collection might release some types from the type
1058 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001059 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001060 /* nothing */;
1061#endif
Eric Snowdae02762017-09-14 00:35:58 -07001062
Nick Coghland6009512014-11-20 21:39:37 +10001063 /* Destroy all modules */
1064 PyImport_Cleanup();
1065
Victor Stinnere0deff32015-03-24 13:46:18 +01001066 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001067 if (flush_std_files() < 0) {
1068 status = -1;
1069 }
Nick Coghland6009512014-11-20 21:39:37 +10001070
1071 /* Collect final garbage. This disposes of cycles created by
1072 * class definitions, for example.
1073 * XXX This is disabled because it caused too many problems. If
1074 * XXX a __del__ or weakref callback triggers here, Python code has
1075 * XXX a hard time running, because even the sys module has been
1076 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1077 * XXX One symptom is a sequence of information-free messages
1078 * XXX coming from threads (if a __del__ or callback is invoked,
1079 * XXX other threads can execute too, and any exception they encounter
1080 * XXX triggers a comedy of errors as subsystem after subsystem
1081 * XXX fails to find what it *expects* to find in sys to help report
1082 * XXX the exception and consequent unexpected failures). I've also
1083 * XXX seen segfaults then, after adding print statements to the
1084 * XXX Python code getting called.
1085 */
1086#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001087 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001088#endif
1089
1090 /* Disable tracemalloc after all Python objects have been destroyed,
1091 so it is possible to use tracemalloc in objects destructor. */
1092 _PyTraceMalloc_Fini();
1093
1094 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1095 _PyImport_Fini();
1096
1097 /* Cleanup typeobject.c's internal caches. */
1098 _PyType_Fini();
1099
1100 /* unload faulthandler module */
1101 _PyFaulthandler_Fini();
1102
1103 /* Debugging stuff */
1104#ifdef COUNT_ALLOCS
Serhiy Storchaka7e160ce2016-07-03 21:03:53 +03001105 dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001106#endif
1107 /* dump hash stats */
1108 _PyHash_Fini();
1109
Eric Snowdae02762017-09-14 00:35:58 -07001110#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001111 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001112 _PyDebug_PrintTotalRefs();
1113 }
Eric Snowdae02762017-09-14 00:35:58 -07001114#endif
Nick Coghland6009512014-11-20 21:39:37 +10001115
1116#ifdef Py_TRACE_REFS
1117 /* Display all objects still alive -- this can invoke arbitrary
1118 * __repr__ overrides, so requires a mostly-intact interpreter.
1119 * Alas, a lot of stuff may still be alive now that will be cleaned
1120 * up later.
1121 */
Victor Stinnerda273412017-12-15 01:46:02 +01001122 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001123 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001124 }
Nick Coghland6009512014-11-20 21:39:37 +10001125#endif /* Py_TRACE_REFS */
1126
1127 /* Clear interpreter state and all thread states. */
1128 PyInterpreterState_Clear(interp);
1129
1130 /* Now we decref the exception classes. After this point nothing
1131 can raise an exception. That's okay, because each Fini() method
1132 below has been checked to make sure no exceptions are ever
1133 raised.
1134 */
1135
1136 _PyExc_Fini();
1137
1138 /* Sundry finalizers */
1139 PyMethod_Fini();
1140 PyFrame_Fini();
1141 PyCFunction_Fini();
1142 PyTuple_Fini();
1143 PyList_Fini();
1144 PySet_Fini();
1145 PyBytes_Fini();
1146 PyByteArray_Fini();
1147 PyLong_Fini();
1148 PyFloat_Fini();
1149 PyDict_Fini();
1150 PySlice_Fini();
1151 _PyGC_Fini();
Eric Snow6b4be192017-05-22 21:36:03 -07001152 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001153 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001154 PyAsyncGen_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001155
1156 /* Cleanup Unicode implementation */
1157 _PyUnicode_Fini();
1158
1159 /* reset file system default encoding */
1160 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
1161 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
1162 Py_FileSystemDefaultEncoding = NULL;
1163 }
1164
1165 /* XXX Still allocated:
1166 - various static ad-hoc pointers to interned strings
1167 - int and float free list blocks
1168 - whatever various modules and libraries allocate
1169 */
1170
1171 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1172
1173 /* Cleanup auto-thread-state */
Nick Coghland6009512014-11-20 21:39:37 +10001174 _PyGILState_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001175
1176 /* Delete current thread. After this, many C API calls become crashy. */
1177 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001178
Nick Coghland6009512014-11-20 21:39:37 +10001179 PyInterpreterState_Delete(interp);
1180
1181#ifdef Py_TRACE_REFS
1182 /* Display addresses (& refcnts) of all objects still alive.
1183 * An address can be used to find the repr of the object, printed
1184 * above by _Py_PrintReferences.
1185 */
Victor Stinnerda273412017-12-15 01:46:02 +01001186 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001187 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001188 }
Nick Coghland6009512014-11-20 21:39:37 +10001189#endif /* Py_TRACE_REFS */
Victor Stinner34be807c2016-03-14 12:04:26 +01001190#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001191 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001192 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be807c2016-03-14 12:04:26 +01001193 }
Nick Coghland6009512014-11-20 21:39:37 +10001194#endif
1195
1196 call_ll_exitfuncs();
Victor Stinner9316ee42017-11-25 03:17:57 +01001197
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001198 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001199 return status;
1200}
1201
1202void
1203Py_Finalize(void)
1204{
1205 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001206}
1207
1208/* Create and initialize a new interpreter and thread, and return the
1209 new thread. This requires that Py_Initialize() has been called
1210 first.
1211
1212 Unsuccessful initialization yields a NULL pointer. Note that *no*
1213 exception information is available even in this case -- the
1214 exception information is held in the thread, and there is no
1215 thread.
1216
1217 Locking: as above.
1218
1219*/
1220
Victor Stinnera7368ac2017-11-15 18:11:45 -08001221static _PyInitError
1222new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001223{
1224 PyInterpreterState *interp;
1225 PyThreadState *tstate, *save_tstate;
1226 PyObject *bimod, *sysmod;
Victor Stinner9316ee42017-11-25 03:17:57 +01001227 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001228
Victor Stinnera7368ac2017-11-15 18:11:45 -08001229 if (!_PyRuntime.initialized) {
1230 return _Py_INIT_ERR("Py_Initialize must be called first");
1231 }
Nick Coghland6009512014-11-20 21:39:37 +10001232
Victor Stinner8a1be612016-03-14 22:07:55 +01001233 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1234 interpreters: disable PyGILState_Check(). */
1235 _PyGILState_check_enabled = 0;
1236
Nick Coghland6009512014-11-20 21:39:37 +10001237 interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001238 if (interp == NULL) {
1239 *tstate_p = NULL;
1240 return _Py_INIT_OK();
1241 }
Nick Coghland6009512014-11-20 21:39:37 +10001242
1243 tstate = PyThreadState_New(interp);
1244 if (tstate == NULL) {
1245 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001246 *tstate_p = NULL;
1247 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001248 }
1249
1250 save_tstate = PyThreadState_Swap(tstate);
1251
Eric Snow1abcf672017-05-23 21:46:51 -07001252 /* Copy the current interpreter config into the new interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +01001253 _PyCoreConfig *core_config;
1254 _PyMainInterpreterConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001255 if (save_tstate != NULL) {
Victor Stinnerda273412017-12-15 01:46:02 +01001256 core_config = &save_tstate->interp->core_config;
1257 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001258 } else {
1259 /* No current thread state, copy from the main interpreter */
1260 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinnerda273412017-12-15 01:46:02 +01001261 core_config = &main_interp->core_config;
1262 config = &main_interp->config;
1263 }
1264
1265 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
1266 return _Py_INIT_ERR("failed to copy core config");
1267 }
1268 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
1269 return _Py_INIT_ERR("failed to copy main interpreter config");
Eric Snow1abcf672017-05-23 21:46:51 -07001270 }
1271
Nick Coghland6009512014-11-20 21:39:37 +10001272 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001273 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001274 if (modules == NULL) {
1275 return _Py_INIT_ERR("can't make modules dictionary");
1276 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001277 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001278
Eric Snowd393c1b2017-09-14 12:18:12 -06001279 sysmod = _PyImport_FindBuiltin("sys", modules);
1280 if (sysmod != NULL) {
1281 interp->sysdict = PyModule_GetDict(sysmod);
1282 if (interp->sysdict == NULL)
1283 goto handle_error;
1284 Py_INCREF(interp->sysdict);
1285 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner41264f12017-12-15 02:05:29 +01001286 _PySys_EndInit(interp->sysdict, &interp->config);
Eric Snowd393c1b2017-09-14 12:18:12 -06001287 }
1288
1289 bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001290 if (bimod != NULL) {
1291 interp->builtins = PyModule_GetDict(bimod);
1292 if (interp->builtins == NULL)
1293 goto handle_error;
1294 Py_INCREF(interp->builtins);
1295 }
1296
1297 /* initialize builtin exceptions */
1298 _PyExc_Init(bimod);
1299
Nick Coghland6009512014-11-20 21:39:37 +10001300 if (bimod != NULL && sysmod != NULL) {
1301 PyObject *pstderr;
1302
Nick Coghland6009512014-11-20 21:39:37 +10001303 /* Set up a preliminary stderr printer until we have enough
1304 infrastructure for the io module in place. */
1305 pstderr = PyFile_NewStdPrinter(fileno(stderr));
Victor Stinnera7368ac2017-11-15 18:11:45 -08001306 if (pstderr == NULL) {
1307 return _Py_INIT_ERR("can't set preliminary stderr");
1308 }
Nick Coghland6009512014-11-20 21:39:37 +10001309 _PySys_SetObjectId(&PyId_stderr, pstderr);
1310 PySys_SetObject("__stderr__", pstderr);
1311 Py_DECREF(pstderr);
1312
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001313 err = _PyImportHooks_Init();
1314 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001315 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001316 }
Nick Coghland6009512014-11-20 21:39:37 +10001317
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001318 err = initimport(interp, sysmod);
1319 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001320 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001321 }
Nick Coghland6009512014-11-20 21:39:37 +10001322
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001323 err = initexternalimport(interp);
1324 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001325 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001326 }
Nick Coghland6009512014-11-20 21:39:37 +10001327
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001328 err = initfsencoding(interp);
1329 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001330 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001331 }
1332
Victor Stinner91106cd2017-12-13 12:29:09 +01001333 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001334 if (_Py_INIT_FAILED(err)) {
1335 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001336 }
1337
1338 err = add_main_module(interp);
1339 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001340 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001341 }
1342
1343 if (!Py_NoSiteFlag) {
1344 err = initsite();
1345 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001346 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001347 }
1348 }
Nick Coghland6009512014-11-20 21:39:37 +10001349 }
1350
Victor Stinnera7368ac2017-11-15 18:11:45 -08001351 if (PyErr_Occurred()) {
1352 goto handle_error;
1353 }
Nick Coghland6009512014-11-20 21:39:37 +10001354
Victor Stinnera7368ac2017-11-15 18:11:45 -08001355 *tstate_p = tstate;
1356 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001357
Nick Coghland6009512014-11-20 21:39:37 +10001358handle_error:
1359 /* Oops, it didn't work. Undo it all. */
1360
1361 PyErr_PrintEx(0);
1362 PyThreadState_Clear(tstate);
1363 PyThreadState_Swap(save_tstate);
1364 PyThreadState_Delete(tstate);
1365 PyInterpreterState_Delete(interp);
1366
Victor Stinnera7368ac2017-11-15 18:11:45 -08001367 *tstate_p = NULL;
1368 return _Py_INIT_OK();
1369}
1370
1371PyThreadState *
1372Py_NewInterpreter(void)
1373{
1374 PyThreadState *tstate;
1375 _PyInitError err = new_interpreter(&tstate);
1376 if (_Py_INIT_FAILED(err)) {
1377 _Py_FatalInitError(err);
1378 }
1379 return tstate;
1380
Nick Coghland6009512014-11-20 21:39:37 +10001381}
1382
1383/* Delete an interpreter and its last thread. This requires that the
1384 given thread state is current, that the thread has no remaining
1385 frames, and that it is its interpreter's only remaining thread.
1386 It is a fatal error to violate these constraints.
1387
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001388 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001389 everything, regardless.)
1390
1391 Locking: as above.
1392
1393*/
1394
1395void
1396Py_EndInterpreter(PyThreadState *tstate)
1397{
1398 PyInterpreterState *interp = tstate->interp;
1399
1400 if (tstate != PyThreadState_GET())
1401 Py_FatalError("Py_EndInterpreter: thread is not current");
1402 if (tstate->frame != NULL)
1403 Py_FatalError("Py_EndInterpreter: thread still has a frame");
1404
1405 wait_for_thread_shutdown();
1406
1407 if (tstate != interp->tstate_head || tstate->next != NULL)
1408 Py_FatalError("Py_EndInterpreter: not the last thread");
1409
1410 PyImport_Cleanup();
1411 PyInterpreterState_Clear(interp);
1412 PyThreadState_Swap(NULL);
1413 PyInterpreterState_Delete(interp);
1414}
1415
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001416/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001417
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001418static _PyInitError
1419add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001420{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001421 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001422 m = PyImport_AddModule("__main__");
1423 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001424 return _Py_INIT_ERR("can't create __main__ module");
1425
Nick Coghland6009512014-11-20 21:39:37 +10001426 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001427 ann_dict = PyDict_New();
1428 if ((ann_dict == NULL) ||
1429 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001430 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001431 }
1432 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001433
Nick Coghland6009512014-11-20 21:39:37 +10001434 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1435 PyObject *bimod = PyImport_ImportModule("builtins");
1436 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001437 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001438 }
1439 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001440 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001441 }
1442 Py_DECREF(bimod);
1443 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001444
Nick Coghland6009512014-11-20 21:39:37 +10001445 /* Main is a little special - imp.is_builtin("__main__") will return
1446 * False, but BuiltinImporter is still the most appropriate initial
1447 * setting for its __loader__ attribute. A more suitable value will
1448 * be set if __main__ gets further initialized later in the startup
1449 * process.
1450 */
1451 loader = PyDict_GetItemString(d, "__loader__");
1452 if (loader == NULL || loader == Py_None) {
1453 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1454 "BuiltinImporter");
1455 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001456 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001457 }
1458 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001459 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001460 }
1461 Py_DECREF(loader);
1462 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001463 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001464}
1465
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001466static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001467initfsencoding(PyInterpreterState *interp)
1468{
1469 PyObject *codec;
1470
Steve Dowercc16be82016-09-08 10:35:16 -07001471#ifdef MS_WINDOWS
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001472 if (Py_LegacyWindowsFSEncodingFlag) {
Steve Dowercc16be82016-09-08 10:35:16 -07001473 Py_FileSystemDefaultEncoding = "mbcs";
1474 Py_FileSystemDefaultEncodeErrors = "replace";
1475 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001476 else {
Steve Dowercc16be82016-09-08 10:35:16 -07001477 Py_FileSystemDefaultEncoding = "utf-8";
1478 Py_FileSystemDefaultEncodeErrors = "surrogatepass";
1479 }
1480#else
Victor Stinner91106cd2017-12-13 12:29:09 +01001481 if (Py_FileSystemDefaultEncoding == NULL &&
1482 interp->core_config.utf8_mode)
1483 {
1484 Py_FileSystemDefaultEncoding = "utf-8";
1485 Py_HasFileSystemDefaultEncoding = 1;
1486 }
1487 else if (Py_FileSystemDefaultEncoding == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001488 Py_FileSystemDefaultEncoding = get_locale_encoding();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001489 if (Py_FileSystemDefaultEncoding == NULL) {
1490 return _Py_INIT_ERR("Unable to get the locale encoding");
1491 }
Nick Coghland6009512014-11-20 21:39:37 +10001492
1493 Py_HasFileSystemDefaultEncoding = 0;
1494 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001495 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001496 }
Steve Dowercc16be82016-09-08 10:35:16 -07001497#endif
Nick Coghland6009512014-11-20 21:39:37 +10001498
1499 /* the encoding is mbcs, utf-8 or ascii */
1500 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
1501 if (!codec) {
1502 /* Such error can only occurs in critical situations: no more
1503 * memory, import a module of the standard library failed,
1504 * etc. */
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001505 return _Py_INIT_ERR("unable to load the file system codec");
Nick Coghland6009512014-11-20 21:39:37 +10001506 }
1507 Py_DECREF(codec);
1508 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001509 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001510}
1511
1512/* Import the site module (not into __main__ though) */
1513
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001514static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001515initsite(void)
1516{
1517 PyObject *m;
1518 m = PyImport_ImportModule("site");
1519 if (m == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001520 return _Py_INIT_USER_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001521 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001522 Py_DECREF(m);
1523 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001524}
1525
Victor Stinner874dbe82015-09-04 17:29:57 +02001526/* Check if a file descriptor is valid or not.
1527 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1528static int
1529is_valid_fd(int fd)
1530{
Victor Stinner1c4670e2017-05-04 00:45:56 +02001531#ifdef __APPLE__
1532 /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe
1533 and the other side of the pipe is closed, dup(1) succeed, whereas
1534 fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect
1535 such error. */
1536 struct stat st;
1537 return (fstat(fd, &st) == 0);
1538#else
Victor Stinner874dbe82015-09-04 17:29:57 +02001539 int fd2;
Steve Dower940f33a2016-09-08 11:21:54 -07001540 if (fd < 0)
Victor Stinner874dbe82015-09-04 17:29:57 +02001541 return 0;
1542 _Py_BEGIN_SUPPRESS_IPH
Victor Stinner449b2712015-09-29 13:59:50 +02001543 /* Prefer dup() over fstat(). fstat() can require input/output whereas
1544 dup() doesn't, there is a low risk of EMFILE/ENFILE at Python
1545 startup. */
Victor Stinner874dbe82015-09-04 17:29:57 +02001546 fd2 = dup(fd);
1547 if (fd2 >= 0)
1548 close(fd2);
1549 _Py_END_SUPPRESS_IPH
1550 return fd2 >= 0;
Victor Stinner1c4670e2017-05-04 00:45:56 +02001551#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001552}
1553
1554/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001555static PyObject*
1556create_stdio(PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001557 int fd, int write_mode, const char* name,
1558 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001559{
1560 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1561 const char* mode;
1562 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001563 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001564 int buffering, isatty;
1565 _Py_IDENTIFIER(open);
1566 _Py_IDENTIFIER(isatty);
1567 _Py_IDENTIFIER(TextIOWrapper);
1568 _Py_IDENTIFIER(mode);
1569
Victor Stinner874dbe82015-09-04 17:29:57 +02001570 if (!is_valid_fd(fd))
1571 Py_RETURN_NONE;
1572
Nick Coghland6009512014-11-20 21:39:37 +10001573 /* stdin is always opened in buffered mode, first because it shouldn't
1574 make a difference in common use cases, second because TextIOWrapper
1575 depends on the presence of a read1() method which only exists on
1576 buffered streams.
1577 */
1578 if (Py_UnbufferedStdioFlag && write_mode)
1579 buffering = 0;
1580 else
1581 buffering = -1;
1582 if (write_mode)
1583 mode = "wb";
1584 else
1585 mode = "rb";
1586 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1587 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001588 Py_None, Py_None, /* encoding, errors */
1589 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001590 if (buf == NULL)
1591 goto error;
1592
1593 if (buffering) {
1594 _Py_IDENTIFIER(raw);
1595 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1596 if (raw == NULL)
1597 goto error;
1598 }
1599 else {
1600 raw = buf;
1601 Py_INCREF(raw);
1602 }
1603
Steve Dower39294992016-08-30 21:22:36 -07001604#ifdef MS_WINDOWS
1605 /* Windows console IO is always UTF-8 encoded */
1606 if (PyWindowsConsoleIO_Check(raw))
1607 encoding = "utf-8";
1608#endif
1609
Nick Coghland6009512014-11-20 21:39:37 +10001610 text = PyUnicode_FromString(name);
1611 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1612 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001613 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001614 if (res == NULL)
1615 goto error;
1616 isatty = PyObject_IsTrue(res);
1617 Py_DECREF(res);
1618 if (isatty == -1)
1619 goto error;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001620 if (Py_UnbufferedStdioFlag)
1621 write_through = Py_True;
1622 else
1623 write_through = Py_False;
1624 if (isatty && !Py_UnbufferedStdioFlag)
Nick Coghland6009512014-11-20 21:39:37 +10001625 line_buffering = Py_True;
1626 else
1627 line_buffering = Py_False;
1628
1629 Py_CLEAR(raw);
1630 Py_CLEAR(text);
1631
1632#ifdef MS_WINDOWS
1633 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1634 newlines to "\n".
1635 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1636 newline = NULL;
1637#else
1638 /* sys.stdin: split lines at "\n".
1639 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1640 newline = "\n";
1641#endif
1642
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001643 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001644 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001645 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001646 Py_CLEAR(buf);
1647 if (stream == NULL)
1648 goto error;
1649
1650 if (write_mode)
1651 mode = "w";
1652 else
1653 mode = "r";
1654 text = PyUnicode_FromString(mode);
1655 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1656 goto error;
1657 Py_CLEAR(text);
1658 return stream;
1659
1660error:
1661 Py_XDECREF(buf);
1662 Py_XDECREF(stream);
1663 Py_XDECREF(text);
1664 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001665
Victor Stinner874dbe82015-09-04 17:29:57 +02001666 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1667 /* Issue #24891: the file descriptor was closed after the first
1668 is_valid_fd() check was called. Ignore the OSError and set the
1669 stream to None. */
1670 PyErr_Clear();
1671 Py_RETURN_NONE;
1672 }
1673 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001674}
1675
1676/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001677static _PyInitError
Victor Stinner91106cd2017-12-13 12:29:09 +01001678init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001679{
1680 PyObject *iomod = NULL, *wrapper;
1681 PyObject *bimod = NULL;
1682 PyObject *m;
1683 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001684 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001685 PyObject * encoding_attr;
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +02001686 char *pythonioencoding = NULL;
1687 const char *encoding, *errors;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001688 _PyInitError res = _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001689
1690 /* Hack to avoid a nasty recursion issue when Python is invoked
1691 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1692 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1693 goto error;
1694 }
1695 Py_DECREF(m);
1696
1697 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1698 goto error;
1699 }
1700 Py_DECREF(m);
1701
1702 if (!(bimod = PyImport_ImportModule("builtins"))) {
1703 goto error;
1704 }
1705
1706 if (!(iomod = PyImport_ImportModule("io"))) {
1707 goto error;
1708 }
1709 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1710 goto error;
1711 }
1712
1713 /* Set builtins.open */
1714 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1715 Py_DECREF(wrapper);
1716 goto error;
1717 }
1718 Py_DECREF(wrapper);
1719
1720 encoding = _Py_StandardStreamEncoding;
1721 errors = _Py_StandardStreamErrors;
1722 if (!encoding || !errors) {
Victor Stinner91106cd2017-12-13 12:29:09 +01001723 char *opt = Py_GETENV("PYTHONIOENCODING");
1724 if (opt && opt[0] != '\0') {
Nick Coghland6009512014-11-20 21:39:37 +10001725 char *err;
Victor Stinner91106cd2017-12-13 12:29:09 +01001726 pythonioencoding = _PyMem_Strdup(opt);
Nick Coghland6009512014-11-20 21:39:37 +10001727 if (pythonioencoding == NULL) {
1728 PyErr_NoMemory();
1729 goto error;
1730 }
1731 err = strchr(pythonioencoding, ':');
1732 if (err) {
1733 *err = '\0';
1734 err++;
Serhiy Storchakafc435112016-04-10 14:34:13 +03001735 if (*err && !errors) {
Nick Coghland6009512014-11-20 21:39:37 +10001736 errors = err;
1737 }
1738 }
1739 if (*pythonioencoding && !encoding) {
1740 encoding = pythonioencoding;
1741 }
1742 }
Victor Stinner91106cd2017-12-13 12:29:09 +01001743 else if (interp->core_config.utf8_mode) {
1744 encoding = "utf-8";
1745 errors = "surrogateescape";
1746 }
1747
1748 if (!errors && !pythonioencoding) {
Nick Coghlan6ea41862017-06-11 13:16:15 +10001749 /* Choose the default error handler based on the current locale */
1750 errors = get_default_standard_stream_error_handler();
Serhiy Storchakafc435112016-04-10 14:34:13 +03001751 }
Nick Coghland6009512014-11-20 21:39:37 +10001752 }
1753
1754 /* Set sys.stdin */
1755 fd = fileno(stdin);
1756 /* Under some conditions stdin, stdout and stderr may not be connected
1757 * and fileno() may point to an invalid file descriptor. For example
1758 * GUI apps don't have valid standard streams by default.
1759 */
Victor Stinner874dbe82015-09-04 17:29:57 +02001760 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1761 if (std == NULL)
1762 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001763 PySys_SetObject("__stdin__", std);
1764 _PySys_SetObjectId(&PyId_stdin, std);
1765 Py_DECREF(std);
1766
1767 /* Set sys.stdout */
1768 fd = fileno(stdout);
Victor Stinner874dbe82015-09-04 17:29:57 +02001769 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1770 if (std == NULL)
1771 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001772 PySys_SetObject("__stdout__", std);
1773 _PySys_SetObjectId(&PyId_stdout, std);
1774 Py_DECREF(std);
1775
1776#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1777 /* Set sys.stderr, replaces the preliminary stderr */
1778 fd = fileno(stderr);
Victor Stinner874dbe82015-09-04 17:29:57 +02001779 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1780 if (std == NULL)
1781 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001782
1783 /* Same as hack above, pre-import stderr's codec to avoid recursion
1784 when import.c tries to write to stderr in verbose mode. */
1785 encoding_attr = PyObject_GetAttrString(std, "encoding");
1786 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001787 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001788 if (std_encoding != NULL) {
1789 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1790 Py_XDECREF(codec_info);
1791 }
1792 Py_DECREF(encoding_attr);
1793 }
1794 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1795
1796 if (PySys_SetObject("__stderr__", std) < 0) {
1797 Py_DECREF(std);
1798 goto error;
1799 }
1800 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1801 Py_DECREF(std);
1802 goto error;
1803 }
1804 Py_DECREF(std);
1805#endif
1806
Victor Stinnera7368ac2017-11-15 18:11:45 -08001807 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001808
Victor Stinnera7368ac2017-11-15 18:11:45 -08001809error:
1810 res = _Py_INIT_ERR("can't initialize sys standard streams");
1811
1812done:
Nick Coghland6009512014-11-20 21:39:37 +10001813 /* We won't need them anymore. */
1814 if (_Py_StandardStreamEncoding) {
1815 PyMem_RawFree(_Py_StandardStreamEncoding);
1816 _Py_StandardStreamEncoding = NULL;
1817 }
1818 if (_Py_StandardStreamErrors) {
1819 PyMem_RawFree(_Py_StandardStreamErrors);
1820 _Py_StandardStreamErrors = NULL;
1821 }
1822 PyMem_Free(pythonioencoding);
1823 Py_XDECREF(bimod);
1824 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001825 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001826}
1827
1828
Victor Stinner10dc4842015-03-24 12:01:30 +01001829static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001830_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001831{
Victor Stinner10dc4842015-03-24 12:01:30 +01001832 fputc('\n', stderr);
1833 fflush(stderr);
1834
1835 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001836 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001837}
Victor Stinner791da1c2016-03-14 16:53:12 +01001838
1839/* Print the current exception (if an exception is set) with its traceback,
1840 or display the current Python stack.
1841
1842 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1843 called on catastrophic cases.
1844
1845 Return 1 if the traceback was displayed, 0 otherwise. */
1846
1847static int
1848_Py_FatalError_PrintExc(int fd)
1849{
1850 PyObject *ferr, *res;
1851 PyObject *exception, *v, *tb;
1852 int has_tb;
1853
1854 if (PyThreadState_GET() == NULL) {
1855 /* The GIL is released: trying to acquire it is likely to deadlock,
1856 just give up. */
1857 return 0;
1858 }
1859
1860 PyErr_Fetch(&exception, &v, &tb);
1861 if (exception == NULL) {
1862 /* No current exception */
1863 return 0;
1864 }
1865
1866 ferr = _PySys_GetObjectId(&PyId_stderr);
1867 if (ferr == NULL || ferr == Py_None) {
1868 /* sys.stderr is not set yet or set to None,
1869 no need to try to display the exception */
1870 return 0;
1871 }
1872
1873 PyErr_NormalizeException(&exception, &v, &tb);
1874 if (tb == NULL) {
1875 tb = Py_None;
1876 Py_INCREF(tb);
1877 }
1878 PyException_SetTraceback(v, tb);
1879 if (exception == NULL) {
1880 /* PyErr_NormalizeException() failed */
1881 return 0;
1882 }
1883
1884 has_tb = (tb != Py_None);
1885 PyErr_Display(exception, v, tb);
1886 Py_XDECREF(exception);
1887 Py_XDECREF(v);
1888 Py_XDECREF(tb);
1889
1890 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07001891 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01001892 if (res == NULL)
1893 PyErr_Clear();
1894 else
1895 Py_DECREF(res);
1896
1897 return has_tb;
1898}
1899
Nick Coghland6009512014-11-20 21:39:37 +10001900/* Print fatal error message and abort */
1901
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001902#ifdef MS_WINDOWS
1903static void
1904fatal_output_debug(const char *msg)
1905{
1906 /* buffer of 256 bytes allocated on the stack */
1907 WCHAR buffer[256 / sizeof(WCHAR)];
1908 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
1909 size_t msglen;
1910
1911 OutputDebugStringW(L"Fatal Python error: ");
1912
1913 msglen = strlen(msg);
1914 while (msglen) {
1915 size_t i;
1916
1917 if (buflen > msglen) {
1918 buflen = msglen;
1919 }
1920
1921 /* Convert the message to wchar_t. This uses a simple one-to-one
1922 conversion, assuming that the this error message actually uses
1923 ASCII only. If this ceases to be true, we will have to convert. */
1924 for (i=0; i < buflen; ++i) {
1925 buffer[i] = msg[i];
1926 }
1927 buffer[i] = L'\0';
1928 OutputDebugStringW(buffer);
1929
1930 msg += buflen;
1931 msglen -= buflen;
1932 }
1933 OutputDebugStringW(L"\n");
1934}
1935#endif
1936
Benjamin Petersoncef88b92017-11-25 13:02:55 -08001937static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001938fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10001939{
1940 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01001941 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01001942
1943 if (reentrant) {
1944 /* Py_FatalError() caused a second fatal error.
1945 Example: flush_std_files() raises a recursion error. */
1946 goto exit;
1947 }
1948 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001949
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001950 fprintf(stderr, "Fatal Python error: ");
1951 if (prefix) {
1952 fputs(prefix, stderr);
1953 fputs(": ", stderr);
1954 }
1955 if (msg) {
1956 fputs(msg, stderr);
1957 }
1958 else {
1959 fprintf(stderr, "<message not set>");
1960 }
1961 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001962 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01001963
Victor Stinnere0deff32015-03-24 13:46:18 +01001964 /* Print the exception (if an exception is set) with its traceback,
1965 * or display the current Python stack. */
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001966 if (!_Py_FatalError_PrintExc(fd)) {
Victor Stinner791da1c2016-03-14 16:53:12 +01001967 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001968 }
Victor Stinner10dc4842015-03-24 12:01:30 +01001969
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001970 /* The main purpose of faulthandler is to display the traceback.
1971 This function already did its best to display a traceback.
1972 Disable faulthandler to prevent writing a second traceback
1973 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01001974 _PyFaulthandler_Fini();
1975
Victor Stinner791da1c2016-03-14 16:53:12 +01001976 /* Check if the current Python thread hold the GIL */
1977 if (PyThreadState_GET() != NULL) {
1978 /* Flush sys.stdout and sys.stderr */
1979 flush_std_files();
1980 }
Victor Stinnere0deff32015-03-24 13:46:18 +01001981
Nick Coghland6009512014-11-20 21:39:37 +10001982#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001983 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01001984#endif /* MS_WINDOWS */
1985
1986exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001987 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01001988#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001989 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10001990#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001991 abort();
1992 }
1993 else {
1994 exit(status);
1995 }
1996}
1997
1998void
1999Py_FatalError(const char *msg)
2000{
2001 fatal_error(NULL, msg, -1);
2002}
2003
2004void
2005_Py_FatalInitError(_PyInitError err)
2006{
2007 /* On "user" error: exit with status 1.
2008 For all other errors, call abort(). */
2009 int status = err.user_err ? 1 : -1;
2010 fatal_error(err.prefix, err.msg, status);
Nick Coghland6009512014-11-20 21:39:37 +10002011}
2012
2013/* Clean up and exit */
2014
Victor Stinnerd7292b52016-06-17 12:29:00 +02002015# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002016
Nick Coghland6009512014-11-20 21:39:37 +10002017/* For the atexit module. */
2018void _Py_PyAtExit(void (*func)(void))
2019{
Antoine Pitroufc5db952017-12-13 02:29:07 +01002020 /* Guard against API misuse (see bpo-17852) */
2021 assert(_PyRuntime.pyexitfunc == NULL || _PyRuntime.pyexitfunc == func);
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002022 _PyRuntime.pyexitfunc = func;
Nick Coghland6009512014-11-20 21:39:37 +10002023}
2024
2025static void
2026call_py_exitfuncs(void)
2027{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002028 if (_PyRuntime.pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002029 return;
2030
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002031 (*_PyRuntime.pyexitfunc)();
Nick Coghland6009512014-11-20 21:39:37 +10002032 PyErr_Clear();
2033}
2034
2035/* Wait until threading._shutdown completes, provided
2036 the threading module was imported in the first place.
2037 The shutdown routine will wait until all non-daemon
2038 "threading" threads have completed. */
2039static void
2040wait_for_thread_shutdown(void)
2041{
Nick Coghland6009512014-11-20 21:39:37 +10002042 _Py_IDENTIFIER(_shutdown);
2043 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002044 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002045 if (threading == NULL) {
2046 /* threading not imported */
2047 PyErr_Clear();
2048 return;
2049 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002050 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002051 if (result == NULL) {
2052 PyErr_WriteUnraisable(threading);
2053 }
2054 else {
2055 Py_DECREF(result);
2056 }
2057 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002058}
2059
2060#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002061int Py_AtExit(void (*func)(void))
2062{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002063 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002064 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002065 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002066 return 0;
2067}
2068
2069static void
2070call_ll_exitfuncs(void)
2071{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002072 while (_PyRuntime.nexitfuncs > 0)
2073 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002074
2075 fflush(stdout);
2076 fflush(stderr);
2077}
2078
2079void
2080Py_Exit(int sts)
2081{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002082 if (Py_FinalizeEx() < 0) {
2083 sts = 120;
2084 }
Nick Coghland6009512014-11-20 21:39:37 +10002085
2086 exit(sts);
2087}
2088
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002089static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002090initsigs(void)
2091{
2092#ifdef SIGPIPE
2093 PyOS_setsig(SIGPIPE, SIG_IGN);
2094#endif
2095#ifdef SIGXFZ
2096 PyOS_setsig(SIGXFZ, SIG_IGN);
2097#endif
2098#ifdef SIGXFSZ
2099 PyOS_setsig(SIGXFSZ, SIG_IGN);
2100#endif
2101 PyOS_InitInterrupts(); /* May imply initsignal() */
2102 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002103 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002104 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002105 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002106}
2107
2108
2109/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2110 *
2111 * All of the code in this function must only use async-signal-safe functions,
2112 * listed at `man 7 signal` or
2113 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2114 */
2115void
2116_Py_RestoreSignals(void)
2117{
2118#ifdef SIGPIPE
2119 PyOS_setsig(SIGPIPE, SIG_DFL);
2120#endif
2121#ifdef SIGXFZ
2122 PyOS_setsig(SIGXFZ, SIG_DFL);
2123#endif
2124#ifdef SIGXFSZ
2125 PyOS_setsig(SIGXFSZ, SIG_DFL);
2126#endif
2127}
2128
2129
2130/*
2131 * The file descriptor fd is considered ``interactive'' if either
2132 * a) isatty(fd) is TRUE, or
2133 * b) the -i flag was given, and the filename associated with
2134 * the descriptor is NULL or "<stdin>" or "???".
2135 */
2136int
2137Py_FdIsInteractive(FILE *fp, const char *filename)
2138{
2139 if (isatty((int)fileno(fp)))
2140 return 1;
2141 if (!Py_InteractiveFlag)
2142 return 0;
2143 return (filename == NULL) ||
2144 (strcmp(filename, "<stdin>") == 0) ||
2145 (strcmp(filename, "???") == 0);
2146}
2147
2148
Nick Coghland6009512014-11-20 21:39:37 +10002149/* Wrappers around sigaction() or signal(). */
2150
2151PyOS_sighandler_t
2152PyOS_getsig(int sig)
2153{
2154#ifdef HAVE_SIGACTION
2155 struct sigaction context;
2156 if (sigaction(sig, NULL, &context) == -1)
2157 return SIG_ERR;
2158 return context.sa_handler;
2159#else
2160 PyOS_sighandler_t handler;
2161/* Special signal handling for the secure CRT in Visual Studio 2005 */
2162#if defined(_MSC_VER) && _MSC_VER >= 1400
2163 switch (sig) {
2164 /* Only these signals are valid */
2165 case SIGINT:
2166 case SIGILL:
2167 case SIGFPE:
2168 case SIGSEGV:
2169 case SIGTERM:
2170 case SIGBREAK:
2171 case SIGABRT:
2172 break;
2173 /* Don't call signal() with other values or it will assert */
2174 default:
2175 return SIG_ERR;
2176 }
2177#endif /* _MSC_VER && _MSC_VER >= 1400 */
2178 handler = signal(sig, SIG_IGN);
2179 if (handler != SIG_ERR)
2180 signal(sig, handler);
2181 return handler;
2182#endif
2183}
2184
2185/*
2186 * All of the code in this function must only use async-signal-safe functions,
2187 * listed at `man 7 signal` or
2188 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2189 */
2190PyOS_sighandler_t
2191PyOS_setsig(int sig, PyOS_sighandler_t handler)
2192{
2193#ifdef HAVE_SIGACTION
2194 /* Some code in Modules/signalmodule.c depends on sigaction() being
2195 * used here if HAVE_SIGACTION is defined. Fix that if this code
2196 * changes to invalidate that assumption.
2197 */
2198 struct sigaction context, ocontext;
2199 context.sa_handler = handler;
2200 sigemptyset(&context.sa_mask);
2201 context.sa_flags = 0;
2202 if (sigaction(sig, &context, &ocontext) == -1)
2203 return SIG_ERR;
2204 return ocontext.sa_handler;
2205#else
2206 PyOS_sighandler_t oldhandler;
2207 oldhandler = signal(sig, handler);
2208#ifdef HAVE_SIGINTERRUPT
2209 siginterrupt(sig, 1);
2210#endif
2211 return oldhandler;
2212#endif
2213}
2214
2215#ifdef __cplusplus
2216}
2217#endif