blob: b079990c40f2bd976224e76d179e2630d32aff8f [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 Stinnera7368ac2017-11-15 18:11:45 -080057static _PyInitError init_sys_streams(void);
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
388static int
389_legacy_locale_warnings_enabled(void)
390{
391 const char *coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
392 return (coerce_c_locale != NULL &&
393 strncmp(coerce_c_locale, "warn", 5) == 0);
394}
395
396static void
397_emit_stderr_warning_for_legacy_locale(void)
398{
399 if (_legacy_locale_warnings_enabled()) {
400 if (_Py_LegacyLocaleDetected()) {
401 fprintf(stderr, "%s", _C_LOCALE_WARNING);
402 }
403 }
404}
405
Nick Coghlan6ea41862017-06-11 13:16:15 +1000406typedef struct _CandidateLocale {
407 const char *locale_name; /* The locale to try as a coercion target */
408} _LocaleCoercionTarget;
409
410static _LocaleCoercionTarget _TARGET_LOCALES[] = {
411 {"C.UTF-8"},
412 {"C.utf8"},
Nick Coghlan18974c32017-06-30 00:48:14 +1000413 {"UTF-8"},
Nick Coghlan6ea41862017-06-11 13:16:15 +1000414 {NULL}
415};
416
417static char *
418get_default_standard_stream_error_handler(void)
419{
420 const char *ctype_loc = setlocale(LC_CTYPE, NULL);
421 if (ctype_loc != NULL) {
422 /* "surrogateescape" is the default in the legacy C locale */
423 if (strcmp(ctype_loc, "C") == 0) {
424 return "surrogateescape";
425 }
426
427#ifdef PY_COERCE_C_LOCALE
428 /* "surrogateescape" is the default in locale coercion target locales */
429 const _LocaleCoercionTarget *target = NULL;
430 for (target = _TARGET_LOCALES; target->locale_name; target++) {
431 if (strcmp(ctype_loc, target->locale_name) == 0) {
432 return "surrogateescape";
433 }
434 }
435#endif
436 }
437
438 /* Otherwise return NULL to request the typical default error handler */
439 return NULL;
440}
441
442#ifdef PY_COERCE_C_LOCALE
443static const char *_C_LOCALE_COERCION_WARNING =
444 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale "
445 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n";
446
447static void
448_coerce_default_locale_settings(const _LocaleCoercionTarget *target)
449{
450 const char *newloc = target->locale_name;
451
452 /* Reset locale back to currently configured defaults */
xdegaye1588be62017-11-12 12:45:59 +0100453 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000454
455 /* Set the relevant locale environment variable */
456 if (setenv("LC_CTYPE", newloc, 1)) {
457 fprintf(stderr,
458 "Error setting LC_CTYPE, skipping C locale coercion\n");
459 return;
460 }
Nick Coghlaneb817952017-06-18 12:29:42 +1000461 if (_legacy_locale_warnings_enabled()) {
462 fprintf(stderr, _C_LOCALE_COERCION_WARNING, newloc);
463 }
Nick Coghlan6ea41862017-06-11 13:16:15 +1000464
465 /* Reconfigure with the overridden environment variables */
xdegaye1588be62017-11-12 12:45:59 +0100466 _Py_SetLocaleFromEnv(LC_ALL);
Nick Coghlan6ea41862017-06-11 13:16:15 +1000467}
468#endif
469
470void
471_Py_CoerceLegacyLocale(void)
472{
473#ifdef PY_COERCE_C_LOCALE
474 /* We ignore the Python -E and -I flags here, as the CLI needs to sort out
475 * the locale settings *before* we try to do anything with the command
476 * line arguments. For cross-platform debugging purposes, we also need
477 * to give end users a way to force even scripts that are otherwise
478 * isolated from their environment to use the legacy ASCII-centric C
479 * locale.
480 *
481 * Ignoring -E and -I is safe from a security perspective, as we only use
482 * the setting to turn *off* the implicit locale coercion, and anyone with
483 * access to the process environment already has the ability to set
484 * `LC_ALL=C` to override the C level locale settings anyway.
485 */
486 const char *coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
487 if (coerce_c_locale == NULL || strncmp(coerce_c_locale, "0", 2) != 0) {
488 /* PYTHONCOERCECLOCALE is not set, or is set to something other than "0" */
489 const char *locale_override = getenv("LC_ALL");
490 if (locale_override == NULL || *locale_override == '\0') {
491 /* LC_ALL is also not set (or is set to an empty string) */
492 const _LocaleCoercionTarget *target = NULL;
493 for (target = _TARGET_LOCALES; target->locale_name; target++) {
494 const char *new_locale = setlocale(LC_CTYPE,
495 target->locale_name);
496 if (new_locale != NULL) {
xdegaye1588be62017-11-12 12:45:59 +0100497#if !defined(__APPLE__) && !defined(__ANDROID__) && \
498 defined(HAVE_LANGINFO_H) && defined(CODESET)
Nick Coghlan18974c32017-06-30 00:48:14 +1000499 /* Also ensure that nl_langinfo works in this locale */
500 char *codeset = nl_langinfo(CODESET);
501 if (!codeset || *codeset == '\0') {
502 /* CODESET is not set or empty, so skip coercion */
503 new_locale = NULL;
xdegaye1588be62017-11-12 12:45:59 +0100504 _Py_SetLocaleFromEnv(LC_CTYPE);
Nick Coghlan18974c32017-06-30 00:48:14 +1000505 continue;
506 }
507#endif
Nick Coghlan6ea41862017-06-11 13:16:15 +1000508 /* Successfully configured locale, so make it the default */
509 _coerce_default_locale_settings(target);
510 return;
511 }
512 }
513 }
514 }
515 /* No C locale warning here, as Py_Initialize will emit one later */
516#endif
517}
518
xdegaye1588be62017-11-12 12:45:59 +0100519/* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to
520 * isolate the idiosyncrasies of different libc implementations. It reads the
521 * appropriate environment variable and uses its value to select the locale for
522 * 'category'. */
523char *
524_Py_SetLocaleFromEnv(int category)
525{
526#ifdef __ANDROID__
527 const char *locale;
528 const char **pvar;
529#ifdef PY_COERCE_C_LOCALE
530 const char *coerce_c_locale;
531#endif
532 const char *utf8_locale = "C.UTF-8";
533 const char *env_var_set[] = {
534 "LC_ALL",
535 "LC_CTYPE",
536 "LANG",
537 NULL,
538 };
539
540 /* Android setlocale(category, "") doesn't check the environment variables
541 * and incorrectly sets the "C" locale at API 24 and older APIs. We only
542 * check the environment variables listed in env_var_set. */
543 for (pvar=env_var_set; *pvar; pvar++) {
544 locale = getenv(*pvar);
545 if (locale != NULL && *locale != '\0') {
546 if (strcmp(locale, utf8_locale) == 0 ||
547 strcmp(locale, "en_US.UTF-8") == 0) {
548 return setlocale(category, utf8_locale);
549 }
550 return setlocale(category, "C");
551 }
552 }
553
554 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of
555 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string.
556 * Quote from POSIX section "8.2 Internationalization Variables":
557 * "4. If the LANG environment variable is not set or is set to the empty
558 * string, the implementation-defined default locale shall be used." */
559
560#ifdef PY_COERCE_C_LOCALE
561 coerce_c_locale = getenv("PYTHONCOERCECLOCALE");
562 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) {
563 /* Some other ported code may check the environment variables (e.g. in
564 * extension modules), so we make sure that they match the locale
565 * configuration */
566 if (setenv("LC_CTYPE", utf8_locale, 1)) {
567 fprintf(stderr, "Warning: failed setting the LC_CTYPE "
568 "environment variable to %s\n", utf8_locale);
569 }
570 }
571#endif
572 return setlocale(category, utf8_locale);
573#else /* __ANDROID__ */
574 return setlocale(category, "");
575#endif /* __ANDROID__ */
576}
577
Nick Coghlan6ea41862017-06-11 13:16:15 +1000578
Eric Snow1abcf672017-05-23 21:46:51 -0700579/* Global initializations. Can be undone by Py_Finalize(). Don't
580 call this twice without an intervening Py_Finalize() call.
581
582 Every call to Py_InitializeCore, Py_Initialize or Py_InitializeEx
583 must have a corresponding call to Py_Finalize.
584
585 Locking: you must hold the interpreter lock while calling these APIs.
586 (If the lock has not yet been initialized, that's equivalent to
587 having the lock, but you cannot use multiple threads.)
588
589*/
590
591/* Begin interpreter initialization
592 *
593 * On return, the first thread and interpreter state have been created,
594 * but the compiler, signal handling, multithreading and
595 * multiple interpreter support, and codec infrastructure are not yet
596 * available.
597 *
598 * The import system will support builtin and frozen modules only.
599 * The only supported io is writing to sys.stderr
600 *
601 * If any operation invoked by this function fails, a fatal error is
602 * issued and the function does not return.
603 *
604 * Any code invoked from this function should *not* assume it has access
605 * to the Python C API (unless the API is explicitly listed as being
606 * safe to call without calling Py_Initialize first)
607 */
608
Stéphane Wirtelccfdb602017-07-25 14:32:08 +0200609/* TODO: Progressively move functionality from Py_BeginInitialization to
Eric Snow1abcf672017-05-23 21:46:51 -0700610 * Py_ReadConfig and Py_EndInitialization
611 */
612
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800613_PyInitError
614_Py_InitializeCore(const _PyCoreConfig *config)
Nick Coghland6009512014-11-20 21:39:37 +1000615{
616 PyInterpreterState *interp;
617 PyThreadState *tstate;
618 PyObject *bimod, *sysmod, *pstderr;
Eric Snow1abcf672017-05-23 21:46:51 -0700619 _PyCoreConfig core_config = _PyCoreConfig_INIT;
Eric Snowc7ec9982017-05-23 23:00:52 -0700620 _PyMainInterpreterConfig preinit_config = _PyMainInterpreterConfig_INIT;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800621 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +1000622
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800623 err = _PyRuntime_Initialize();
624 if (_Py_INIT_FAILED(err)) {
625 return err;
626 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600627
Eric Snow1abcf672017-05-23 21:46:51 -0700628 if (config != NULL) {
629 core_config = *config;
630 }
631
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800632 if (_PyMem_SetupAllocators(core_config.allocator) < 0) {
633 return _Py_INIT_ERR("Unknown PYTHONMALLOC allocator");
634 }
635
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600636 if (_PyRuntime.initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800637 return _Py_INIT_ERR("main interpreter already initialized");
Eric Snow1abcf672017-05-23 21:46:51 -0700638 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600639 if (_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800640 return _Py_INIT_ERR("runtime core already initialized");
Eric Snow1abcf672017-05-23 21:46:51 -0700641 }
642
643 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon
644 * threads behave a little more gracefully at interpreter shutdown.
645 * We clobber it here so the new interpreter can start with a clean
646 * slate.
647 *
648 * However, this may still lead to misbehaviour if there are daemon
649 * threads still hanging around from a previous Py_Initialize/Finalize
650 * pair :(
651 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600652 _PyRuntime.finalizing = NULL;
653
Nick Coghlan6ea41862017-06-11 13:16:15 +1000654#ifndef MS_WINDOWS
Nick Coghland6009512014-11-20 21:39:37 +1000655 /* Set up the LC_CTYPE locale, so we can obtain
656 the locale's charset without having to switch
657 locales. */
xdegaye1588be62017-11-12 12:45:59 +0100658 _Py_SetLocaleFromEnv(LC_CTYPE);
Nick Coghlaneb817952017-06-18 12:29:42 +1000659 _emit_stderr_warning_for_legacy_locale();
Nick Coghlan6ea41862017-06-11 13:16:15 +1000660#endif
Nick Coghland6009512014-11-20 21:39:37 +1000661
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800662 err = _Py_HashRandomization_Init(&core_config);
663 if (_Py_INIT_FAILED(err)) {
664 return err;
665 }
666
Eric Snow1abcf672017-05-23 21:46:51 -0700667 if (!core_config.use_hash_seed || core_config.hash_seed) {
668 /* Random or non-zero hash seed */
669 Py_HashRandomizationFlag = 1;
670 }
Nick Coghland6009512014-11-20 21:39:37 +1000671
Victor Stinnera7368ac2017-11-15 18:11:45 -0800672 err = _PyInterpreterState_Enable(&_PyRuntime);
673 if (_Py_INIT_FAILED(err)) {
674 return err;
675 }
676
Nick Coghland6009512014-11-20 21:39:37 +1000677 interp = PyInterpreterState_New();
678 if (interp == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800679 return _Py_INIT_ERR("can't make main interpreter");
Eric Snow1abcf672017-05-23 21:46:51 -0700680 interp->core_config = core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -0700681 interp->config = preinit_config;
Nick Coghland6009512014-11-20 21:39:37 +1000682
683 tstate = PyThreadState_New(interp);
684 if (tstate == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800685 return _Py_INIT_ERR("can't make first thread");
Nick Coghland6009512014-11-20 21:39:37 +1000686 (void) PyThreadState_Swap(tstate);
687
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000688 /* We can't call _PyEval_FiniThreads() in Py_FinalizeEx because
Nick Coghland6009512014-11-20 21:39:37 +1000689 destroying the GIL might fail when it is being referenced from
690 another running thread (see issue #9901).
691 Instead we destroy the previously created GIL here, which ensures
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000692 that we can call Py_Initialize / Py_FinalizeEx multiple times. */
Nick Coghland6009512014-11-20 21:39:37 +1000693 _PyEval_FiniThreads();
Nick Coghland6009512014-11-20 21:39:37 +1000694 /* Auto-thread-state API */
695 _PyGILState_Init(interp, tstate);
Nick Coghland6009512014-11-20 21:39:37 +1000696
697 _Py_ReadyTypes();
698
699 if (!_PyFrame_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800700 return _Py_INIT_ERR("can't init frames");
Nick Coghland6009512014-11-20 21:39:37 +1000701
702 if (!_PyLong_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800703 return _Py_INIT_ERR("can't init longs");
Nick Coghland6009512014-11-20 21:39:37 +1000704
705 if (!PyByteArray_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800706 return _Py_INIT_ERR("can't init bytearray");
Nick Coghland6009512014-11-20 21:39:37 +1000707
708 if (!_PyFloat_Init())
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800709 return _Py_INIT_ERR("can't init float");
Nick Coghland6009512014-11-20 21:39:37 +1000710
Eric Snowd393c1b2017-09-14 12:18:12 -0600711 PyObject *modules = PyDict_New();
712 if (modules == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800713 return _Py_INIT_ERR("can't make modules dictionary");
Eric Snowd393c1b2017-09-14 12:18:12 -0600714 interp->modules = modules;
715
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800716 err = _PySys_BeginInit(&sysmod);
717 if (_Py_INIT_FAILED(err)) {
718 return err;
719 }
720
Eric Snowd393c1b2017-09-14 12:18:12 -0600721 interp->sysdict = PyModule_GetDict(sysmod);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800722 if (interp->sysdict == NULL) {
723 return _Py_INIT_ERR("can't initialize sys dict");
724 }
725
Eric Snowd393c1b2017-09-14 12:18:12 -0600726 Py_INCREF(interp->sysdict);
727 PyDict_SetItemString(interp->sysdict, "modules", modules);
728 _PyImport_FixupBuiltin(sysmod, "sys", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000729
730 /* Init Unicode implementation; relies on the codec registry */
731 if (_PyUnicode_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800732 return _Py_INIT_ERR("can't initialize unicode");
Eric Snow1abcf672017-05-23 21:46:51 -0700733
Nick Coghland6009512014-11-20 21:39:37 +1000734 if (_PyStructSequence_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800735 return _Py_INIT_ERR("can't initialize structseq");
Nick Coghland6009512014-11-20 21:39:37 +1000736
737 bimod = _PyBuiltin_Init();
738 if (bimod == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800739 return _Py_INIT_ERR("can't initialize builtins modules");
Eric Snowd393c1b2017-09-14 12:18:12 -0600740 _PyImport_FixupBuiltin(bimod, "builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +1000741 interp->builtins = PyModule_GetDict(bimod);
742 if (interp->builtins == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800743 return _Py_INIT_ERR("can't initialize builtins dict");
Nick Coghland6009512014-11-20 21:39:37 +1000744 Py_INCREF(interp->builtins);
745
746 /* initialize builtin exceptions */
747 _PyExc_Init(bimod);
748
Nick Coghland6009512014-11-20 21:39:37 +1000749 /* Set up a preliminary stderr printer until we have enough
750 infrastructure for the io module in place. */
751 pstderr = PyFile_NewStdPrinter(fileno(stderr));
752 if (pstderr == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800753 return _Py_INIT_ERR("can't set preliminary stderr");
Nick Coghland6009512014-11-20 21:39:37 +1000754 _PySys_SetObjectId(&PyId_stderr, pstderr);
755 PySys_SetObject("__stderr__", pstderr);
756 Py_DECREF(pstderr);
757
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800758 err = _PyImport_Init();
759 if (_Py_INIT_FAILED(err)) {
760 return err;
761 }
Nick Coghland6009512014-11-20 21:39:37 +1000762
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800763 err = _PyImportHooks_Init();
764 if (_Py_INIT_FAILED(err)) {
765 return err;
766 }
Nick Coghland6009512014-11-20 21:39:37 +1000767
768 /* Initialize _warnings. */
Victor Stinner1f151112017-11-23 10:43:14 +0100769 if (_PyWarnings_InitWithConfig(&interp->core_config) == NULL) {
770 return _Py_INIT_ERR("can't initialize warnings");
771 }
Nick Coghland6009512014-11-20 21:39:37 +1000772
Eric Snow1abcf672017-05-23 21:46:51 -0700773 /* This call sets up builtin and frozen import support */
774 if (!interp->core_config._disable_importlib) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800775 err = initimport(interp, sysmod);
776 if (_Py_INIT_FAILED(err)) {
777 return err;
778 }
Eric Snow1abcf672017-05-23 21:46:51 -0700779 }
780
781 /* Only when we get here is the runtime core fully initialized */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600782 _PyRuntime.core_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800783 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700784}
785
Eric Snowc7ec9982017-05-23 23:00:52 -0700786/* Read configuration settings from standard locations
787 *
788 * This function doesn't make any changes to the interpreter state - it
789 * merely populates any missing configuration settings. This allows an
790 * embedding application to completely override a config option by
791 * setting it before calling this function, or else modify the default
792 * setting before passing the fully populated config to Py_EndInitialization.
793 *
794 * More advanced selective initialization tricks are possible by calling
795 * this function multiple times with various preconfigured settings.
796 */
797
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800798_PyInitError
799_Py_ReadMainInterpreterConfig(_PyMainInterpreterConfig *config)
Eric Snowc7ec9982017-05-23 23:00:52 -0700800{
801 /* Signal handlers are installed by default */
802 if (config->install_signal_handlers < 0) {
803 config->install_signal_handlers = 1;
804 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800805 return _Py_INIT_OK();
Eric Snowc7ec9982017-05-23 23:00:52 -0700806}
807
808/* Update interpreter state based on supplied configuration settings
809 *
810 * After calling this function, most of the restrictions on the interpreter
811 * are lifted. The only remaining incomplete settings are those related
812 * to the main module (sys.argv[0], __main__ metadata)
813 *
814 * Calling this when the interpreter is not initializing, is already
815 * initialized or without a valid current thread state is a fatal error.
816 * Other errors should be reported as normal Python exceptions with a
817 * non-zero return code.
818 */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800819_PyInitError
820_Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -0700821{
822 PyInterpreterState *interp;
823 PyThreadState *tstate;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800824 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700825
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600826 if (!_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800827 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700828 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600829 if (_PyRuntime.initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800830 return _Py_INIT_ERR("main interpreter already initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700831 }
832
Eric Snow1abcf672017-05-23 21:46:51 -0700833 /* Get current thread state and interpreter pointer */
834 tstate = PyThreadState_GET();
835 if (!tstate)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800836 return _Py_INIT_ERR("failed to read thread state");
Eric Snow1abcf672017-05-23 21:46:51 -0700837 interp = tstate->interp;
838 if (!interp)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800839 return _Py_INIT_ERR("failed to get interpreter");
Eric Snow1abcf672017-05-23 21:46:51 -0700840
841 /* Now finish configuring the main interpreter */
Eric Snowc7ec9982017-05-23 23:00:52 -0700842 interp->config = *config;
843
Victor Stinnerd4341102017-11-23 00:12:09 +0100844 /* GetPath may initialize state that _PySys_EndInit locks
845 in, and so has to be called first. */
846 /* TODO: Call Py_GetPath() in Py_ReadConfig, rather than here */
Victor Stinnere32e79f2017-11-23 01:49:45 +0100847 wchar_t *sys_path = _Py_GetPathWithConfig(&interp->config);
Victor Stinnerd4341102017-11-23 00:12:09 +0100848
Eric Snow1abcf672017-05-23 21:46:51 -0700849 if (interp->core_config._disable_importlib) {
850 /* Special mode for freeze_importlib: run with no import system
851 *
852 * This means anything which needs support from extension modules
853 * or pure Python code in the standard library won't work.
854 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600855 _PyRuntime.initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800856 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700857 }
858 /* TODO: Report exceptions rather than fatal errors below here */
Nick Coghland6009512014-11-20 21:39:37 +1000859
Victor Stinner13019fd2015-04-03 13:10:54 +0200860 if (_PyTime_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800861 return _Py_INIT_ERR("can't initialize time");
Victor Stinner13019fd2015-04-03 13:10:54 +0200862
Eric Snow1abcf672017-05-23 21:46:51 -0700863 /* Finish setting up the sys module and import system */
Victor Stinnerd4341102017-11-23 00:12:09 +0100864 PySys_SetPath(sys_path);
Eric Snow1abcf672017-05-23 21:46:51 -0700865 if (_PySys_EndInit(interp->sysdict) < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800866 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnera7368ac2017-11-15 18:11:45 -0800867
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800868 err = initexternalimport(interp);
869 if (_Py_INIT_FAILED(err)) {
870 return err;
871 }
Nick Coghland6009512014-11-20 21:39:37 +1000872
873 /* initialize the faulthandler module */
Victor Stinnera7368ac2017-11-15 18:11:45 -0800874 err = _PyFaulthandler_Init(interp->core_config.faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800875 if (_Py_INIT_FAILED(err)) {
876 return err;
877 }
Nick Coghland6009512014-11-20 21:39:37 +1000878
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800879 err = initfsencoding(interp);
880 if (_Py_INIT_FAILED(err)) {
881 return err;
882 }
Nick Coghland6009512014-11-20 21:39:37 +1000883
Victor Stinner1f151112017-11-23 10:43:14 +0100884 if (interp->config.install_signal_handlers) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800885 err = initsigs(); /* Signal handling stuff, including initintr() */
886 if (_Py_INIT_FAILED(err)) {
887 return err;
888 }
889 }
Nick Coghland6009512014-11-20 21:39:37 +1000890
Victor Stinnera7368ac2017-11-15 18:11:45 -0800891 if (_PyTraceMalloc_Init(interp->core_config.tracemalloc) < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800892 return _Py_INIT_ERR("can't initialize tracemalloc");
Nick Coghland6009512014-11-20 21:39:37 +1000893
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800894 err = add_main_module(interp);
895 if (_Py_INIT_FAILED(err)) {
896 return err;
897 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800898
899 err = init_sys_streams();
900 if (_Py_INIT_FAILED(err)) {
901 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800902 }
Nick Coghland6009512014-11-20 21:39:37 +1000903
904 /* Initialize warnings. */
905 if (PySys_HasWarnOptions()) {
906 PyObject *warnings_module = PyImport_ImportModule("warnings");
907 if (warnings_module == NULL) {
908 fprintf(stderr, "'import warnings' failed; traceback:\n");
909 PyErr_Print();
910 }
911 Py_XDECREF(warnings_module);
912 }
913
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600914 _PyRuntime.initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700915
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800916 if (!Py_NoSiteFlag) {
917 err = initsite(); /* Module site */
918 if (_Py_INIT_FAILED(err)) {
919 return err;
920 }
921 }
Eric Snow1abcf672017-05-23 21:46:51 -0700922
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800923 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000924}
925
Eric Snowc7ec9982017-05-23 23:00:52 -0700926#undef _INIT_DEBUG_PRINT
927
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800928_PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700929_Py_InitializeEx_Private(int install_sigs, int install_importlib)
930{
931 _PyCoreConfig core_config = _PyCoreConfig_INIT;
Eric Snowc7ec9982017-05-23 23:00:52 -0700932 _PyMainInterpreterConfig config = _PyMainInterpreterConfig_INIT;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800933 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700934
935 /* TODO: Moar config options! */
936 core_config.ignore_environment = Py_IgnoreEnvironmentFlag;
937 core_config._disable_importlib = !install_importlib;
Eric Snowc7ec9982017-05-23 23:00:52 -0700938 config.install_signal_handlers = install_sigs;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800939
940 err = _Py_InitializeCore(&core_config);
941 if (_Py_INIT_FAILED(err)) {
942 return err;
943 }
944
Eric Snowc7ec9982017-05-23 23:00:52 -0700945 /* TODO: Print any exceptions raised by these operations */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800946 err = _Py_ReadMainInterpreterConfig(&config);
947 if (_Py_INIT_FAILED(err)) {
948 return err;
949 }
950
951 err = _Py_InitializeMainInterpreter(&config);
952 if (_Py_INIT_FAILED(err)) {
953 return err;
954 }
955
956 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700957}
958
959
960void
Nick Coghland6009512014-11-20 21:39:37 +1000961Py_InitializeEx(int install_sigs)
962{
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800963 _PyInitError err = _Py_InitializeEx_Private(install_sigs, 1);
964 if (_Py_INIT_FAILED(err)) {
965 _Py_FatalInitError(err);
966 }
Nick Coghland6009512014-11-20 21:39:37 +1000967}
968
969void
970Py_Initialize(void)
971{
972 Py_InitializeEx(1);
973}
974
975
976#ifdef COUNT_ALLOCS
977extern void dump_counts(FILE*);
978#endif
979
980/* Flush stdout and stderr */
981
982static int
983file_is_closed(PyObject *fobj)
984{
985 int r;
986 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
987 if (tmp == NULL) {
988 PyErr_Clear();
989 return 0;
990 }
991 r = PyObject_IsTrue(tmp);
992 Py_DECREF(tmp);
993 if (r < 0)
994 PyErr_Clear();
995 return r > 0;
996}
997
Martin Panterb4ce1fc2015-11-30 03:18:29 +0000998static int
Nick Coghland6009512014-11-20 21:39:37 +1000999flush_std_files(void)
1000{
1001 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1002 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1003 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001004 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001005
1006 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001007 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001008 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001009 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001010 status = -1;
1011 }
Nick Coghland6009512014-11-20 21:39:37 +10001012 else
1013 Py_DECREF(tmp);
1014 }
1015
1016 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001017 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001018 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001019 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001020 status = -1;
1021 }
Nick Coghland6009512014-11-20 21:39:37 +10001022 else
1023 Py_DECREF(tmp);
1024 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001025
1026 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001027}
1028
1029/* Undo the effect of Py_Initialize().
1030
1031 Beware: if multiple interpreter and/or thread states exist, these
1032 are not wiped out; only the current thread and interpreter state
1033 are deleted. But since everything else is deleted, those other
1034 interpreter and thread states should no longer be used.
1035
1036 (XXX We should do better, e.g. wipe out all interpreters and
1037 threads.)
1038
1039 Locking: as above.
1040
1041*/
1042
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001043int
1044Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001045{
1046 PyInterpreterState *interp;
1047 PyThreadState *tstate;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001048 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001049
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001050 if (!_PyRuntime.initialized)
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001051 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001052
1053 wait_for_thread_shutdown();
1054
1055 /* The interpreter is still entirely intact at this point, and the
1056 * exit funcs may be relying on that. In particular, if some thread
1057 * or exit func is still waiting to do an import, the import machinery
1058 * expects Py_IsInitialized() to return true. So don't say the
1059 * interpreter is uninitialized until after the exit funcs have run.
1060 * Note that Threading.py uses an exit func to do a join on all the
1061 * threads created thru it, so this also protects pending imports in
1062 * the threads created via Threading.
1063 */
1064 call_py_exitfuncs();
1065
1066 /* Get current thread state and interpreter pointer */
1067 tstate = PyThreadState_GET();
1068 interp = tstate->interp;
1069
1070 /* Remaining threads (e.g. daemon threads) will automatically exit
1071 after taking the GIL (in PyEval_RestoreThread()). */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001072 _PyRuntime.finalizing = tstate;
1073 _PyRuntime.initialized = 0;
1074 _PyRuntime.core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001075
Victor Stinnere0deff32015-03-24 13:46:18 +01001076 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001077 if (flush_std_files() < 0) {
1078 status = -1;
1079 }
Nick Coghland6009512014-11-20 21:39:37 +10001080
1081 /* Disable signal handling */
1082 PyOS_FiniInterrupts();
1083
1084 /* Collect garbage. This may call finalizers; it's nice to call these
1085 * before all modules are destroyed.
1086 * XXX If a __del__ or weakref callback is triggered here, and tries to
1087 * XXX import a module, bad things can happen, because Python no
1088 * XXX longer believes it's initialized.
1089 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1090 * XXX is easy to provoke that way. I've also seen, e.g.,
1091 * XXX Exception exceptions.ImportError: 'No module named sha'
1092 * XXX in <function callback at 0x008F5718> ignored
1093 * XXX but I'm unclear on exactly how that one happens. In any case,
1094 * XXX I haven't seen a real-life report of either of these.
1095 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001096 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001097#ifdef COUNT_ALLOCS
1098 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1099 each collection might release some types from the type
1100 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001101 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001102 /* nothing */;
1103#endif
Eric Snowdae02762017-09-14 00:35:58 -07001104
Nick Coghland6009512014-11-20 21:39:37 +10001105 /* Destroy all modules */
1106 PyImport_Cleanup();
1107
Victor Stinnere0deff32015-03-24 13:46:18 +01001108 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001109 if (flush_std_files() < 0) {
1110 status = -1;
1111 }
Nick Coghland6009512014-11-20 21:39:37 +10001112
1113 /* Collect final garbage. This disposes of cycles created by
1114 * class definitions, for example.
1115 * XXX This is disabled because it caused too many problems. If
1116 * XXX a __del__ or weakref callback triggers here, Python code has
1117 * XXX a hard time running, because even the sys module has been
1118 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1119 * XXX One symptom is a sequence of information-free messages
1120 * XXX coming from threads (if a __del__ or callback is invoked,
1121 * XXX other threads can execute too, and any exception they encounter
1122 * XXX triggers a comedy of errors as subsystem after subsystem
1123 * XXX fails to find what it *expects* to find in sys to help report
1124 * XXX the exception and consequent unexpected failures). I've also
1125 * XXX seen segfaults then, after adding print statements to the
1126 * XXX Python code getting called.
1127 */
1128#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001129 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001130#endif
1131
1132 /* Disable tracemalloc after all Python objects have been destroyed,
1133 so it is possible to use tracemalloc in objects destructor. */
1134 _PyTraceMalloc_Fini();
1135
1136 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1137 _PyImport_Fini();
1138
1139 /* Cleanup typeobject.c's internal caches. */
1140 _PyType_Fini();
1141
1142 /* unload faulthandler module */
1143 _PyFaulthandler_Fini();
1144
1145 /* Debugging stuff */
1146#ifdef COUNT_ALLOCS
Serhiy Storchaka7e160ce2016-07-03 21:03:53 +03001147 dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001148#endif
1149 /* dump hash stats */
1150 _PyHash_Fini();
1151
Eric Snowdae02762017-09-14 00:35:58 -07001152#ifdef Py_REF_DEBUG
Victor Stinner25420fe2017-11-20 18:12:22 -08001153 if (interp->core_config.show_ref_count) {
1154 _PyDebug_PrintTotalRefs();
1155 }
Eric Snowdae02762017-09-14 00:35:58 -07001156#endif
Nick Coghland6009512014-11-20 21:39:37 +10001157
1158#ifdef Py_TRACE_REFS
1159 /* Display all objects still alive -- this can invoke arbitrary
1160 * __repr__ overrides, so requires a mostly-intact interpreter.
1161 * Alas, a lot of stuff may still be alive now that will be cleaned
1162 * up later.
1163 */
1164 if (Py_GETENV("PYTHONDUMPREFS"))
1165 _Py_PrintReferences(stderr);
1166#endif /* Py_TRACE_REFS */
1167
1168 /* Clear interpreter state and all thread states. */
1169 PyInterpreterState_Clear(interp);
1170
1171 /* Now we decref the exception classes. After this point nothing
1172 can raise an exception. That's okay, because each Fini() method
1173 below has been checked to make sure no exceptions are ever
1174 raised.
1175 */
1176
1177 _PyExc_Fini();
1178
1179 /* Sundry finalizers */
1180 PyMethod_Fini();
1181 PyFrame_Fini();
1182 PyCFunction_Fini();
1183 PyTuple_Fini();
1184 PyList_Fini();
1185 PySet_Fini();
1186 PyBytes_Fini();
1187 PyByteArray_Fini();
1188 PyLong_Fini();
1189 PyFloat_Fini();
1190 PyDict_Fini();
1191 PySlice_Fini();
1192 _PyGC_Fini();
Eric Snow6b4be192017-05-22 21:36:03 -07001193 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001194 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001195 PyAsyncGen_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001196
1197 /* Cleanup Unicode implementation */
1198 _PyUnicode_Fini();
1199
1200 /* reset file system default encoding */
1201 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
1202 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
1203 Py_FileSystemDefaultEncoding = NULL;
1204 }
1205
1206 /* XXX Still allocated:
1207 - various static ad-hoc pointers to interned strings
1208 - int and float free list blocks
1209 - whatever various modules and libraries allocate
1210 */
1211
1212 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1213
1214 /* Cleanup auto-thread-state */
Nick Coghland6009512014-11-20 21:39:37 +10001215 _PyGILState_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001216
1217 /* Delete current thread. After this, many C API calls become crashy. */
1218 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001219
Nick Coghland6009512014-11-20 21:39:37 +10001220 PyInterpreterState_Delete(interp);
1221
1222#ifdef Py_TRACE_REFS
1223 /* Display addresses (& refcnts) of all objects still alive.
1224 * An address can be used to find the repr of the object, printed
1225 * above by _Py_PrintReferences.
1226 */
1227 if (Py_GETENV("PYTHONDUMPREFS"))
1228 _Py_PrintReferenceAddresses(stderr);
1229#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001230#ifdef WITH_PYMALLOC
1231 if (_PyMem_PymallocEnabled()) {
1232 char *opt = Py_GETENV("PYTHONMALLOCSTATS");
1233 if (opt != NULL && *opt != '\0')
1234 _PyObject_DebugMallocStats(stderr);
1235 }
Nick Coghland6009512014-11-20 21:39:37 +10001236#endif
1237
1238 call_ll_exitfuncs();
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001239 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001240 return status;
1241}
1242
1243void
1244Py_Finalize(void)
1245{
1246 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001247}
1248
1249/* Create and initialize a new interpreter and thread, and return the
1250 new thread. This requires that Py_Initialize() has been called
1251 first.
1252
1253 Unsuccessful initialization yields a NULL pointer. Note that *no*
1254 exception information is available even in this case -- the
1255 exception information is held in the thread, and there is no
1256 thread.
1257
1258 Locking: as above.
1259
1260*/
1261
Victor Stinnera7368ac2017-11-15 18:11:45 -08001262static _PyInitError
1263new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001264{
1265 PyInterpreterState *interp;
1266 PyThreadState *tstate, *save_tstate;
1267 PyObject *bimod, *sysmod;
1268
Victor Stinnera7368ac2017-11-15 18:11:45 -08001269 if (!_PyRuntime.initialized) {
1270 return _Py_INIT_ERR("Py_Initialize must be called first");
1271 }
Nick Coghland6009512014-11-20 21:39:37 +10001272
Victor Stinner8a1be612016-03-14 22:07:55 +01001273 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1274 interpreters: disable PyGILState_Check(). */
1275 _PyGILState_check_enabled = 0;
1276
Nick Coghland6009512014-11-20 21:39:37 +10001277 interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001278 if (interp == NULL) {
1279 *tstate_p = NULL;
1280 return _Py_INIT_OK();
1281 }
Nick Coghland6009512014-11-20 21:39:37 +10001282
1283 tstate = PyThreadState_New(interp);
1284 if (tstate == NULL) {
1285 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001286 *tstate_p = NULL;
1287 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001288 }
1289
1290 save_tstate = PyThreadState_Swap(tstate);
1291
Eric Snow1abcf672017-05-23 21:46:51 -07001292 /* Copy the current interpreter config into the new interpreter */
1293 if (save_tstate != NULL) {
1294 interp->core_config = save_tstate->interp->core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -07001295 interp->config = save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001296 } else {
1297 /* No current thread state, copy from the main interpreter */
1298 PyInterpreterState *main_interp = PyInterpreterState_Main();
1299 interp->core_config = main_interp->core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -07001300 interp->config = main_interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001301 }
1302
Nick Coghland6009512014-11-20 21:39:37 +10001303 /* XXX The following is lax in error checking */
1304
Victor Stinnere32e79f2017-11-23 01:49:45 +01001305 wchar_t *sys_path = _Py_GetPathWithConfig(&interp->config);
Victor Stinnerd4341102017-11-23 00:12:09 +01001306
Eric Snowd393c1b2017-09-14 12:18:12 -06001307 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001308 if (modules == NULL) {
1309 return _Py_INIT_ERR("can't make modules dictionary");
1310 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001311 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001312
Eric Snowd393c1b2017-09-14 12:18:12 -06001313 sysmod = _PyImport_FindBuiltin("sys", modules);
1314 if (sysmod != NULL) {
1315 interp->sysdict = PyModule_GetDict(sysmod);
1316 if (interp->sysdict == NULL)
1317 goto handle_error;
1318 Py_INCREF(interp->sysdict);
1319 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinnerd4341102017-11-23 00:12:09 +01001320 PySys_SetPath(sys_path);
Eric Snowd393c1b2017-09-14 12:18:12 -06001321 _PySys_EndInit(interp->sysdict);
1322 }
1323
1324 bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001325 if (bimod != NULL) {
1326 interp->builtins = PyModule_GetDict(bimod);
1327 if (interp->builtins == NULL)
1328 goto handle_error;
1329 Py_INCREF(interp->builtins);
1330 }
1331
1332 /* initialize builtin exceptions */
1333 _PyExc_Init(bimod);
1334
Nick Coghland6009512014-11-20 21:39:37 +10001335 if (bimod != NULL && sysmod != NULL) {
1336 PyObject *pstderr;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001337 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001338
Nick Coghland6009512014-11-20 21:39:37 +10001339 /* Set up a preliminary stderr printer until we have enough
1340 infrastructure for the io module in place. */
1341 pstderr = PyFile_NewStdPrinter(fileno(stderr));
Victor Stinnera7368ac2017-11-15 18:11:45 -08001342 if (pstderr == NULL) {
1343 return _Py_INIT_ERR("can't set preliminary stderr");
1344 }
Nick Coghland6009512014-11-20 21:39:37 +10001345 _PySys_SetObjectId(&PyId_stderr, pstderr);
1346 PySys_SetObject("__stderr__", pstderr);
1347 Py_DECREF(pstderr);
1348
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001349 err = _PyImportHooks_Init();
1350 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001351 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001352 }
Nick Coghland6009512014-11-20 21:39:37 +10001353
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001354 err = initimport(interp, sysmod);
1355 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001356 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001357 }
Nick Coghland6009512014-11-20 21:39:37 +10001358
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001359 err = initexternalimport(interp);
1360 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001361 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001362 }
Nick Coghland6009512014-11-20 21:39:37 +10001363
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001364 err = initfsencoding(interp);
1365 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001366 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001367 }
1368
Victor Stinnera7368ac2017-11-15 18:11:45 -08001369 err = init_sys_streams();
1370 if (_Py_INIT_FAILED(err)) {
1371 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001372 }
1373
1374 err = add_main_module(interp);
1375 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001376 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001377 }
1378
1379 if (!Py_NoSiteFlag) {
1380 err = initsite();
1381 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001382 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001383 }
1384 }
Nick Coghland6009512014-11-20 21:39:37 +10001385 }
1386
Victor Stinnera7368ac2017-11-15 18:11:45 -08001387 if (PyErr_Occurred()) {
1388 goto handle_error;
1389 }
Nick Coghland6009512014-11-20 21:39:37 +10001390
Victor Stinnera7368ac2017-11-15 18:11:45 -08001391 *tstate_p = tstate;
1392 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001393
Nick Coghland6009512014-11-20 21:39:37 +10001394handle_error:
1395 /* Oops, it didn't work. Undo it all. */
1396
1397 PyErr_PrintEx(0);
1398 PyThreadState_Clear(tstate);
1399 PyThreadState_Swap(save_tstate);
1400 PyThreadState_Delete(tstate);
1401 PyInterpreterState_Delete(interp);
1402
Victor Stinnera7368ac2017-11-15 18:11:45 -08001403 *tstate_p = NULL;
1404 return _Py_INIT_OK();
1405}
1406
1407PyThreadState *
1408Py_NewInterpreter(void)
1409{
1410 PyThreadState *tstate;
1411 _PyInitError err = new_interpreter(&tstate);
1412 if (_Py_INIT_FAILED(err)) {
1413 _Py_FatalInitError(err);
1414 }
1415 return tstate;
1416
Nick Coghland6009512014-11-20 21:39:37 +10001417}
1418
1419/* Delete an interpreter and its last thread. This requires that the
1420 given thread state is current, that the thread has no remaining
1421 frames, and that it is its interpreter's only remaining thread.
1422 It is a fatal error to violate these constraints.
1423
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001424 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001425 everything, regardless.)
1426
1427 Locking: as above.
1428
1429*/
1430
1431void
1432Py_EndInterpreter(PyThreadState *tstate)
1433{
1434 PyInterpreterState *interp = tstate->interp;
1435
1436 if (tstate != PyThreadState_GET())
1437 Py_FatalError("Py_EndInterpreter: thread is not current");
1438 if (tstate->frame != NULL)
1439 Py_FatalError("Py_EndInterpreter: thread still has a frame");
1440
1441 wait_for_thread_shutdown();
1442
1443 if (tstate != interp->tstate_head || tstate->next != NULL)
1444 Py_FatalError("Py_EndInterpreter: not the last thread");
1445
1446 PyImport_Cleanup();
1447 PyInterpreterState_Clear(interp);
1448 PyThreadState_Swap(NULL);
1449 PyInterpreterState_Delete(interp);
1450}
1451
1452#ifdef MS_WINDOWS
1453static wchar_t *progname = L"python";
1454#else
1455static wchar_t *progname = L"python3";
1456#endif
1457
1458void
1459Py_SetProgramName(wchar_t *pn)
1460{
1461 if (pn && *pn)
1462 progname = pn;
1463}
1464
1465wchar_t *
1466Py_GetProgramName(void)
1467{
1468 return progname;
1469}
1470
1471static wchar_t *default_home = NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001472
1473void
1474Py_SetPythonHome(wchar_t *home)
1475{
1476 default_home = home;
1477}
1478
Victor Stinner0327bde2017-11-23 17:03:20 +01001479
1480_PyInitError
1481_Py_GetPythonHomeWithConfig(const _PyMainInterpreterConfig *config, wchar_t **homep)
Victor Stinner1f151112017-11-23 10:43:14 +01001482{
1483 /* Use a static buffer to avoid heap memory allocation failure.
1484 Py_GetPythonHome() doesn't allow to report error, and the caller
1485 doesn't release memory. */
1486 static wchar_t buffer[MAXPATHLEN+1];
1487
1488 if (default_home) {
Victor Stinner0327bde2017-11-23 17:03:20 +01001489 *homep = default_home;
1490 return _Py_INIT_OK();
Victor Stinner1f151112017-11-23 10:43:14 +01001491 }
1492
1493 if (config) {
Victor Stinner0327bde2017-11-23 17:03:20 +01001494 *homep = config->pythonhome;
1495 return _Py_INIT_OK();
Victor Stinner1f151112017-11-23 10:43:14 +01001496 }
1497
1498 char *home = Py_GETENV("PYTHONHOME");
1499 if (!home) {
Victor Stinner0327bde2017-11-23 17:03:20 +01001500 *homep = NULL;
1501 return _Py_INIT_OK();
Victor Stinner1f151112017-11-23 10:43:14 +01001502 }
1503
1504 size_t size = Py_ARRAY_LENGTH(buffer);
1505 size_t r = mbstowcs(buffer, home, size);
1506 if (r == (size_t)-1 || r >= size) {
1507 /* conversion failed or the static buffer is too small */
Victor Stinner0327bde2017-11-23 17:03:20 +01001508 *homep = NULL;
1509 return _Py_INIT_ERR("failed to decode PYTHONHOME environment variable");
Victor Stinner1f151112017-11-23 10:43:14 +01001510 }
1511
Victor Stinner0327bde2017-11-23 17:03:20 +01001512 *homep = buffer;
1513 return _Py_INIT_OK();
Victor Stinner1f151112017-11-23 10:43:14 +01001514}
1515
1516wchar_t *
Nick Coghland6009512014-11-20 21:39:37 +10001517Py_GetPythonHome(void)
1518{
Victor Stinner0327bde2017-11-23 17:03:20 +01001519 wchar_t *home;
1520 /* Ignore error */
1521 (void)_Py_GetPythonHomeWithConfig(NULL, &home);
1522 return home;
Nick Coghland6009512014-11-20 21:39:37 +10001523}
1524
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001525/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001526
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001527static _PyInitError
1528add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001529{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001530 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001531 m = PyImport_AddModule("__main__");
1532 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001533 return _Py_INIT_ERR("can't create __main__ module");
1534
Nick Coghland6009512014-11-20 21:39:37 +10001535 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001536 ann_dict = PyDict_New();
1537 if ((ann_dict == NULL) ||
1538 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001539 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001540 }
1541 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001542
Nick Coghland6009512014-11-20 21:39:37 +10001543 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1544 PyObject *bimod = PyImport_ImportModule("builtins");
1545 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001546 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001547 }
1548 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001549 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001550 }
1551 Py_DECREF(bimod);
1552 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001553
Nick Coghland6009512014-11-20 21:39:37 +10001554 /* Main is a little special - imp.is_builtin("__main__") will return
1555 * False, but BuiltinImporter is still the most appropriate initial
1556 * setting for its __loader__ attribute. A more suitable value will
1557 * be set if __main__ gets further initialized later in the startup
1558 * process.
1559 */
1560 loader = PyDict_GetItemString(d, "__loader__");
1561 if (loader == NULL || loader == Py_None) {
1562 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1563 "BuiltinImporter");
1564 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001565 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001566 }
1567 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001568 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001569 }
1570 Py_DECREF(loader);
1571 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001572 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001573}
1574
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001575static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001576initfsencoding(PyInterpreterState *interp)
1577{
1578 PyObject *codec;
1579
Steve Dowercc16be82016-09-08 10:35:16 -07001580#ifdef MS_WINDOWS
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001581 if (Py_LegacyWindowsFSEncodingFlag) {
Steve Dowercc16be82016-09-08 10:35:16 -07001582 Py_FileSystemDefaultEncoding = "mbcs";
1583 Py_FileSystemDefaultEncodeErrors = "replace";
1584 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001585 else {
Steve Dowercc16be82016-09-08 10:35:16 -07001586 Py_FileSystemDefaultEncoding = "utf-8";
1587 Py_FileSystemDefaultEncodeErrors = "surrogatepass";
1588 }
1589#else
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001590 if (Py_FileSystemDefaultEncoding == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001591 Py_FileSystemDefaultEncoding = get_locale_encoding();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001592 if (Py_FileSystemDefaultEncoding == NULL) {
1593 return _Py_INIT_ERR("Unable to get the locale encoding");
1594 }
Nick Coghland6009512014-11-20 21:39:37 +10001595
1596 Py_HasFileSystemDefaultEncoding = 0;
1597 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001598 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001599 }
Steve Dowercc16be82016-09-08 10:35:16 -07001600#endif
Nick Coghland6009512014-11-20 21:39:37 +10001601
1602 /* the encoding is mbcs, utf-8 or ascii */
1603 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
1604 if (!codec) {
1605 /* Such error can only occurs in critical situations: no more
1606 * memory, import a module of the standard library failed,
1607 * etc. */
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001608 return _Py_INIT_ERR("unable to load the file system codec");
Nick Coghland6009512014-11-20 21:39:37 +10001609 }
1610 Py_DECREF(codec);
1611 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001612 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001613}
1614
1615/* Import the site module (not into __main__ though) */
1616
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001617static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001618initsite(void)
1619{
1620 PyObject *m;
1621 m = PyImport_ImportModule("site");
1622 if (m == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001623 return _Py_INIT_USER_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001624 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001625 Py_DECREF(m);
1626 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001627}
1628
Victor Stinner874dbe82015-09-04 17:29:57 +02001629/* Check if a file descriptor is valid or not.
1630 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1631static int
1632is_valid_fd(int fd)
1633{
Victor Stinner1c4670e2017-05-04 00:45:56 +02001634#ifdef __APPLE__
1635 /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe
1636 and the other side of the pipe is closed, dup(1) succeed, whereas
1637 fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect
1638 such error. */
1639 struct stat st;
1640 return (fstat(fd, &st) == 0);
1641#else
Victor Stinner874dbe82015-09-04 17:29:57 +02001642 int fd2;
Steve Dower940f33a2016-09-08 11:21:54 -07001643 if (fd < 0)
Victor Stinner874dbe82015-09-04 17:29:57 +02001644 return 0;
1645 _Py_BEGIN_SUPPRESS_IPH
Victor Stinner449b2712015-09-29 13:59:50 +02001646 /* Prefer dup() over fstat(). fstat() can require input/output whereas
1647 dup() doesn't, there is a low risk of EMFILE/ENFILE at Python
1648 startup. */
Victor Stinner874dbe82015-09-04 17:29:57 +02001649 fd2 = dup(fd);
1650 if (fd2 >= 0)
1651 close(fd2);
1652 _Py_END_SUPPRESS_IPH
1653 return fd2 >= 0;
Victor Stinner1c4670e2017-05-04 00:45:56 +02001654#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001655}
1656
1657/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001658static PyObject*
1659create_stdio(PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001660 int fd, int write_mode, const char* name,
1661 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001662{
1663 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1664 const char* mode;
1665 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001666 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001667 int buffering, isatty;
1668 _Py_IDENTIFIER(open);
1669 _Py_IDENTIFIER(isatty);
1670 _Py_IDENTIFIER(TextIOWrapper);
1671 _Py_IDENTIFIER(mode);
1672
Victor Stinner874dbe82015-09-04 17:29:57 +02001673 if (!is_valid_fd(fd))
1674 Py_RETURN_NONE;
1675
Nick Coghland6009512014-11-20 21:39:37 +10001676 /* stdin is always opened in buffered mode, first because it shouldn't
1677 make a difference in common use cases, second because TextIOWrapper
1678 depends on the presence of a read1() method which only exists on
1679 buffered streams.
1680 */
1681 if (Py_UnbufferedStdioFlag && write_mode)
1682 buffering = 0;
1683 else
1684 buffering = -1;
1685 if (write_mode)
1686 mode = "wb";
1687 else
1688 mode = "rb";
1689 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1690 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001691 Py_None, Py_None, /* encoding, errors */
1692 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001693 if (buf == NULL)
1694 goto error;
1695
1696 if (buffering) {
1697 _Py_IDENTIFIER(raw);
1698 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1699 if (raw == NULL)
1700 goto error;
1701 }
1702 else {
1703 raw = buf;
1704 Py_INCREF(raw);
1705 }
1706
Steve Dower39294992016-08-30 21:22:36 -07001707#ifdef MS_WINDOWS
1708 /* Windows console IO is always UTF-8 encoded */
1709 if (PyWindowsConsoleIO_Check(raw))
1710 encoding = "utf-8";
1711#endif
1712
Nick Coghland6009512014-11-20 21:39:37 +10001713 text = PyUnicode_FromString(name);
1714 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1715 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001716 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001717 if (res == NULL)
1718 goto error;
1719 isatty = PyObject_IsTrue(res);
1720 Py_DECREF(res);
1721 if (isatty == -1)
1722 goto error;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001723 if (Py_UnbufferedStdioFlag)
1724 write_through = Py_True;
1725 else
1726 write_through = Py_False;
1727 if (isatty && !Py_UnbufferedStdioFlag)
Nick Coghland6009512014-11-20 21:39:37 +10001728 line_buffering = Py_True;
1729 else
1730 line_buffering = Py_False;
1731
1732 Py_CLEAR(raw);
1733 Py_CLEAR(text);
1734
1735#ifdef MS_WINDOWS
1736 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1737 newlines to "\n".
1738 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1739 newline = NULL;
1740#else
1741 /* sys.stdin: split lines at "\n".
1742 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1743 newline = "\n";
1744#endif
1745
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001746 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001747 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001748 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001749 Py_CLEAR(buf);
1750 if (stream == NULL)
1751 goto error;
1752
1753 if (write_mode)
1754 mode = "w";
1755 else
1756 mode = "r";
1757 text = PyUnicode_FromString(mode);
1758 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1759 goto error;
1760 Py_CLEAR(text);
1761 return stream;
1762
1763error:
1764 Py_XDECREF(buf);
1765 Py_XDECREF(stream);
1766 Py_XDECREF(text);
1767 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001768
Victor Stinner874dbe82015-09-04 17:29:57 +02001769 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1770 /* Issue #24891: the file descriptor was closed after the first
1771 is_valid_fd() check was called. Ignore the OSError and set the
1772 stream to None. */
1773 PyErr_Clear();
1774 Py_RETURN_NONE;
1775 }
1776 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001777}
1778
1779/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001780static _PyInitError
1781init_sys_streams(void)
Nick Coghland6009512014-11-20 21:39:37 +10001782{
1783 PyObject *iomod = NULL, *wrapper;
1784 PyObject *bimod = NULL;
1785 PyObject *m;
1786 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001787 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001788 PyObject * encoding_attr;
1789 char *pythonioencoding = NULL, *encoding, *errors;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001790 _PyInitError res = _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001791
1792 /* Hack to avoid a nasty recursion issue when Python is invoked
1793 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1794 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1795 goto error;
1796 }
1797 Py_DECREF(m);
1798
1799 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1800 goto error;
1801 }
1802 Py_DECREF(m);
1803
1804 if (!(bimod = PyImport_ImportModule("builtins"))) {
1805 goto error;
1806 }
1807
1808 if (!(iomod = PyImport_ImportModule("io"))) {
1809 goto error;
1810 }
1811 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1812 goto error;
1813 }
1814
1815 /* Set builtins.open */
1816 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1817 Py_DECREF(wrapper);
1818 goto error;
1819 }
1820 Py_DECREF(wrapper);
1821
1822 encoding = _Py_StandardStreamEncoding;
1823 errors = _Py_StandardStreamErrors;
1824 if (!encoding || !errors) {
Nick Coghland6009512014-11-20 21:39:37 +10001825 pythonioencoding = Py_GETENV("PYTHONIOENCODING");
1826 if (pythonioencoding) {
1827 char *err;
1828 pythonioencoding = _PyMem_Strdup(pythonioencoding);
1829 if (pythonioencoding == NULL) {
1830 PyErr_NoMemory();
1831 goto error;
1832 }
1833 err = strchr(pythonioencoding, ':');
1834 if (err) {
1835 *err = '\0';
1836 err++;
Serhiy Storchakafc435112016-04-10 14:34:13 +03001837 if (*err && !errors) {
Nick Coghland6009512014-11-20 21:39:37 +10001838 errors = err;
1839 }
1840 }
1841 if (*pythonioencoding && !encoding) {
1842 encoding = pythonioencoding;
1843 }
1844 }
Serhiy Storchakafc435112016-04-10 14:34:13 +03001845 if (!errors && !(pythonioencoding && *pythonioencoding)) {
Nick Coghlan6ea41862017-06-11 13:16:15 +10001846 /* Choose the default error handler based on the current locale */
1847 errors = get_default_standard_stream_error_handler();
Serhiy Storchakafc435112016-04-10 14:34:13 +03001848 }
Nick Coghland6009512014-11-20 21:39:37 +10001849 }
1850
1851 /* Set sys.stdin */
1852 fd = fileno(stdin);
1853 /* Under some conditions stdin, stdout and stderr may not be connected
1854 * and fileno() may point to an invalid file descriptor. For example
1855 * GUI apps don't have valid standard streams by default.
1856 */
Victor Stinner874dbe82015-09-04 17:29:57 +02001857 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1858 if (std == NULL)
1859 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001860 PySys_SetObject("__stdin__", std);
1861 _PySys_SetObjectId(&PyId_stdin, std);
1862 Py_DECREF(std);
1863
1864 /* Set sys.stdout */
1865 fd = fileno(stdout);
Victor Stinner874dbe82015-09-04 17:29:57 +02001866 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1867 if (std == NULL)
1868 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001869 PySys_SetObject("__stdout__", std);
1870 _PySys_SetObjectId(&PyId_stdout, std);
1871 Py_DECREF(std);
1872
1873#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1874 /* Set sys.stderr, replaces the preliminary stderr */
1875 fd = fileno(stderr);
Victor Stinner874dbe82015-09-04 17:29:57 +02001876 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1877 if (std == NULL)
1878 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001879
1880 /* Same as hack above, pre-import stderr's codec to avoid recursion
1881 when import.c tries to write to stderr in verbose mode. */
1882 encoding_attr = PyObject_GetAttrString(std, "encoding");
1883 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001884 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001885 if (std_encoding != NULL) {
1886 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1887 Py_XDECREF(codec_info);
1888 }
1889 Py_DECREF(encoding_attr);
1890 }
1891 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1892
1893 if (PySys_SetObject("__stderr__", std) < 0) {
1894 Py_DECREF(std);
1895 goto error;
1896 }
1897 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1898 Py_DECREF(std);
1899 goto error;
1900 }
1901 Py_DECREF(std);
1902#endif
1903
Victor Stinnera7368ac2017-11-15 18:11:45 -08001904 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001905
Victor Stinnera7368ac2017-11-15 18:11:45 -08001906error:
1907 res = _Py_INIT_ERR("can't initialize sys standard streams");
1908
1909done:
Nick Coghland6009512014-11-20 21:39:37 +10001910 /* We won't need them anymore. */
1911 if (_Py_StandardStreamEncoding) {
1912 PyMem_RawFree(_Py_StandardStreamEncoding);
1913 _Py_StandardStreamEncoding = NULL;
1914 }
1915 if (_Py_StandardStreamErrors) {
1916 PyMem_RawFree(_Py_StandardStreamErrors);
1917 _Py_StandardStreamErrors = NULL;
1918 }
1919 PyMem_Free(pythonioencoding);
1920 Py_XDECREF(bimod);
1921 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001922 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001923}
1924
1925
Victor Stinner10dc4842015-03-24 12:01:30 +01001926static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001927_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001928{
Victor Stinner10dc4842015-03-24 12:01:30 +01001929 fputc('\n', stderr);
1930 fflush(stderr);
1931
1932 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001933 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001934}
Victor Stinner791da1c2016-03-14 16:53:12 +01001935
1936/* Print the current exception (if an exception is set) with its traceback,
1937 or display the current Python stack.
1938
1939 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1940 called on catastrophic cases.
1941
1942 Return 1 if the traceback was displayed, 0 otherwise. */
1943
1944static int
1945_Py_FatalError_PrintExc(int fd)
1946{
1947 PyObject *ferr, *res;
1948 PyObject *exception, *v, *tb;
1949 int has_tb;
1950
1951 if (PyThreadState_GET() == NULL) {
1952 /* The GIL is released: trying to acquire it is likely to deadlock,
1953 just give up. */
1954 return 0;
1955 }
1956
1957 PyErr_Fetch(&exception, &v, &tb);
1958 if (exception == NULL) {
1959 /* No current exception */
1960 return 0;
1961 }
1962
1963 ferr = _PySys_GetObjectId(&PyId_stderr);
1964 if (ferr == NULL || ferr == Py_None) {
1965 /* sys.stderr is not set yet or set to None,
1966 no need to try to display the exception */
1967 return 0;
1968 }
1969
1970 PyErr_NormalizeException(&exception, &v, &tb);
1971 if (tb == NULL) {
1972 tb = Py_None;
1973 Py_INCREF(tb);
1974 }
1975 PyException_SetTraceback(v, tb);
1976 if (exception == NULL) {
1977 /* PyErr_NormalizeException() failed */
1978 return 0;
1979 }
1980
1981 has_tb = (tb != Py_None);
1982 PyErr_Display(exception, v, tb);
1983 Py_XDECREF(exception);
1984 Py_XDECREF(v);
1985 Py_XDECREF(tb);
1986
1987 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07001988 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01001989 if (res == NULL)
1990 PyErr_Clear();
1991 else
1992 Py_DECREF(res);
1993
1994 return has_tb;
1995}
1996
Nick Coghland6009512014-11-20 21:39:37 +10001997/* Print fatal error message and abort */
1998
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07001999#ifdef MS_WINDOWS
2000static void
2001fatal_output_debug(const char *msg)
2002{
2003 /* buffer of 256 bytes allocated on the stack */
2004 WCHAR buffer[256 / sizeof(WCHAR)];
2005 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2006 size_t msglen;
2007
2008 OutputDebugStringW(L"Fatal Python error: ");
2009
2010 msglen = strlen(msg);
2011 while (msglen) {
2012 size_t i;
2013
2014 if (buflen > msglen) {
2015 buflen = msglen;
2016 }
2017
2018 /* Convert the message to wchar_t. This uses a simple one-to-one
2019 conversion, assuming that the this error message actually uses
2020 ASCII only. If this ceases to be true, we will have to convert. */
2021 for (i=0; i < buflen; ++i) {
2022 buffer[i] = msg[i];
2023 }
2024 buffer[i] = L'\0';
2025 OutputDebugStringW(buffer);
2026
2027 msg += buflen;
2028 msglen -= buflen;
2029 }
2030 OutputDebugStringW(L"\n");
2031}
2032#endif
2033
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002034static void
2035fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002036{
2037 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01002038 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002039
2040 if (reentrant) {
2041 /* Py_FatalError() caused a second fatal error.
2042 Example: flush_std_files() raises a recursion error. */
2043 goto exit;
2044 }
2045 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002046
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002047 fprintf(stderr, "Fatal Python error: ");
2048 if (prefix) {
2049 fputs(prefix, stderr);
2050 fputs(": ", stderr);
2051 }
2052 if (msg) {
2053 fputs(msg, stderr);
2054 }
2055 else {
2056 fprintf(stderr, "<message not set>");
2057 }
2058 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10002059 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01002060
Victor Stinnere0deff32015-03-24 13:46:18 +01002061 /* Print the exception (if an exception is set) with its traceback,
2062 * or display the current Python stack. */
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002063 if (!_Py_FatalError_PrintExc(fd)) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002064 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002065 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002066
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002067 /* The main purpose of faulthandler is to display the traceback.
2068 This function already did its best to display a traceback.
2069 Disable faulthandler to prevent writing a second traceback
2070 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002071 _PyFaulthandler_Fini();
2072
Victor Stinner791da1c2016-03-14 16:53:12 +01002073 /* Check if the current Python thread hold the GIL */
2074 if (PyThreadState_GET() != NULL) {
2075 /* Flush sys.stdout and sys.stderr */
2076 flush_std_files();
2077 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002078
Nick Coghland6009512014-11-20 21:39:37 +10002079#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002080 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002081#endif /* MS_WINDOWS */
2082
2083exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002084 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002085#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002086 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002087#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002088 abort();
2089 }
2090 else {
2091 exit(status);
2092 }
2093}
2094
2095void
2096Py_FatalError(const char *msg)
2097{
2098 fatal_error(NULL, msg, -1);
2099}
2100
2101void
2102_Py_FatalInitError(_PyInitError err)
2103{
2104 /* On "user" error: exit with status 1.
2105 For all other errors, call abort(). */
2106 int status = err.user_err ? 1 : -1;
2107 fatal_error(err.prefix, err.msg, status);
Nick Coghland6009512014-11-20 21:39:37 +10002108}
2109
2110/* Clean up and exit */
2111
Victor Stinnerd7292b52016-06-17 12:29:00 +02002112# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002113
Nick Coghland6009512014-11-20 21:39:37 +10002114/* For the atexit module. */
2115void _Py_PyAtExit(void (*func)(void))
2116{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002117 _PyRuntime.pyexitfunc = func;
Nick Coghland6009512014-11-20 21:39:37 +10002118}
2119
2120static void
2121call_py_exitfuncs(void)
2122{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002123 if (_PyRuntime.pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002124 return;
2125
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002126 (*_PyRuntime.pyexitfunc)();
Nick Coghland6009512014-11-20 21:39:37 +10002127 PyErr_Clear();
2128}
2129
2130/* Wait until threading._shutdown completes, provided
2131 the threading module was imported in the first place.
2132 The shutdown routine will wait until all non-daemon
2133 "threading" threads have completed. */
2134static void
2135wait_for_thread_shutdown(void)
2136{
Nick Coghland6009512014-11-20 21:39:37 +10002137 _Py_IDENTIFIER(_shutdown);
2138 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002139 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002140 if (threading == NULL) {
2141 /* threading not imported */
2142 PyErr_Clear();
2143 return;
2144 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002145 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002146 if (result == NULL) {
2147 PyErr_WriteUnraisable(threading);
2148 }
2149 else {
2150 Py_DECREF(result);
2151 }
2152 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002153}
2154
2155#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002156int Py_AtExit(void (*func)(void))
2157{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002158 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002159 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002160 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002161 return 0;
2162}
2163
2164static void
2165call_ll_exitfuncs(void)
2166{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002167 while (_PyRuntime.nexitfuncs > 0)
2168 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002169
2170 fflush(stdout);
2171 fflush(stderr);
2172}
2173
2174void
2175Py_Exit(int sts)
2176{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002177 if (Py_FinalizeEx() < 0) {
2178 sts = 120;
2179 }
Nick Coghland6009512014-11-20 21:39:37 +10002180
2181 exit(sts);
2182}
2183
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002184static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002185initsigs(void)
2186{
2187#ifdef SIGPIPE
2188 PyOS_setsig(SIGPIPE, SIG_IGN);
2189#endif
2190#ifdef SIGXFZ
2191 PyOS_setsig(SIGXFZ, SIG_IGN);
2192#endif
2193#ifdef SIGXFSZ
2194 PyOS_setsig(SIGXFSZ, SIG_IGN);
2195#endif
2196 PyOS_InitInterrupts(); /* May imply initsignal() */
2197 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002198 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002199 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002200 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002201}
2202
2203
2204/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2205 *
2206 * All of the code in this function must only use async-signal-safe functions,
2207 * listed at `man 7 signal` or
2208 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2209 */
2210void
2211_Py_RestoreSignals(void)
2212{
2213#ifdef SIGPIPE
2214 PyOS_setsig(SIGPIPE, SIG_DFL);
2215#endif
2216#ifdef SIGXFZ
2217 PyOS_setsig(SIGXFZ, SIG_DFL);
2218#endif
2219#ifdef SIGXFSZ
2220 PyOS_setsig(SIGXFSZ, SIG_DFL);
2221#endif
2222}
2223
2224
2225/*
2226 * The file descriptor fd is considered ``interactive'' if either
2227 * a) isatty(fd) is TRUE, or
2228 * b) the -i flag was given, and the filename associated with
2229 * the descriptor is NULL or "<stdin>" or "???".
2230 */
2231int
2232Py_FdIsInteractive(FILE *fp, const char *filename)
2233{
2234 if (isatty((int)fileno(fp)))
2235 return 1;
2236 if (!Py_InteractiveFlag)
2237 return 0;
2238 return (filename == NULL) ||
2239 (strcmp(filename, "<stdin>") == 0) ||
2240 (strcmp(filename, "???") == 0);
2241}
2242
2243
Nick Coghland6009512014-11-20 21:39:37 +10002244/* Wrappers around sigaction() or signal(). */
2245
2246PyOS_sighandler_t
2247PyOS_getsig(int sig)
2248{
2249#ifdef HAVE_SIGACTION
2250 struct sigaction context;
2251 if (sigaction(sig, NULL, &context) == -1)
2252 return SIG_ERR;
2253 return context.sa_handler;
2254#else
2255 PyOS_sighandler_t handler;
2256/* Special signal handling for the secure CRT in Visual Studio 2005 */
2257#if defined(_MSC_VER) && _MSC_VER >= 1400
2258 switch (sig) {
2259 /* Only these signals are valid */
2260 case SIGINT:
2261 case SIGILL:
2262 case SIGFPE:
2263 case SIGSEGV:
2264 case SIGTERM:
2265 case SIGBREAK:
2266 case SIGABRT:
2267 break;
2268 /* Don't call signal() with other values or it will assert */
2269 default:
2270 return SIG_ERR;
2271 }
2272#endif /* _MSC_VER && _MSC_VER >= 1400 */
2273 handler = signal(sig, SIG_IGN);
2274 if (handler != SIG_ERR)
2275 signal(sig, handler);
2276 return handler;
2277#endif
2278}
2279
2280/*
2281 * All of the code in this function must only use async-signal-safe functions,
2282 * listed at `man 7 signal` or
2283 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2284 */
2285PyOS_sighandler_t
2286PyOS_setsig(int sig, PyOS_sighandler_t handler)
2287{
2288#ifdef HAVE_SIGACTION
2289 /* Some code in Modules/signalmodule.c depends on sigaction() being
2290 * used here if HAVE_SIGACTION is defined. Fix that if this code
2291 * changes to invalidate that assumption.
2292 */
2293 struct sigaction context, ocontext;
2294 context.sa_handler = handler;
2295 sigemptyset(&context.sa_mask);
2296 context.sa_flags = 0;
2297 if (sigaction(sig, &context, &ocontext) == -1)
2298 return SIG_ERR;
2299 return ocontext.sa_handler;
2300#else
2301 PyOS_sighandler_t oldhandler;
2302 oldhandler = signal(sig, handler);
2303#ifdef HAVE_SIGINTERRUPT
2304 siginterrupt(sig, 1);
2305#endif
2306 return oldhandler;
2307#endif
2308}
2309
2310#ifdef __cplusplus
2311}
2312#endif