blob: 678fbb63cc86e30d25c08ffd68bb5f28610a82a4 [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 Stinner5d862462017-12-19 11:35:58 +0100740 if (_PyWarnings_Init() == NULL) {
Victor Stinner1f151112017-11-23 10:43:14 +0100741 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. */
Victor Stinner5d862462017-12-19 11:35:58 +0100850 if (interp->config.warnoptions != NULL &&
851 PyList_Size(interp->config.warnoptions) > 0)
852 {
Nick Coghland6009512014-11-20 21:39:37 +1000853 PyObject *warnings_module = PyImport_ImportModule("warnings");
854 if (warnings_module == NULL) {
855 fprintf(stderr, "'import warnings' failed; traceback:\n");
856 PyErr_Print();
857 }
858 Py_XDECREF(warnings_module);
859 }
860
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600861 _PyRuntime.initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700862
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800863 if (!Py_NoSiteFlag) {
864 err = initsite(); /* Module site */
865 if (_Py_INIT_FAILED(err)) {
866 return err;
867 }
868 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800869 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000870}
871
Eric Snowc7ec9982017-05-23 23:00:52 -0700872#undef _INIT_DEBUG_PRINT
873
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800874_PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700875_Py_InitializeEx_Private(int install_sigs, int install_importlib)
876{
877 _PyCoreConfig core_config = _PyCoreConfig_INIT;
Eric Snowc7ec9982017-05-23 23:00:52 -0700878 _PyMainInterpreterConfig config = _PyMainInterpreterConfig_INIT;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800879 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700880
Eric Snow1abcf672017-05-23 21:46:51 -0700881 core_config.ignore_environment = Py_IgnoreEnvironmentFlag;
882 core_config._disable_importlib = !install_importlib;
Eric Snowc7ec9982017-05-23 23:00:52 -0700883 config.install_signal_handlers = install_sigs;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800884
Victor Stinnerda273412017-12-15 01:46:02 +0100885 err = _PyCoreConfig_ReadEnv(&core_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800886 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100887 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800888 }
889
Victor Stinnerda273412017-12-15 01:46:02 +0100890 err = _Py_InitializeCore(&core_config);
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100891 if (_Py_INIT_FAILED(err)) {
892 goto done;
893 }
894
Victor Stinnerb5fd9ad2017-12-14 02:20:52 +0100895 err = _PyMainInterpreterConfig_Read(&config, &core_config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800896 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100897 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800898 }
899
900 err = _Py_InitializeMainInterpreter(&config);
901 if (_Py_INIT_FAILED(err)) {
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100902 goto done;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800903 }
904
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100905 err = _Py_INIT_OK();
906
907done:
Victor Stinnerb5fd9ad2017-12-14 02:20:52 +0100908 _PyCoreConfig_Clear(&core_config);
Victor Stinnerbc8ac6b2017-11-30 18:03:55 +0100909 _PyMainInterpreterConfig_Clear(&config);
910 return err;
Eric Snow1abcf672017-05-23 21:46:51 -0700911}
912
913
914void
Nick Coghland6009512014-11-20 21:39:37 +1000915Py_InitializeEx(int install_sigs)
916{
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800917 _PyInitError err = _Py_InitializeEx_Private(install_sigs, 1);
918 if (_Py_INIT_FAILED(err)) {
919 _Py_FatalInitError(err);
920 }
Nick Coghland6009512014-11-20 21:39:37 +1000921}
922
923void
924Py_Initialize(void)
925{
926 Py_InitializeEx(1);
927}
928
929
930#ifdef COUNT_ALLOCS
931extern void dump_counts(FILE*);
932#endif
933
934/* Flush stdout and stderr */
935
936static int
937file_is_closed(PyObject *fobj)
938{
939 int r;
940 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
941 if (tmp == NULL) {
942 PyErr_Clear();
943 return 0;
944 }
945 r = PyObject_IsTrue(tmp);
946 Py_DECREF(tmp);
947 if (r < 0)
948 PyErr_Clear();
949 return r > 0;
950}
951
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000952static int
Nick Coghland6009512014-11-20 21:39:37 +1000953flush_std_files(void)
954{
955 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
956 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
957 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000958 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +1000959
960 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -0700961 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000962 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +1000963 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000964 status = -1;
965 }
Nick Coghland6009512014-11-20 21:39:37 +1000966 else
967 Py_DECREF(tmp);
968 }
969
970 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -0700971 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000972 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +1000973 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000974 status = -1;
975 }
Nick Coghland6009512014-11-20 21:39:37 +1000976 else
977 Py_DECREF(tmp);
978 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000979
980 return status;
Nick Coghland6009512014-11-20 21:39:37 +1000981}
982
983/* Undo the effect of Py_Initialize().
984
985 Beware: if multiple interpreter and/or thread states exist, these
986 are not wiped out; only the current thread and interpreter state
987 are deleted. But since everything else is deleted, those other
988 interpreter and thread states should no longer be used.
989
990 (XXX We should do better, e.g. wipe out all interpreters and
991 threads.)
992
993 Locking: as above.
994
995*/
996
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000997int
998Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +1000999{
1000 PyInterpreterState *interp;
1001 PyThreadState *tstate;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001002 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001003
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001004 if (!_PyRuntime.initialized)
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001005 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001006
1007 wait_for_thread_shutdown();
1008
1009 /* The interpreter is still entirely intact at this point, and the
1010 * exit funcs may be relying on that. In particular, if some thread
1011 * or exit func is still waiting to do an import, the import machinery
1012 * expects Py_IsInitialized() to return true. So don't say the
1013 * interpreter is uninitialized until after the exit funcs have run.
1014 * Note that Threading.py uses an exit func to do a join on all the
1015 * threads created thru it, so this also protects pending imports in
1016 * the threads created via Threading.
1017 */
1018 call_py_exitfuncs();
1019
1020 /* Get current thread state and interpreter pointer */
1021 tstate = PyThreadState_GET();
1022 interp = tstate->interp;
1023
Victor Stinnerda273412017-12-15 01:46:02 +01001024 /* Copy the core config, PyInterpreterState_Delete() free
1025 the core config memory */
Victor Stinner5d862462017-12-19 11:35:58 +01001026#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001027 int show_ref_count = interp->core_config.show_ref_count;
Victor Stinner5d862462017-12-19 11:35:58 +01001028#endif
1029#ifdef Py_TRACE_REFS
Victor Stinnerda273412017-12-15 01:46:02 +01001030 int dump_refs = interp->core_config.dump_refs;
Victor Stinner5d862462017-12-19 11:35:58 +01001031#endif
1032#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001033 int malloc_stats = interp->core_config.malloc_stats;
Victor Stinner5d862462017-12-19 11:35:58 +01001034#endif
Victor Stinner6bf992a2017-12-06 17:26:10 +01001035
Nick Coghland6009512014-11-20 21:39:37 +10001036 /* Remaining threads (e.g. daemon threads) will automatically exit
1037 after taking the GIL (in PyEval_RestoreThread()). */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001038 _PyRuntime.finalizing = tstate;
1039 _PyRuntime.initialized = 0;
1040 _PyRuntime.core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001041
Victor Stinnere0deff32015-03-24 13:46:18 +01001042 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001043 if (flush_std_files() < 0) {
1044 status = -1;
1045 }
Nick Coghland6009512014-11-20 21:39:37 +10001046
1047 /* Disable signal handling */
1048 PyOS_FiniInterrupts();
1049
1050 /* Collect garbage. This may call finalizers; it's nice to call these
1051 * before all modules are destroyed.
1052 * XXX If a __del__ or weakref callback is triggered here, and tries to
1053 * XXX import a module, bad things can happen, because Python no
1054 * XXX longer believes it's initialized.
1055 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1056 * XXX is easy to provoke that way. I've also seen, e.g.,
1057 * XXX Exception exceptions.ImportError: 'No module named sha'
1058 * XXX in <function callback at 0x008F5718> ignored
1059 * XXX but I'm unclear on exactly how that one happens. In any case,
1060 * XXX I haven't seen a real-life report of either of these.
1061 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001062 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001063#ifdef COUNT_ALLOCS
1064 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1065 each collection might release some types from the type
1066 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001067 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001068 /* nothing */;
1069#endif
Eric Snowdae02762017-09-14 00:35:58 -07001070
Nick Coghland6009512014-11-20 21:39:37 +10001071 /* Destroy all modules */
1072 PyImport_Cleanup();
1073
Victor Stinnere0deff32015-03-24 13:46:18 +01001074 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001075 if (flush_std_files() < 0) {
1076 status = -1;
1077 }
Nick Coghland6009512014-11-20 21:39:37 +10001078
1079 /* Collect final garbage. This disposes of cycles created by
1080 * class definitions, for example.
1081 * XXX This is disabled because it caused too many problems. If
1082 * XXX a __del__ or weakref callback triggers here, Python code has
1083 * XXX a hard time running, because even the sys module has been
1084 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1085 * XXX One symptom is a sequence of information-free messages
1086 * XXX coming from threads (if a __del__ or callback is invoked,
1087 * XXX other threads can execute too, and any exception they encounter
1088 * XXX triggers a comedy of errors as subsystem after subsystem
1089 * XXX fails to find what it *expects* to find in sys to help report
1090 * XXX the exception and consequent unexpected failures). I've also
1091 * XXX seen segfaults then, after adding print statements to the
1092 * XXX Python code getting called.
1093 */
1094#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001095 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001096#endif
1097
1098 /* Disable tracemalloc after all Python objects have been destroyed,
1099 so it is possible to use tracemalloc in objects destructor. */
1100 _PyTraceMalloc_Fini();
1101
1102 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1103 _PyImport_Fini();
1104
1105 /* Cleanup typeobject.c's internal caches. */
1106 _PyType_Fini();
1107
1108 /* unload faulthandler module */
1109 _PyFaulthandler_Fini();
1110
1111 /* Debugging stuff */
1112#ifdef COUNT_ALLOCS
Serhiy Storchaka7e160ce2016-07-03 21:03:53 +03001113 dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001114#endif
1115 /* dump hash stats */
1116 _PyHash_Fini();
1117
Eric Snowdae02762017-09-14 00:35:58 -07001118#ifdef Py_REF_DEBUG
Victor Stinnerda273412017-12-15 01:46:02 +01001119 if (show_ref_count) {
Victor Stinner25420fe2017-11-20 18:12:22 -08001120 _PyDebug_PrintTotalRefs();
1121 }
Eric Snowdae02762017-09-14 00:35:58 -07001122#endif
Nick Coghland6009512014-11-20 21:39:37 +10001123
1124#ifdef Py_TRACE_REFS
1125 /* Display all objects still alive -- this can invoke arbitrary
1126 * __repr__ overrides, so requires a mostly-intact interpreter.
1127 * Alas, a lot of stuff may still be alive now that will be cleaned
1128 * up later.
1129 */
Victor Stinnerda273412017-12-15 01:46:02 +01001130 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001131 _Py_PrintReferences(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001132 }
Nick Coghland6009512014-11-20 21:39:37 +10001133#endif /* Py_TRACE_REFS */
1134
1135 /* Clear interpreter state and all thread states. */
1136 PyInterpreterState_Clear(interp);
1137
1138 /* Now we decref the exception classes. After this point nothing
1139 can raise an exception. That's okay, because each Fini() method
1140 below has been checked to make sure no exceptions are ever
1141 raised.
1142 */
1143
1144 _PyExc_Fini();
1145
1146 /* Sundry finalizers */
1147 PyMethod_Fini();
1148 PyFrame_Fini();
1149 PyCFunction_Fini();
1150 PyTuple_Fini();
1151 PyList_Fini();
1152 PySet_Fini();
1153 PyBytes_Fini();
1154 PyByteArray_Fini();
1155 PyLong_Fini();
1156 PyFloat_Fini();
1157 PyDict_Fini();
1158 PySlice_Fini();
1159 _PyGC_Fini();
Eric Snow6b4be192017-05-22 21:36:03 -07001160 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001161 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001162 PyAsyncGen_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001163
1164 /* Cleanup Unicode implementation */
1165 _PyUnicode_Fini();
1166
1167 /* reset file system default encoding */
1168 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
1169 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
1170 Py_FileSystemDefaultEncoding = NULL;
1171 }
1172
1173 /* XXX Still allocated:
1174 - various static ad-hoc pointers to interned strings
1175 - int and float free list blocks
1176 - whatever various modules and libraries allocate
1177 */
1178
1179 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1180
1181 /* Cleanup auto-thread-state */
Nick Coghland6009512014-11-20 21:39:37 +10001182 _PyGILState_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001183
1184 /* Delete current thread. After this, many C API calls become crashy. */
1185 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001186
Nick Coghland6009512014-11-20 21:39:37 +10001187 PyInterpreterState_Delete(interp);
1188
1189#ifdef Py_TRACE_REFS
1190 /* Display addresses (& refcnts) of all objects still alive.
1191 * An address can be used to find the repr of the object, printed
1192 * above by _Py_PrintReferences.
1193 */
Victor Stinnerda273412017-12-15 01:46:02 +01001194 if (dump_refs) {
Nick Coghland6009512014-11-20 21:39:37 +10001195 _Py_PrintReferenceAddresses(stderr);
Victor Stinner6bf992a2017-12-06 17:26:10 +01001196 }
Nick Coghland6009512014-11-20 21:39:37 +10001197#endif /* Py_TRACE_REFS */
Victor Stinner34be807c2016-03-14 12:04:26 +01001198#ifdef WITH_PYMALLOC
Victor Stinnerda273412017-12-15 01:46:02 +01001199 if (malloc_stats) {
Victor Stinner6bf992a2017-12-06 17:26:10 +01001200 _PyObject_DebugMallocStats(stderr);
Victor Stinner34be807c2016-03-14 12:04:26 +01001201 }
Nick Coghland6009512014-11-20 21:39:37 +10001202#endif
1203
1204 call_ll_exitfuncs();
Victor Stinner9316ee42017-11-25 03:17:57 +01001205
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001206 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001207 return status;
1208}
1209
1210void
1211Py_Finalize(void)
1212{
1213 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001214}
1215
1216/* Create and initialize a new interpreter and thread, and return the
1217 new thread. This requires that Py_Initialize() has been called
1218 first.
1219
1220 Unsuccessful initialization yields a NULL pointer. Note that *no*
1221 exception information is available even in this case -- the
1222 exception information is held in the thread, and there is no
1223 thread.
1224
1225 Locking: as above.
1226
1227*/
1228
Victor Stinnera7368ac2017-11-15 18:11:45 -08001229static _PyInitError
1230new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001231{
1232 PyInterpreterState *interp;
1233 PyThreadState *tstate, *save_tstate;
1234 PyObject *bimod, *sysmod;
Victor Stinner9316ee42017-11-25 03:17:57 +01001235 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001236
Victor Stinnera7368ac2017-11-15 18:11:45 -08001237 if (!_PyRuntime.initialized) {
1238 return _Py_INIT_ERR("Py_Initialize must be called first");
1239 }
Nick Coghland6009512014-11-20 21:39:37 +10001240
Victor Stinner8a1be612016-03-14 22:07:55 +01001241 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1242 interpreters: disable PyGILState_Check(). */
1243 _PyGILState_check_enabled = 0;
1244
Nick Coghland6009512014-11-20 21:39:37 +10001245 interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001246 if (interp == NULL) {
1247 *tstate_p = NULL;
1248 return _Py_INIT_OK();
1249 }
Nick Coghland6009512014-11-20 21:39:37 +10001250
1251 tstate = PyThreadState_New(interp);
1252 if (tstate == NULL) {
1253 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001254 *tstate_p = NULL;
1255 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001256 }
1257
1258 save_tstate = PyThreadState_Swap(tstate);
1259
Eric Snow1abcf672017-05-23 21:46:51 -07001260 /* Copy the current interpreter config into the new interpreter */
Victor Stinnerda273412017-12-15 01:46:02 +01001261 _PyCoreConfig *core_config;
1262 _PyMainInterpreterConfig *config;
Eric Snow1abcf672017-05-23 21:46:51 -07001263 if (save_tstate != NULL) {
Victor Stinnerda273412017-12-15 01:46:02 +01001264 core_config = &save_tstate->interp->core_config;
1265 config = &save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001266 } else {
1267 /* No current thread state, copy from the main interpreter */
1268 PyInterpreterState *main_interp = PyInterpreterState_Main();
Victor Stinnerda273412017-12-15 01:46:02 +01001269 core_config = &main_interp->core_config;
1270 config = &main_interp->config;
1271 }
1272
1273 if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) {
1274 return _Py_INIT_ERR("failed to copy core config");
1275 }
1276 if (_PyMainInterpreterConfig_Copy(&interp->config, config) < 0) {
1277 return _Py_INIT_ERR("failed to copy main interpreter config");
Eric Snow1abcf672017-05-23 21:46:51 -07001278 }
1279
Nick Coghland6009512014-11-20 21:39:37 +10001280 /* XXX The following is lax in error checking */
Eric Snowd393c1b2017-09-14 12:18:12 -06001281 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001282 if (modules == NULL) {
1283 return _Py_INIT_ERR("can't make modules dictionary");
1284 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001285 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001286
Eric Snowd393c1b2017-09-14 12:18:12 -06001287 sysmod = _PyImport_FindBuiltin("sys", modules);
1288 if (sysmod != NULL) {
1289 interp->sysdict = PyModule_GetDict(sysmod);
1290 if (interp->sysdict == NULL)
1291 goto handle_error;
1292 Py_INCREF(interp->sysdict);
1293 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinner41264f12017-12-15 02:05:29 +01001294 _PySys_EndInit(interp->sysdict, &interp->config);
Eric Snowd393c1b2017-09-14 12:18:12 -06001295 }
1296
1297 bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001298 if (bimod != NULL) {
1299 interp->builtins = PyModule_GetDict(bimod);
1300 if (interp->builtins == NULL)
1301 goto handle_error;
1302 Py_INCREF(interp->builtins);
1303 }
1304
1305 /* initialize builtin exceptions */
1306 _PyExc_Init(bimod);
1307
Nick Coghland6009512014-11-20 21:39:37 +10001308 if (bimod != NULL && sysmod != NULL) {
1309 PyObject *pstderr;
1310
Nick Coghland6009512014-11-20 21:39:37 +10001311 /* Set up a preliminary stderr printer until we have enough
1312 infrastructure for the io module in place. */
1313 pstderr = PyFile_NewStdPrinter(fileno(stderr));
Victor Stinnera7368ac2017-11-15 18:11:45 -08001314 if (pstderr == NULL) {
1315 return _Py_INIT_ERR("can't set preliminary stderr");
1316 }
Nick Coghland6009512014-11-20 21:39:37 +10001317 _PySys_SetObjectId(&PyId_stderr, pstderr);
1318 PySys_SetObject("__stderr__", pstderr);
1319 Py_DECREF(pstderr);
1320
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001321 err = _PyImportHooks_Init();
1322 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001323 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001324 }
Nick Coghland6009512014-11-20 21:39:37 +10001325
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001326 err = initimport(interp, sysmod);
1327 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001328 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001329 }
Nick Coghland6009512014-11-20 21:39:37 +10001330
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001331 err = initexternalimport(interp);
1332 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001333 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001334 }
Nick Coghland6009512014-11-20 21:39:37 +10001335
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001336 err = initfsencoding(interp);
1337 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001338 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001339 }
1340
Victor Stinner91106cd2017-12-13 12:29:09 +01001341 err = init_sys_streams(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001342 if (_Py_INIT_FAILED(err)) {
1343 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001344 }
1345
1346 err = add_main_module(interp);
1347 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001348 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001349 }
1350
1351 if (!Py_NoSiteFlag) {
1352 err = initsite();
1353 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001354 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001355 }
1356 }
Nick Coghland6009512014-11-20 21:39:37 +10001357 }
1358
Victor Stinnera7368ac2017-11-15 18:11:45 -08001359 if (PyErr_Occurred()) {
1360 goto handle_error;
1361 }
Nick Coghland6009512014-11-20 21:39:37 +10001362
Victor Stinnera7368ac2017-11-15 18:11:45 -08001363 *tstate_p = tstate;
1364 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001365
Nick Coghland6009512014-11-20 21:39:37 +10001366handle_error:
1367 /* Oops, it didn't work. Undo it all. */
1368
1369 PyErr_PrintEx(0);
1370 PyThreadState_Clear(tstate);
1371 PyThreadState_Swap(save_tstate);
1372 PyThreadState_Delete(tstate);
1373 PyInterpreterState_Delete(interp);
1374
Victor Stinnera7368ac2017-11-15 18:11:45 -08001375 *tstate_p = NULL;
1376 return _Py_INIT_OK();
1377}
1378
1379PyThreadState *
1380Py_NewInterpreter(void)
1381{
1382 PyThreadState *tstate;
1383 _PyInitError err = new_interpreter(&tstate);
1384 if (_Py_INIT_FAILED(err)) {
1385 _Py_FatalInitError(err);
1386 }
1387 return tstate;
1388
Nick Coghland6009512014-11-20 21:39:37 +10001389}
1390
1391/* Delete an interpreter and its last thread. This requires that the
1392 given thread state is current, that the thread has no remaining
1393 frames, and that it is its interpreter's only remaining thread.
1394 It is a fatal error to violate these constraints.
1395
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001396 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001397 everything, regardless.)
1398
1399 Locking: as above.
1400
1401*/
1402
1403void
1404Py_EndInterpreter(PyThreadState *tstate)
1405{
1406 PyInterpreterState *interp = tstate->interp;
1407
1408 if (tstate != PyThreadState_GET())
1409 Py_FatalError("Py_EndInterpreter: thread is not current");
1410 if (tstate->frame != NULL)
1411 Py_FatalError("Py_EndInterpreter: thread still has a frame");
1412
1413 wait_for_thread_shutdown();
1414
1415 if (tstate != interp->tstate_head || tstate->next != NULL)
1416 Py_FatalError("Py_EndInterpreter: not the last thread");
1417
1418 PyImport_Cleanup();
1419 PyInterpreterState_Clear(interp);
1420 PyThreadState_Swap(NULL);
1421 PyInterpreterState_Delete(interp);
1422}
1423
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001424/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001425
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001426static _PyInitError
1427add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001428{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001429 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001430 m = PyImport_AddModule("__main__");
1431 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001432 return _Py_INIT_ERR("can't create __main__ module");
1433
Nick Coghland6009512014-11-20 21:39:37 +10001434 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001435 ann_dict = PyDict_New();
1436 if ((ann_dict == NULL) ||
1437 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001438 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001439 }
1440 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001441
Nick Coghland6009512014-11-20 21:39:37 +10001442 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1443 PyObject *bimod = PyImport_ImportModule("builtins");
1444 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001445 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001446 }
1447 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001448 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001449 }
1450 Py_DECREF(bimod);
1451 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001452
Nick Coghland6009512014-11-20 21:39:37 +10001453 /* Main is a little special - imp.is_builtin("__main__") will return
1454 * False, but BuiltinImporter is still the most appropriate initial
1455 * setting for its __loader__ attribute. A more suitable value will
1456 * be set if __main__ gets further initialized later in the startup
1457 * process.
1458 */
1459 loader = PyDict_GetItemString(d, "__loader__");
1460 if (loader == NULL || loader == Py_None) {
1461 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1462 "BuiltinImporter");
1463 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001464 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001465 }
1466 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001467 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001468 }
1469 Py_DECREF(loader);
1470 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001471 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001472}
1473
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001474static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001475initfsencoding(PyInterpreterState *interp)
1476{
1477 PyObject *codec;
1478
Steve Dowercc16be82016-09-08 10:35:16 -07001479#ifdef MS_WINDOWS
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001480 if (Py_LegacyWindowsFSEncodingFlag) {
Steve Dowercc16be82016-09-08 10:35:16 -07001481 Py_FileSystemDefaultEncoding = "mbcs";
1482 Py_FileSystemDefaultEncodeErrors = "replace";
1483 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001484 else {
Steve Dowercc16be82016-09-08 10:35:16 -07001485 Py_FileSystemDefaultEncoding = "utf-8";
1486 Py_FileSystemDefaultEncodeErrors = "surrogatepass";
1487 }
1488#else
Victor Stinner91106cd2017-12-13 12:29:09 +01001489 if (Py_FileSystemDefaultEncoding == NULL &&
1490 interp->core_config.utf8_mode)
1491 {
1492 Py_FileSystemDefaultEncoding = "utf-8";
1493 Py_HasFileSystemDefaultEncoding = 1;
1494 }
1495 else if (Py_FileSystemDefaultEncoding == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001496 Py_FileSystemDefaultEncoding = get_locale_encoding();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001497 if (Py_FileSystemDefaultEncoding == NULL) {
1498 return _Py_INIT_ERR("Unable to get the locale encoding");
1499 }
Nick Coghland6009512014-11-20 21:39:37 +10001500
1501 Py_HasFileSystemDefaultEncoding = 0;
1502 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001503 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001504 }
Steve Dowercc16be82016-09-08 10:35:16 -07001505#endif
Nick Coghland6009512014-11-20 21:39:37 +10001506
1507 /* the encoding is mbcs, utf-8 or ascii */
1508 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
1509 if (!codec) {
1510 /* Such error can only occurs in critical situations: no more
1511 * memory, import a module of the standard library failed,
1512 * etc. */
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001513 return _Py_INIT_ERR("unable to load the file system codec");
Nick Coghland6009512014-11-20 21:39:37 +10001514 }
1515 Py_DECREF(codec);
1516 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001517 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001518}
1519
1520/* Import the site module (not into __main__ though) */
1521
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001522static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001523initsite(void)
1524{
1525 PyObject *m;
1526 m = PyImport_ImportModule("site");
1527 if (m == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001528 return _Py_INIT_USER_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001529 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001530 Py_DECREF(m);
1531 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001532}
1533
Victor Stinner874dbe82015-09-04 17:29:57 +02001534/* Check if a file descriptor is valid or not.
1535 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1536static int
1537is_valid_fd(int fd)
1538{
Victor Stinner1c4670e2017-05-04 00:45:56 +02001539#ifdef __APPLE__
1540 /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe
1541 and the other side of the pipe is closed, dup(1) succeed, whereas
1542 fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect
1543 such error. */
1544 struct stat st;
1545 return (fstat(fd, &st) == 0);
1546#else
Victor Stinner874dbe82015-09-04 17:29:57 +02001547 int fd2;
Steve Dower940f33a2016-09-08 11:21:54 -07001548 if (fd < 0)
Victor Stinner874dbe82015-09-04 17:29:57 +02001549 return 0;
1550 _Py_BEGIN_SUPPRESS_IPH
Victor Stinner449b2712015-09-29 13:59:50 +02001551 /* Prefer dup() over fstat(). fstat() can require input/output whereas
1552 dup() doesn't, there is a low risk of EMFILE/ENFILE at Python
1553 startup. */
Victor Stinner874dbe82015-09-04 17:29:57 +02001554 fd2 = dup(fd);
1555 if (fd2 >= 0)
1556 close(fd2);
1557 _Py_END_SUPPRESS_IPH
1558 return fd2 >= 0;
Victor Stinner1c4670e2017-05-04 00:45:56 +02001559#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001560}
1561
1562/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001563static PyObject*
1564create_stdio(PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001565 int fd, int write_mode, const char* name,
1566 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001567{
1568 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1569 const char* mode;
1570 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001571 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001572 int buffering, isatty;
1573 _Py_IDENTIFIER(open);
1574 _Py_IDENTIFIER(isatty);
1575 _Py_IDENTIFIER(TextIOWrapper);
1576 _Py_IDENTIFIER(mode);
1577
Victor Stinner874dbe82015-09-04 17:29:57 +02001578 if (!is_valid_fd(fd))
1579 Py_RETURN_NONE;
1580
Nick Coghland6009512014-11-20 21:39:37 +10001581 /* stdin is always opened in buffered mode, first because it shouldn't
1582 make a difference in common use cases, second because TextIOWrapper
1583 depends on the presence of a read1() method which only exists on
1584 buffered streams.
1585 */
1586 if (Py_UnbufferedStdioFlag && write_mode)
1587 buffering = 0;
1588 else
1589 buffering = -1;
1590 if (write_mode)
1591 mode = "wb";
1592 else
1593 mode = "rb";
1594 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1595 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001596 Py_None, Py_None, /* encoding, errors */
1597 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001598 if (buf == NULL)
1599 goto error;
1600
1601 if (buffering) {
1602 _Py_IDENTIFIER(raw);
1603 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1604 if (raw == NULL)
1605 goto error;
1606 }
1607 else {
1608 raw = buf;
1609 Py_INCREF(raw);
1610 }
1611
Steve Dower39294992016-08-30 21:22:36 -07001612#ifdef MS_WINDOWS
1613 /* Windows console IO is always UTF-8 encoded */
1614 if (PyWindowsConsoleIO_Check(raw))
1615 encoding = "utf-8";
1616#endif
1617
Nick Coghland6009512014-11-20 21:39:37 +10001618 text = PyUnicode_FromString(name);
1619 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1620 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001621 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001622 if (res == NULL)
1623 goto error;
1624 isatty = PyObject_IsTrue(res);
1625 Py_DECREF(res);
1626 if (isatty == -1)
1627 goto error;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001628 if (Py_UnbufferedStdioFlag)
1629 write_through = Py_True;
1630 else
1631 write_through = Py_False;
1632 if (isatty && !Py_UnbufferedStdioFlag)
Nick Coghland6009512014-11-20 21:39:37 +10001633 line_buffering = Py_True;
1634 else
1635 line_buffering = Py_False;
1636
1637 Py_CLEAR(raw);
1638 Py_CLEAR(text);
1639
1640#ifdef MS_WINDOWS
1641 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1642 newlines to "\n".
1643 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1644 newline = NULL;
1645#else
1646 /* sys.stdin: split lines at "\n".
1647 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1648 newline = "\n";
1649#endif
1650
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001651 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001652 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001653 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001654 Py_CLEAR(buf);
1655 if (stream == NULL)
1656 goto error;
1657
1658 if (write_mode)
1659 mode = "w";
1660 else
1661 mode = "r";
1662 text = PyUnicode_FromString(mode);
1663 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1664 goto error;
1665 Py_CLEAR(text);
1666 return stream;
1667
1668error:
1669 Py_XDECREF(buf);
1670 Py_XDECREF(stream);
1671 Py_XDECREF(text);
1672 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001673
Victor Stinner874dbe82015-09-04 17:29:57 +02001674 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1675 /* Issue #24891: the file descriptor was closed after the first
1676 is_valid_fd() check was called. Ignore the OSError and set the
1677 stream to None. */
1678 PyErr_Clear();
1679 Py_RETURN_NONE;
1680 }
1681 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001682}
1683
1684/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001685static _PyInitError
Victor Stinner91106cd2017-12-13 12:29:09 +01001686init_sys_streams(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001687{
1688 PyObject *iomod = NULL, *wrapper;
1689 PyObject *bimod = NULL;
1690 PyObject *m;
1691 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001692 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001693 PyObject * encoding_attr;
Serhiy Storchaka4ae06c52017-12-12 13:55:04 +02001694 char *pythonioencoding = NULL;
1695 const char *encoding, *errors;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001696 _PyInitError res = _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001697
1698 /* Hack to avoid a nasty recursion issue when Python is invoked
1699 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1700 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1701 goto error;
1702 }
1703 Py_DECREF(m);
1704
1705 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1706 goto error;
1707 }
1708 Py_DECREF(m);
1709
1710 if (!(bimod = PyImport_ImportModule("builtins"))) {
1711 goto error;
1712 }
1713
1714 if (!(iomod = PyImport_ImportModule("io"))) {
1715 goto error;
1716 }
1717 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1718 goto error;
1719 }
1720
1721 /* Set builtins.open */
1722 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1723 Py_DECREF(wrapper);
1724 goto error;
1725 }
1726 Py_DECREF(wrapper);
1727
1728 encoding = _Py_StandardStreamEncoding;
1729 errors = _Py_StandardStreamErrors;
1730 if (!encoding || !errors) {
Victor Stinner91106cd2017-12-13 12:29:09 +01001731 char *opt = Py_GETENV("PYTHONIOENCODING");
1732 if (opt && opt[0] != '\0') {
Nick Coghland6009512014-11-20 21:39:37 +10001733 char *err;
Victor Stinner91106cd2017-12-13 12:29:09 +01001734 pythonioencoding = _PyMem_Strdup(opt);
Nick Coghland6009512014-11-20 21:39:37 +10001735 if (pythonioencoding == NULL) {
1736 PyErr_NoMemory();
1737 goto error;
1738 }
1739 err = strchr(pythonioencoding, ':');
1740 if (err) {
1741 *err = '\0';
1742 err++;
Serhiy Storchakafc435112016-04-10 14:34:13 +03001743 if (*err && !errors) {
Nick Coghland6009512014-11-20 21:39:37 +10001744 errors = err;
1745 }
1746 }
1747 if (*pythonioencoding && !encoding) {
1748 encoding = pythonioencoding;
1749 }
1750 }
Victor Stinner91106cd2017-12-13 12:29:09 +01001751 else if (interp->core_config.utf8_mode) {
1752 encoding = "utf-8";
1753 errors = "surrogateescape";
1754 }
1755
1756 if (!errors && !pythonioencoding) {
Nick Coghlan6ea41862017-06-11 13:16:15 +10001757 /* Choose the default error handler based on the current locale */
1758 errors = get_default_standard_stream_error_handler();
Serhiy Storchakafc435112016-04-10 14:34:13 +03001759 }
Nick Coghland6009512014-11-20 21:39:37 +10001760 }
1761
1762 /* Set sys.stdin */
1763 fd = fileno(stdin);
1764 /* Under some conditions stdin, stdout and stderr may not be connected
1765 * and fileno() may point to an invalid file descriptor. For example
1766 * GUI apps don't have valid standard streams by default.
1767 */
Victor Stinner874dbe82015-09-04 17:29:57 +02001768 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1769 if (std == NULL)
1770 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001771 PySys_SetObject("__stdin__", std);
1772 _PySys_SetObjectId(&PyId_stdin, std);
1773 Py_DECREF(std);
1774
1775 /* Set sys.stdout */
1776 fd = fileno(stdout);
Victor Stinner874dbe82015-09-04 17:29:57 +02001777 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1778 if (std == NULL)
1779 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001780 PySys_SetObject("__stdout__", std);
1781 _PySys_SetObjectId(&PyId_stdout, std);
1782 Py_DECREF(std);
1783
1784#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1785 /* Set sys.stderr, replaces the preliminary stderr */
1786 fd = fileno(stderr);
Victor Stinner874dbe82015-09-04 17:29:57 +02001787 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1788 if (std == NULL)
1789 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001790
1791 /* Same as hack above, pre-import stderr's codec to avoid recursion
1792 when import.c tries to write to stderr in verbose mode. */
1793 encoding_attr = PyObject_GetAttrString(std, "encoding");
1794 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001795 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001796 if (std_encoding != NULL) {
1797 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1798 Py_XDECREF(codec_info);
1799 }
1800 Py_DECREF(encoding_attr);
1801 }
1802 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1803
1804 if (PySys_SetObject("__stderr__", std) < 0) {
1805 Py_DECREF(std);
1806 goto error;
1807 }
1808 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1809 Py_DECREF(std);
1810 goto error;
1811 }
1812 Py_DECREF(std);
1813#endif
1814
Victor Stinnera7368ac2017-11-15 18:11:45 -08001815 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001816
Victor Stinnera7368ac2017-11-15 18:11:45 -08001817error:
1818 res = _Py_INIT_ERR("can't initialize sys standard streams");
1819
1820done:
Nick Coghland6009512014-11-20 21:39:37 +10001821 /* We won't need them anymore. */
1822 if (_Py_StandardStreamEncoding) {
1823 PyMem_RawFree(_Py_StandardStreamEncoding);
1824 _Py_StandardStreamEncoding = NULL;
1825 }
1826 if (_Py_StandardStreamErrors) {
1827 PyMem_RawFree(_Py_StandardStreamErrors);
1828 _Py_StandardStreamErrors = NULL;
1829 }
1830 PyMem_Free(pythonioencoding);
1831 Py_XDECREF(bimod);
1832 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001833 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001834}
1835
1836
Victor Stinner10dc4842015-03-24 12:01:30 +01001837static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001838_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001839{
Victor Stinner10dc4842015-03-24 12:01:30 +01001840 fputc('\n', stderr);
1841 fflush(stderr);
1842
1843 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001844 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001845}
Victor Stinner791da1c2016-03-14 16:53:12 +01001846
1847/* Print the current exception (if an exception is set) with its traceback,
1848 or display the current Python stack.
1849
1850 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1851 called on catastrophic cases.
1852
1853 Return 1 if the traceback was displayed, 0 otherwise. */
1854
1855static int
1856_Py_FatalError_PrintExc(int fd)
1857{
1858 PyObject *ferr, *res;
1859 PyObject *exception, *v, *tb;
1860 int has_tb;
1861
1862 if (PyThreadState_GET() == NULL) {
1863 /* The GIL is released: trying to acquire it is likely to deadlock,
1864 just give up. */
1865 return 0;
1866 }
1867
1868 PyErr_Fetch(&exception, &v, &tb);
1869 if (exception == NULL) {
1870 /* No current exception */
1871 return 0;
1872 }
1873
1874 ferr = _PySys_GetObjectId(&PyId_stderr);
1875 if (ferr == NULL || ferr == Py_None) {
1876 /* sys.stderr is not set yet or set to None,
1877 no need to try to display the exception */
1878 return 0;
1879 }
1880
1881 PyErr_NormalizeException(&exception, &v, &tb);
1882 if (tb == NULL) {
1883 tb = Py_None;
1884 Py_INCREF(tb);
1885 }
1886 PyException_SetTraceback(v, tb);
1887 if (exception == NULL) {
1888 /* PyErr_NormalizeException() failed */
1889 return 0;
1890 }
1891
1892 has_tb = (tb != Py_None);
1893 PyErr_Display(exception, v, tb);
1894 Py_XDECREF(exception);
1895 Py_XDECREF(v);
1896 Py_XDECREF(tb);
1897
1898 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07001899 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01001900 if (res == NULL)
1901 PyErr_Clear();
1902 else
1903 Py_DECREF(res);
1904
1905 return has_tb;
1906}
1907
Nick Coghland6009512014-11-20 21:39:37 +10001908/* Print fatal error message and abort */
1909
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001910#ifdef MS_WINDOWS
1911static void
1912fatal_output_debug(const char *msg)
1913{
1914 /* buffer of 256 bytes allocated on the stack */
1915 WCHAR buffer[256 / sizeof(WCHAR)];
1916 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
1917 size_t msglen;
1918
1919 OutputDebugStringW(L"Fatal Python error: ");
1920
1921 msglen = strlen(msg);
1922 while (msglen) {
1923 size_t i;
1924
1925 if (buflen > msglen) {
1926 buflen = msglen;
1927 }
1928
1929 /* Convert the message to wchar_t. This uses a simple one-to-one
1930 conversion, assuming that the this error message actually uses
1931 ASCII only. If this ceases to be true, we will have to convert. */
1932 for (i=0; i < buflen; ++i) {
1933 buffer[i] = msg[i];
1934 }
1935 buffer[i] = L'\0';
1936 OutputDebugStringW(buffer);
1937
1938 msg += buflen;
1939 msglen -= buflen;
1940 }
1941 OutputDebugStringW(L"\n");
1942}
1943#endif
1944
Benjamin Petersoncef88b92017-11-25 13:02:55 -08001945static void _Py_NO_RETURN
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001946fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10001947{
1948 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01001949 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01001950
1951 if (reentrant) {
1952 /* Py_FatalError() caused a second fatal error.
1953 Example: flush_std_files() raises a recursion error. */
1954 goto exit;
1955 }
1956 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10001957
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001958 fprintf(stderr, "Fatal Python error: ");
1959 if (prefix) {
1960 fputs(prefix, stderr);
1961 fputs(": ", stderr);
1962 }
1963 if (msg) {
1964 fputs(msg, stderr);
1965 }
1966 else {
1967 fprintf(stderr, "<message not set>");
1968 }
1969 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001970 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01001971
Victor Stinnere0deff32015-03-24 13:46:18 +01001972 /* Print the exception (if an exception is set) with its traceback,
1973 * or display the current Python stack. */
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001974 if (!_Py_FatalError_PrintExc(fd)) {
Victor Stinner791da1c2016-03-14 16:53:12 +01001975 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001976 }
Victor Stinner10dc4842015-03-24 12:01:30 +01001977
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001978 /* The main purpose of faulthandler is to display the traceback.
1979 This function already did its best to display a traceback.
1980 Disable faulthandler to prevent writing a second traceback
1981 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01001982 _PyFaulthandler_Fini();
1983
Victor Stinner791da1c2016-03-14 16:53:12 +01001984 /* Check if the current Python thread hold the GIL */
1985 if (PyThreadState_GET() != NULL) {
1986 /* Flush sys.stdout and sys.stderr */
1987 flush_std_files();
1988 }
Victor Stinnere0deff32015-03-24 13:46:18 +01001989
Nick Coghland6009512014-11-20 21:39:37 +10001990#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001991 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01001992#endif /* MS_WINDOWS */
1993
1994exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001995 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01001996#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001997 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10001998#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001999 abort();
2000 }
2001 else {
2002 exit(status);
2003 }
2004}
2005
2006void
2007Py_FatalError(const char *msg)
2008{
2009 fatal_error(NULL, msg, -1);
2010}
2011
2012void
2013_Py_FatalInitError(_PyInitError err)
2014{
2015 /* On "user" error: exit with status 1.
2016 For all other errors, call abort(). */
2017 int status = err.user_err ? 1 : -1;
2018 fatal_error(err.prefix, err.msg, status);
Nick Coghland6009512014-11-20 21:39:37 +10002019}
2020
2021/* Clean up and exit */
2022
Victor Stinnerd7292b52016-06-17 12:29:00 +02002023# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002024
Nick Coghland6009512014-11-20 21:39:37 +10002025/* For the atexit module. */
2026void _Py_PyAtExit(void (*func)(void))
2027{
Antoine Pitroufc5db952017-12-13 02:29:07 +01002028 /* Guard against API misuse (see bpo-17852) */
2029 assert(_PyRuntime.pyexitfunc == NULL || _PyRuntime.pyexitfunc == func);
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002030 _PyRuntime.pyexitfunc = func;
Nick Coghland6009512014-11-20 21:39:37 +10002031}
2032
2033static void
2034call_py_exitfuncs(void)
2035{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002036 if (_PyRuntime.pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002037 return;
2038
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002039 (*_PyRuntime.pyexitfunc)();
Nick Coghland6009512014-11-20 21:39:37 +10002040 PyErr_Clear();
2041}
2042
2043/* Wait until threading._shutdown completes, provided
2044 the threading module was imported in the first place.
2045 The shutdown routine will wait until all non-daemon
2046 "threading" threads have completed. */
2047static void
2048wait_for_thread_shutdown(void)
2049{
Nick Coghland6009512014-11-20 21:39:37 +10002050 _Py_IDENTIFIER(_shutdown);
2051 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002052 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002053 if (threading == NULL) {
2054 /* threading not imported */
2055 PyErr_Clear();
2056 return;
2057 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002058 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002059 if (result == NULL) {
2060 PyErr_WriteUnraisable(threading);
2061 }
2062 else {
2063 Py_DECREF(result);
2064 }
2065 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002066}
2067
2068#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002069int Py_AtExit(void (*func)(void))
2070{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002071 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002072 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002073 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002074 return 0;
2075}
2076
2077static void
2078call_ll_exitfuncs(void)
2079{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002080 while (_PyRuntime.nexitfuncs > 0)
2081 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002082
2083 fflush(stdout);
2084 fflush(stderr);
2085}
2086
2087void
2088Py_Exit(int sts)
2089{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002090 if (Py_FinalizeEx() < 0) {
2091 sts = 120;
2092 }
Nick Coghland6009512014-11-20 21:39:37 +10002093
2094 exit(sts);
2095}
2096
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002097static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002098initsigs(void)
2099{
2100#ifdef SIGPIPE
2101 PyOS_setsig(SIGPIPE, SIG_IGN);
2102#endif
2103#ifdef SIGXFZ
2104 PyOS_setsig(SIGXFZ, SIG_IGN);
2105#endif
2106#ifdef SIGXFSZ
2107 PyOS_setsig(SIGXFSZ, SIG_IGN);
2108#endif
2109 PyOS_InitInterrupts(); /* May imply initsignal() */
2110 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002111 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002112 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002113 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002114}
2115
2116
2117/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2118 *
2119 * All of the code in this function must only use async-signal-safe functions,
2120 * listed at `man 7 signal` or
2121 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2122 */
2123void
2124_Py_RestoreSignals(void)
2125{
2126#ifdef SIGPIPE
2127 PyOS_setsig(SIGPIPE, SIG_DFL);
2128#endif
2129#ifdef SIGXFZ
2130 PyOS_setsig(SIGXFZ, SIG_DFL);
2131#endif
2132#ifdef SIGXFSZ
2133 PyOS_setsig(SIGXFSZ, SIG_DFL);
2134#endif
2135}
2136
2137
2138/*
2139 * The file descriptor fd is considered ``interactive'' if either
2140 * a) isatty(fd) is TRUE, or
2141 * b) the -i flag was given, and the filename associated with
2142 * the descriptor is NULL or "<stdin>" or "???".
2143 */
2144int
2145Py_FdIsInteractive(FILE *fp, const char *filename)
2146{
2147 if (isatty((int)fileno(fp)))
2148 return 1;
2149 if (!Py_InteractiveFlag)
2150 return 0;
2151 return (filename == NULL) ||
2152 (strcmp(filename, "<stdin>") == 0) ||
2153 (strcmp(filename, "???") == 0);
2154}
2155
2156
Nick Coghland6009512014-11-20 21:39:37 +10002157/* Wrappers around sigaction() or signal(). */
2158
2159PyOS_sighandler_t
2160PyOS_getsig(int sig)
2161{
2162#ifdef HAVE_SIGACTION
2163 struct sigaction context;
2164 if (sigaction(sig, NULL, &context) == -1)
2165 return SIG_ERR;
2166 return context.sa_handler;
2167#else
2168 PyOS_sighandler_t handler;
2169/* Special signal handling for the secure CRT in Visual Studio 2005 */
2170#if defined(_MSC_VER) && _MSC_VER >= 1400
2171 switch (sig) {
2172 /* Only these signals are valid */
2173 case SIGINT:
2174 case SIGILL:
2175 case SIGFPE:
2176 case SIGSEGV:
2177 case SIGTERM:
2178 case SIGBREAK:
2179 case SIGABRT:
2180 break;
2181 /* Don't call signal() with other values or it will assert */
2182 default:
2183 return SIG_ERR;
2184 }
2185#endif /* _MSC_VER && _MSC_VER >= 1400 */
2186 handler = signal(sig, SIG_IGN);
2187 if (handler != SIG_ERR)
2188 signal(sig, handler);
2189 return handler;
2190#endif
2191}
2192
2193/*
2194 * All of the code in this function must only use async-signal-safe functions,
2195 * listed at `man 7 signal` or
2196 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2197 */
2198PyOS_sighandler_t
2199PyOS_setsig(int sig, PyOS_sighandler_t handler)
2200{
2201#ifdef HAVE_SIGACTION
2202 /* Some code in Modules/signalmodule.c depends on sigaction() being
2203 * used here if HAVE_SIGACTION is defined. Fix that if this code
2204 * changes to invalidate that assumption.
2205 */
2206 struct sigaction context, ocontext;
2207 context.sa_handler = handler;
2208 sigemptyset(&context.sa_mask);
2209 context.sa_flags = 0;
2210 if (sigaction(sig, &context, &ocontext) == -1)
2211 return SIG_ERR;
2212 return ocontext.sa_handler;
2213#else
2214 PyOS_sighandler_t oldhandler;
2215 oldhandler = signal(sig, handler);
2216#ifdef HAVE_SIGINTERRUPT
2217 siginterrupt(sig, 1);
2218#endif
2219 return oldhandler;
2220#endif
2221}
2222
2223#ifdef __cplusplus
2224}
2225#endif