blob: 714be3768f6ba36a26ce51446b37dd6f60ac6d9f [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
Victor Stinner46972b72017-11-24 22:55:40 +0100799_PyMainInterpreterConfig_Read(_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 Stinnerf04ebe22017-11-25 00:01:23 +0100805
806 if (config->program_name == NULL) {
807 config->program_name = _PyMem_RawWcsdup(Py_GetProgramName());
808 if (config->program_name == NULL) {
809 return _Py_INIT_NO_MEMORY();
810 }
811 }
812
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800813 return _Py_INIT_OK();
Eric Snowc7ec9982017-05-23 23:00:52 -0700814}
815
Victor Stinner46972b72017-11-24 22:55:40 +0100816
817void
818_PyMainInterpreterConfig_Clear(_PyMainInterpreterConfig *config)
819{
Victor Stinnerf04ebe22017-11-25 00:01:23 +0100820#define CLEAR(ATTR) \
821 do { \
822 PyMem_RawFree(ATTR); \
823 ATTR = NULL; \
824 } while (0)
825
826 CLEAR(config->module_search_path_env);
827 CLEAR(config->home);
828 CLEAR(config->program_name);
829#undef CLEAR
Victor Stinner46972b72017-11-24 22:55:40 +0100830}
831
832
Eric Snowc7ec9982017-05-23 23:00:52 -0700833/* Update interpreter state based on supplied configuration settings
834 *
835 * After calling this function, most of the restrictions on the interpreter
836 * are lifted. The only remaining incomplete settings are those related
837 * to the main module (sys.argv[0], __main__ metadata)
838 *
839 * Calling this when the interpreter is not initializing, is already
840 * initialized or without a valid current thread state is a fatal error.
841 * Other errors should be reported as normal Python exceptions with a
842 * non-zero return code.
843 */
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800844_PyInitError
845_Py_InitializeMainInterpreter(const _PyMainInterpreterConfig *config)
Eric Snow1abcf672017-05-23 21:46:51 -0700846{
847 PyInterpreterState *interp;
848 PyThreadState *tstate;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800849 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700850
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600851 if (!_PyRuntime.core_initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800852 return _Py_INIT_ERR("runtime core not initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700853 }
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600854 if (_PyRuntime.initialized) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800855 return _Py_INIT_ERR("main interpreter already initialized");
Eric Snowc7ec9982017-05-23 23:00:52 -0700856 }
857
Eric Snow1abcf672017-05-23 21:46:51 -0700858 /* Get current thread state and interpreter pointer */
859 tstate = PyThreadState_GET();
860 if (!tstate)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800861 return _Py_INIT_ERR("failed to read thread state");
Eric Snow1abcf672017-05-23 21:46:51 -0700862 interp = tstate->interp;
863 if (!interp)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800864 return _Py_INIT_ERR("failed to get interpreter");
Eric Snow1abcf672017-05-23 21:46:51 -0700865
866 /* Now finish configuring the main interpreter */
Eric Snowc7ec9982017-05-23 23:00:52 -0700867 interp->config = *config;
868
Victor Stinnerd4341102017-11-23 00:12:09 +0100869 /* GetPath may initialize state that _PySys_EndInit locks
870 in, and so has to be called first. */
871 /* TODO: Call Py_GetPath() in Py_ReadConfig, rather than here */
Victor Stinnere32e79f2017-11-23 01:49:45 +0100872 wchar_t *sys_path = _Py_GetPathWithConfig(&interp->config);
Victor Stinnerd4341102017-11-23 00:12:09 +0100873
Eric Snow1abcf672017-05-23 21:46:51 -0700874 if (interp->core_config._disable_importlib) {
875 /* Special mode for freeze_importlib: run with no import system
876 *
877 * This means anything which needs support from extension modules
878 * or pure Python code in the standard library won't work.
879 */
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600880 _PyRuntime.initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800881 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700882 }
883 /* TODO: Report exceptions rather than fatal errors below here */
Nick Coghland6009512014-11-20 21:39:37 +1000884
Victor Stinner13019fd2015-04-03 13:10:54 +0200885 if (_PyTime_Init() < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800886 return _Py_INIT_ERR("can't initialize time");
Victor Stinner13019fd2015-04-03 13:10:54 +0200887
Eric Snow1abcf672017-05-23 21:46:51 -0700888 /* Finish setting up the sys module and import system */
Victor Stinnerd4341102017-11-23 00:12:09 +0100889 PySys_SetPath(sys_path);
Eric Snow1abcf672017-05-23 21:46:51 -0700890 if (_PySys_EndInit(interp->sysdict) < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800891 return _Py_INIT_ERR("can't finish initializing sys");
Victor Stinnera7368ac2017-11-15 18:11:45 -0800892
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800893 err = initexternalimport(interp);
894 if (_Py_INIT_FAILED(err)) {
895 return err;
896 }
Nick Coghland6009512014-11-20 21:39:37 +1000897
898 /* initialize the faulthandler module */
Victor Stinnera7368ac2017-11-15 18:11:45 -0800899 err = _PyFaulthandler_Init(interp->core_config.faulthandler);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800900 if (_Py_INIT_FAILED(err)) {
901 return err;
902 }
Nick Coghland6009512014-11-20 21:39:37 +1000903
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800904 err = initfsencoding(interp);
905 if (_Py_INIT_FAILED(err)) {
906 return err;
907 }
Nick Coghland6009512014-11-20 21:39:37 +1000908
Victor Stinner1f151112017-11-23 10:43:14 +0100909 if (interp->config.install_signal_handlers) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800910 err = initsigs(); /* Signal handling stuff, including initintr() */
911 if (_Py_INIT_FAILED(err)) {
912 return err;
913 }
914 }
Nick Coghland6009512014-11-20 21:39:37 +1000915
Victor Stinnera7368ac2017-11-15 18:11:45 -0800916 if (_PyTraceMalloc_Init(interp->core_config.tracemalloc) < 0)
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800917 return _Py_INIT_ERR("can't initialize tracemalloc");
Nick Coghland6009512014-11-20 21:39:37 +1000918
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800919 err = add_main_module(interp);
920 if (_Py_INIT_FAILED(err)) {
921 return err;
922 }
Victor Stinnera7368ac2017-11-15 18:11:45 -0800923
924 err = init_sys_streams();
925 if (_Py_INIT_FAILED(err)) {
926 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800927 }
Nick Coghland6009512014-11-20 21:39:37 +1000928
929 /* Initialize warnings. */
930 if (PySys_HasWarnOptions()) {
931 PyObject *warnings_module = PyImport_ImportModule("warnings");
932 if (warnings_module == NULL) {
933 fprintf(stderr, "'import warnings' failed; traceback:\n");
934 PyErr_Print();
935 }
936 Py_XDECREF(warnings_module);
937 }
938
Eric Snow2ebc5ce2017-09-07 23:51:28 -0600939 _PyRuntime.initialized = 1;
Eric Snow1abcf672017-05-23 21:46:51 -0700940
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800941 if (!Py_NoSiteFlag) {
942 err = initsite(); /* Module site */
943 if (_Py_INIT_FAILED(err)) {
944 return err;
945 }
946 }
Eric Snow1abcf672017-05-23 21:46:51 -0700947
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800948 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +1000949}
950
Eric Snowc7ec9982017-05-23 23:00:52 -0700951#undef _INIT_DEBUG_PRINT
952
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800953_PyInitError
Eric Snow1abcf672017-05-23 21:46:51 -0700954_Py_InitializeEx_Private(int install_sigs, int install_importlib)
955{
956 _PyCoreConfig core_config = _PyCoreConfig_INIT;
Eric Snowc7ec9982017-05-23 23:00:52 -0700957 _PyMainInterpreterConfig config = _PyMainInterpreterConfig_INIT;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800958 _PyInitError err;
Eric Snow1abcf672017-05-23 21:46:51 -0700959
960 /* TODO: Moar config options! */
961 core_config.ignore_environment = Py_IgnoreEnvironmentFlag;
962 core_config._disable_importlib = !install_importlib;
Eric Snowc7ec9982017-05-23 23:00:52 -0700963 config.install_signal_handlers = install_sigs;
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800964
965 err = _Py_InitializeCore(&core_config);
966 if (_Py_INIT_FAILED(err)) {
967 return err;
968 }
969
Eric Snowc7ec9982017-05-23 23:00:52 -0700970 /* TODO: Print any exceptions raised by these operations */
Victor Stinner46972b72017-11-24 22:55:40 +0100971 err = _PyMainInterpreterConfig_Read(&config);
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800972 if (_Py_INIT_FAILED(err)) {
973 return err;
974 }
975
976 err = _Py_InitializeMainInterpreter(&config);
977 if (_Py_INIT_FAILED(err)) {
978 return err;
979 }
980
981 return _Py_INIT_OK();
Eric Snow1abcf672017-05-23 21:46:51 -0700982}
983
984
985void
Nick Coghland6009512014-11-20 21:39:37 +1000986Py_InitializeEx(int install_sigs)
987{
Victor Stinnerf7e5b562017-11-15 15:48:08 -0800988 _PyInitError err = _Py_InitializeEx_Private(install_sigs, 1);
989 if (_Py_INIT_FAILED(err)) {
990 _Py_FatalInitError(err);
991 }
Nick Coghland6009512014-11-20 21:39:37 +1000992}
993
994void
995Py_Initialize(void)
996{
997 Py_InitializeEx(1);
998}
999
1000
1001#ifdef COUNT_ALLOCS
1002extern void dump_counts(FILE*);
1003#endif
1004
1005/* Flush stdout and stderr */
1006
1007static int
1008file_is_closed(PyObject *fobj)
1009{
1010 int r;
1011 PyObject *tmp = PyObject_GetAttrString(fobj, "closed");
1012 if (tmp == NULL) {
1013 PyErr_Clear();
1014 return 0;
1015 }
1016 r = PyObject_IsTrue(tmp);
1017 Py_DECREF(tmp);
1018 if (r < 0)
1019 PyErr_Clear();
1020 return r > 0;
1021}
1022
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001023static int
Nick Coghland6009512014-11-20 21:39:37 +10001024flush_std_files(void)
1025{
1026 PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
1027 PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
1028 PyObject *tmp;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001029 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001030
1031 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001032 tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001033 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001034 PyErr_WriteUnraisable(fout);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001035 status = -1;
1036 }
Nick Coghland6009512014-11-20 21:39:37 +10001037 else
1038 Py_DECREF(tmp);
1039 }
1040
1041 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) {
Victor Stinner3466bde2016-09-05 18:16:01 -07001042 tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001043 if (tmp == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001044 PyErr_Clear();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001045 status = -1;
1046 }
Nick Coghland6009512014-11-20 21:39:37 +10001047 else
1048 Py_DECREF(tmp);
1049 }
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001050
1051 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001052}
1053
1054/* Undo the effect of Py_Initialize().
1055
1056 Beware: if multiple interpreter and/or thread states exist, these
1057 are not wiped out; only the current thread and interpreter state
1058 are deleted. But since everything else is deleted, those other
1059 interpreter and thread states should no longer be used.
1060
1061 (XXX We should do better, e.g. wipe out all interpreters and
1062 threads.)
1063
1064 Locking: as above.
1065
1066*/
1067
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001068int
1069Py_FinalizeEx(void)
Nick Coghland6009512014-11-20 21:39:37 +10001070{
1071 PyInterpreterState *interp;
1072 PyThreadState *tstate;
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001073 int status = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001074
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001075 if (!_PyRuntime.initialized)
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001076 return status;
Nick Coghland6009512014-11-20 21:39:37 +10001077
1078 wait_for_thread_shutdown();
1079
1080 /* The interpreter is still entirely intact at this point, and the
1081 * exit funcs may be relying on that. In particular, if some thread
1082 * or exit func is still waiting to do an import, the import machinery
1083 * expects Py_IsInitialized() to return true. So don't say the
1084 * interpreter is uninitialized until after the exit funcs have run.
1085 * Note that Threading.py uses an exit func to do a join on all the
1086 * threads created thru it, so this also protects pending imports in
1087 * the threads created via Threading.
1088 */
1089 call_py_exitfuncs();
1090
1091 /* Get current thread state and interpreter pointer */
1092 tstate = PyThreadState_GET();
1093 interp = tstate->interp;
1094
1095 /* Remaining threads (e.g. daemon threads) will automatically exit
1096 after taking the GIL (in PyEval_RestoreThread()). */
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001097 _PyRuntime.finalizing = tstate;
1098 _PyRuntime.initialized = 0;
1099 _PyRuntime.core_initialized = 0;
Nick Coghland6009512014-11-20 21:39:37 +10001100
Victor Stinnere0deff32015-03-24 13:46:18 +01001101 /* Flush sys.stdout and sys.stderr */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001102 if (flush_std_files() < 0) {
1103 status = -1;
1104 }
Nick Coghland6009512014-11-20 21:39:37 +10001105
1106 /* Disable signal handling */
1107 PyOS_FiniInterrupts();
1108
1109 /* Collect garbage. This may call finalizers; it's nice to call these
1110 * before all modules are destroyed.
1111 * XXX If a __del__ or weakref callback is triggered here, and tries to
1112 * XXX import a module, bad things can happen, because Python no
1113 * XXX longer believes it's initialized.
1114 * XXX Fatal Python error: Interpreter not initialized (version mismatch?)
1115 * XXX is easy to provoke that way. I've also seen, e.g.,
1116 * XXX Exception exceptions.ImportError: 'No module named sha'
1117 * XXX in <function callback at 0x008F5718> ignored
1118 * XXX but I'm unclear on exactly how that one happens. In any case,
1119 * XXX I haven't seen a real-life report of either of these.
1120 */
Łukasz Langafef7e942016-09-09 21:47:46 -07001121 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001122#ifdef COUNT_ALLOCS
1123 /* With COUNT_ALLOCS, it helps to run GC multiple times:
1124 each collection might release some types from the type
1125 list, so they become garbage. */
Łukasz Langafef7e942016-09-09 21:47:46 -07001126 while (_PyGC_CollectIfEnabled() > 0)
Nick Coghland6009512014-11-20 21:39:37 +10001127 /* nothing */;
1128#endif
Eric Snowdae02762017-09-14 00:35:58 -07001129
Nick Coghland6009512014-11-20 21:39:37 +10001130 /* Destroy all modules */
1131 PyImport_Cleanup();
1132
Victor Stinnere0deff32015-03-24 13:46:18 +01001133 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001134 if (flush_std_files() < 0) {
1135 status = -1;
1136 }
Nick Coghland6009512014-11-20 21:39:37 +10001137
1138 /* Collect final garbage. This disposes of cycles created by
1139 * class definitions, for example.
1140 * XXX This is disabled because it caused too many problems. If
1141 * XXX a __del__ or weakref callback triggers here, Python code has
1142 * XXX a hard time running, because even the sys module has been
1143 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc).
1144 * XXX One symptom is a sequence of information-free messages
1145 * XXX coming from threads (if a __del__ or callback is invoked,
1146 * XXX other threads can execute too, and any exception they encounter
1147 * XXX triggers a comedy of errors as subsystem after subsystem
1148 * XXX fails to find what it *expects* to find in sys to help report
1149 * XXX the exception and consequent unexpected failures). I've also
1150 * XXX seen segfaults then, after adding print statements to the
1151 * XXX Python code getting called.
1152 */
1153#if 0
Łukasz Langafef7e942016-09-09 21:47:46 -07001154 _PyGC_CollectIfEnabled();
Nick Coghland6009512014-11-20 21:39:37 +10001155#endif
1156
1157 /* Disable tracemalloc after all Python objects have been destroyed,
1158 so it is possible to use tracemalloc in objects destructor. */
1159 _PyTraceMalloc_Fini();
1160
1161 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */
1162 _PyImport_Fini();
1163
1164 /* Cleanup typeobject.c's internal caches. */
1165 _PyType_Fini();
1166
1167 /* unload faulthandler module */
1168 _PyFaulthandler_Fini();
1169
1170 /* Debugging stuff */
1171#ifdef COUNT_ALLOCS
Serhiy Storchaka7e160ce2016-07-03 21:03:53 +03001172 dump_counts(stderr);
Nick Coghland6009512014-11-20 21:39:37 +10001173#endif
1174 /* dump hash stats */
1175 _PyHash_Fini();
1176
Eric Snowdae02762017-09-14 00:35:58 -07001177#ifdef Py_REF_DEBUG
Victor Stinner25420fe2017-11-20 18:12:22 -08001178 if (interp->core_config.show_ref_count) {
1179 _PyDebug_PrintTotalRefs();
1180 }
Eric Snowdae02762017-09-14 00:35:58 -07001181#endif
Nick Coghland6009512014-11-20 21:39:37 +10001182
1183#ifdef Py_TRACE_REFS
1184 /* Display all objects still alive -- this can invoke arbitrary
1185 * __repr__ overrides, so requires a mostly-intact interpreter.
1186 * Alas, a lot of stuff may still be alive now that will be cleaned
1187 * up later.
1188 */
1189 if (Py_GETENV("PYTHONDUMPREFS"))
1190 _Py_PrintReferences(stderr);
1191#endif /* Py_TRACE_REFS */
1192
1193 /* Clear interpreter state and all thread states. */
1194 PyInterpreterState_Clear(interp);
1195
1196 /* Now we decref the exception classes. After this point nothing
1197 can raise an exception. That's okay, because each Fini() method
1198 below has been checked to make sure no exceptions are ever
1199 raised.
1200 */
1201
1202 _PyExc_Fini();
1203
1204 /* Sundry finalizers */
1205 PyMethod_Fini();
1206 PyFrame_Fini();
1207 PyCFunction_Fini();
1208 PyTuple_Fini();
1209 PyList_Fini();
1210 PySet_Fini();
1211 PyBytes_Fini();
1212 PyByteArray_Fini();
1213 PyLong_Fini();
1214 PyFloat_Fini();
1215 PyDict_Fini();
1216 PySlice_Fini();
1217 _PyGC_Fini();
Eric Snow6b4be192017-05-22 21:36:03 -07001218 _Py_HashRandomization_Fini();
Serhiy Storchaka9171a8b2016-08-14 10:52:18 +03001219 _PyArg_Fini();
Yury Selivanoveb636452016-09-08 22:01:51 -07001220 PyAsyncGen_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001221
1222 /* Cleanup Unicode implementation */
1223 _PyUnicode_Fini();
1224
1225 /* reset file system default encoding */
1226 if (!Py_HasFileSystemDefaultEncoding && Py_FileSystemDefaultEncoding) {
1227 PyMem_RawFree((char*)Py_FileSystemDefaultEncoding);
1228 Py_FileSystemDefaultEncoding = NULL;
1229 }
1230
1231 /* XXX Still allocated:
1232 - various static ad-hoc pointers to interned strings
1233 - int and float free list blocks
1234 - whatever various modules and libraries allocate
1235 */
1236
1237 PyGrammar_RemoveAccelerators(&_PyParser_Grammar);
1238
1239 /* Cleanup auto-thread-state */
Nick Coghland6009512014-11-20 21:39:37 +10001240 _PyGILState_Fini();
Nick Coghland6009512014-11-20 21:39:37 +10001241
1242 /* Delete current thread. After this, many C API calls become crashy. */
1243 PyThreadState_Swap(NULL);
Victor Stinner8a1be612016-03-14 22:07:55 +01001244
Nick Coghland6009512014-11-20 21:39:37 +10001245 PyInterpreterState_Delete(interp);
1246
1247#ifdef Py_TRACE_REFS
1248 /* Display addresses (& refcnts) of all objects still alive.
1249 * An address can be used to find the repr of the object, printed
1250 * above by _Py_PrintReferences.
1251 */
1252 if (Py_GETENV("PYTHONDUMPREFS"))
1253 _Py_PrintReferenceAddresses(stderr);
1254#endif /* Py_TRACE_REFS */
Victor Stinner34be8072016-03-14 12:04:26 +01001255#ifdef WITH_PYMALLOC
1256 if (_PyMem_PymallocEnabled()) {
1257 char *opt = Py_GETENV("PYTHONMALLOCSTATS");
1258 if (opt != NULL && *opt != '\0')
1259 _PyObject_DebugMallocStats(stderr);
1260 }
Nick Coghland6009512014-11-20 21:39:37 +10001261#endif
1262
1263 call_ll_exitfuncs();
Eric Snow2ebc5ce2017-09-07 23:51:28 -06001264 _PyRuntime_Finalize();
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001265 return status;
1266}
1267
1268void
1269Py_Finalize(void)
1270{
1271 Py_FinalizeEx();
Nick Coghland6009512014-11-20 21:39:37 +10001272}
1273
1274/* Create and initialize a new interpreter and thread, and return the
1275 new thread. This requires that Py_Initialize() has been called
1276 first.
1277
1278 Unsuccessful initialization yields a NULL pointer. Note that *no*
1279 exception information is available even in this case -- the
1280 exception information is held in the thread, and there is no
1281 thread.
1282
1283 Locking: as above.
1284
1285*/
1286
Victor Stinnera7368ac2017-11-15 18:11:45 -08001287static _PyInitError
1288new_interpreter(PyThreadState **tstate_p)
Nick Coghland6009512014-11-20 21:39:37 +10001289{
1290 PyInterpreterState *interp;
1291 PyThreadState *tstate, *save_tstate;
1292 PyObject *bimod, *sysmod;
1293
Victor Stinnera7368ac2017-11-15 18:11:45 -08001294 if (!_PyRuntime.initialized) {
1295 return _Py_INIT_ERR("Py_Initialize must be called first");
1296 }
Nick Coghland6009512014-11-20 21:39:37 +10001297
Victor Stinner8a1be612016-03-14 22:07:55 +01001298 /* Issue #10915, #15751: The GIL API doesn't work with multiple
1299 interpreters: disable PyGILState_Check(). */
1300 _PyGILState_check_enabled = 0;
1301
Nick Coghland6009512014-11-20 21:39:37 +10001302 interp = PyInterpreterState_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001303 if (interp == NULL) {
1304 *tstate_p = NULL;
1305 return _Py_INIT_OK();
1306 }
Nick Coghland6009512014-11-20 21:39:37 +10001307
1308 tstate = PyThreadState_New(interp);
1309 if (tstate == NULL) {
1310 PyInterpreterState_Delete(interp);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001311 *tstate_p = NULL;
1312 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001313 }
1314
1315 save_tstate = PyThreadState_Swap(tstate);
1316
Eric Snow1abcf672017-05-23 21:46:51 -07001317 /* Copy the current interpreter config into the new interpreter */
1318 if (save_tstate != NULL) {
1319 interp->core_config = save_tstate->interp->core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -07001320 interp->config = save_tstate->interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001321 } else {
1322 /* No current thread state, copy from the main interpreter */
1323 PyInterpreterState *main_interp = PyInterpreterState_Main();
1324 interp->core_config = main_interp->core_config;
Eric Snowc7ec9982017-05-23 23:00:52 -07001325 interp->config = main_interp->config;
Eric Snow1abcf672017-05-23 21:46:51 -07001326 }
1327
Nick Coghland6009512014-11-20 21:39:37 +10001328 /* XXX The following is lax in error checking */
1329
Victor Stinnere32e79f2017-11-23 01:49:45 +01001330 wchar_t *sys_path = _Py_GetPathWithConfig(&interp->config);
Victor Stinnerd4341102017-11-23 00:12:09 +01001331
Eric Snowd393c1b2017-09-14 12:18:12 -06001332 PyObject *modules = PyDict_New();
Victor Stinnera7368ac2017-11-15 18:11:45 -08001333 if (modules == NULL) {
1334 return _Py_INIT_ERR("can't make modules dictionary");
1335 }
Eric Snowd393c1b2017-09-14 12:18:12 -06001336 interp->modules = modules;
Nick Coghland6009512014-11-20 21:39:37 +10001337
Eric Snowd393c1b2017-09-14 12:18:12 -06001338 sysmod = _PyImport_FindBuiltin("sys", modules);
1339 if (sysmod != NULL) {
1340 interp->sysdict = PyModule_GetDict(sysmod);
1341 if (interp->sysdict == NULL)
1342 goto handle_error;
1343 Py_INCREF(interp->sysdict);
1344 PyDict_SetItemString(interp->sysdict, "modules", modules);
Victor Stinnerd4341102017-11-23 00:12:09 +01001345 PySys_SetPath(sys_path);
Eric Snowd393c1b2017-09-14 12:18:12 -06001346 _PySys_EndInit(interp->sysdict);
1347 }
1348
1349 bimod = _PyImport_FindBuiltin("builtins", modules);
Nick Coghland6009512014-11-20 21:39:37 +10001350 if (bimod != NULL) {
1351 interp->builtins = PyModule_GetDict(bimod);
1352 if (interp->builtins == NULL)
1353 goto handle_error;
1354 Py_INCREF(interp->builtins);
1355 }
1356
1357 /* initialize builtin exceptions */
1358 _PyExc_Init(bimod);
1359
Nick Coghland6009512014-11-20 21:39:37 +10001360 if (bimod != NULL && sysmod != NULL) {
1361 PyObject *pstderr;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001362 _PyInitError err;
Nick Coghland6009512014-11-20 21:39:37 +10001363
Nick Coghland6009512014-11-20 21:39:37 +10001364 /* Set up a preliminary stderr printer until we have enough
1365 infrastructure for the io module in place. */
1366 pstderr = PyFile_NewStdPrinter(fileno(stderr));
Victor Stinnera7368ac2017-11-15 18:11:45 -08001367 if (pstderr == NULL) {
1368 return _Py_INIT_ERR("can't set preliminary stderr");
1369 }
Nick Coghland6009512014-11-20 21:39:37 +10001370 _PySys_SetObjectId(&PyId_stderr, pstderr);
1371 PySys_SetObject("__stderr__", pstderr);
1372 Py_DECREF(pstderr);
1373
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001374 err = _PyImportHooks_Init();
1375 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001376 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001377 }
Nick Coghland6009512014-11-20 21:39:37 +10001378
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001379 err = initimport(interp, sysmod);
1380 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001381 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001382 }
Nick Coghland6009512014-11-20 21:39:37 +10001383
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001384 err = initexternalimport(interp);
1385 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001386 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001387 }
Nick Coghland6009512014-11-20 21:39:37 +10001388
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001389 err = initfsencoding(interp);
1390 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001391 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001392 }
1393
Victor Stinnera7368ac2017-11-15 18:11:45 -08001394 err = init_sys_streams();
1395 if (_Py_INIT_FAILED(err)) {
1396 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001397 }
1398
1399 err = add_main_module(interp);
1400 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001401 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001402 }
1403
1404 if (!Py_NoSiteFlag) {
1405 err = initsite();
1406 if (_Py_INIT_FAILED(err)) {
Victor Stinnera7368ac2017-11-15 18:11:45 -08001407 return err;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001408 }
1409 }
Nick Coghland6009512014-11-20 21:39:37 +10001410 }
1411
Victor Stinnera7368ac2017-11-15 18:11:45 -08001412 if (PyErr_Occurred()) {
1413 goto handle_error;
1414 }
Nick Coghland6009512014-11-20 21:39:37 +10001415
Victor Stinnera7368ac2017-11-15 18:11:45 -08001416 *tstate_p = tstate;
1417 return _Py_INIT_OK();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001418
Nick Coghland6009512014-11-20 21:39:37 +10001419handle_error:
1420 /* Oops, it didn't work. Undo it all. */
1421
1422 PyErr_PrintEx(0);
1423 PyThreadState_Clear(tstate);
1424 PyThreadState_Swap(save_tstate);
1425 PyThreadState_Delete(tstate);
1426 PyInterpreterState_Delete(interp);
1427
Victor Stinnera7368ac2017-11-15 18:11:45 -08001428 *tstate_p = NULL;
1429 return _Py_INIT_OK();
1430}
1431
1432PyThreadState *
1433Py_NewInterpreter(void)
1434{
1435 PyThreadState *tstate;
1436 _PyInitError err = new_interpreter(&tstate);
1437 if (_Py_INIT_FAILED(err)) {
1438 _Py_FatalInitError(err);
1439 }
1440 return tstate;
1441
Nick Coghland6009512014-11-20 21:39:37 +10001442}
1443
1444/* Delete an interpreter and its last thread. This requires that the
1445 given thread state is current, that the thread has no remaining
1446 frames, and that it is its interpreter's only remaining thread.
1447 It is a fatal error to violate these constraints.
1448
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001449 (Py_FinalizeEx() doesn't have these constraints -- it zaps
Nick Coghland6009512014-11-20 21:39:37 +10001450 everything, regardless.)
1451
1452 Locking: as above.
1453
1454*/
1455
1456void
1457Py_EndInterpreter(PyThreadState *tstate)
1458{
1459 PyInterpreterState *interp = tstate->interp;
1460
1461 if (tstate != PyThreadState_GET())
1462 Py_FatalError("Py_EndInterpreter: thread is not current");
1463 if (tstate->frame != NULL)
1464 Py_FatalError("Py_EndInterpreter: thread still has a frame");
1465
1466 wait_for_thread_shutdown();
1467
1468 if (tstate != interp->tstate_head || tstate->next != NULL)
1469 Py_FatalError("Py_EndInterpreter: not the last thread");
1470
1471 PyImport_Cleanup();
1472 PyInterpreterState_Clear(interp);
1473 PyThreadState_Swap(NULL);
1474 PyInterpreterState_Delete(interp);
1475}
1476
1477#ifdef MS_WINDOWS
1478static wchar_t *progname = L"python";
1479#else
1480static wchar_t *progname = L"python3";
1481#endif
1482
1483void
1484Py_SetProgramName(wchar_t *pn)
1485{
1486 if (pn && *pn)
1487 progname = pn;
1488}
1489
1490wchar_t *
1491Py_GetProgramName(void)
1492{
1493 return progname;
1494}
1495
1496static wchar_t *default_home = NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001497
1498void
1499Py_SetPythonHome(wchar_t *home)
1500{
1501 default_home = home;
1502}
1503
Victor Stinner0327bde2017-11-23 17:03:20 +01001504
Victor Stinner46972b72017-11-24 22:55:40 +01001505wchar_t*
1506Py_GetPythonHome(void)
Victor Stinner1f151112017-11-23 10:43:14 +01001507{
1508 /* Use a static buffer to avoid heap memory allocation failure.
1509 Py_GetPythonHome() doesn't allow to report error, and the caller
1510 doesn't release memory. */
1511 static wchar_t buffer[MAXPATHLEN+1];
1512
1513 if (default_home) {
Victor Stinner46972b72017-11-24 22:55:40 +01001514 return default_home;
Victor Stinner1f151112017-11-23 10:43:14 +01001515 }
1516
1517 char *home = Py_GETENV("PYTHONHOME");
1518 if (!home) {
Victor Stinner46972b72017-11-24 22:55:40 +01001519 return NULL;
Victor Stinner1f151112017-11-23 10:43:14 +01001520 }
1521
1522 size_t size = Py_ARRAY_LENGTH(buffer);
1523 size_t r = mbstowcs(buffer, home, size);
1524 if (r == (size_t)-1 || r >= size) {
1525 /* conversion failed or the static buffer is too small */
Victor Stinner46972b72017-11-24 22:55:40 +01001526 return NULL;
Victor Stinner1f151112017-11-23 10:43:14 +01001527 }
1528
Victor Stinner46972b72017-11-24 22:55:40 +01001529 return buffer;
Nick Coghland6009512014-11-20 21:39:37 +10001530}
1531
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001532/* Add the __main__ module */
Nick Coghland6009512014-11-20 21:39:37 +10001533
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001534static _PyInitError
1535add_main_module(PyInterpreterState *interp)
Nick Coghland6009512014-11-20 21:39:37 +10001536{
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001537 PyObject *m, *d, *loader, *ann_dict;
Nick Coghland6009512014-11-20 21:39:37 +10001538 m = PyImport_AddModule("__main__");
1539 if (m == NULL)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001540 return _Py_INIT_ERR("can't create __main__ module");
1541
Nick Coghland6009512014-11-20 21:39:37 +10001542 d = PyModule_GetDict(m);
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001543 ann_dict = PyDict_New();
1544 if ((ann_dict == NULL) ||
1545 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001546 return _Py_INIT_ERR("Failed to initialize __main__.__annotations__");
Yury Selivanovf8cb8a12016-09-08 20:50:03 -07001547 }
1548 Py_DECREF(ann_dict);
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001549
Nick Coghland6009512014-11-20 21:39:37 +10001550 if (PyDict_GetItemString(d, "__builtins__") == NULL) {
1551 PyObject *bimod = PyImport_ImportModule("builtins");
1552 if (bimod == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001553 return _Py_INIT_ERR("Failed to retrieve builtins module");
Nick Coghland6009512014-11-20 21:39:37 +10001554 }
1555 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001556 return _Py_INIT_ERR("Failed to initialize __main__.__builtins__");
Nick Coghland6009512014-11-20 21:39:37 +10001557 }
1558 Py_DECREF(bimod);
1559 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001560
Nick Coghland6009512014-11-20 21:39:37 +10001561 /* Main is a little special - imp.is_builtin("__main__") will return
1562 * False, but BuiltinImporter is still the most appropriate initial
1563 * setting for its __loader__ attribute. A more suitable value will
1564 * be set if __main__ gets further initialized later in the startup
1565 * process.
1566 */
1567 loader = PyDict_GetItemString(d, "__loader__");
1568 if (loader == NULL || loader == Py_None) {
1569 PyObject *loader = PyObject_GetAttrString(interp->importlib,
1570 "BuiltinImporter");
1571 if (loader == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001572 return _Py_INIT_ERR("Failed to retrieve BuiltinImporter");
Nick Coghland6009512014-11-20 21:39:37 +10001573 }
1574 if (PyDict_SetItemString(d, "__loader__", loader) < 0) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001575 return _Py_INIT_ERR("Failed to initialize __main__.__loader__");
Nick Coghland6009512014-11-20 21:39:37 +10001576 }
1577 Py_DECREF(loader);
1578 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001579 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001580}
1581
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001582static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001583initfsencoding(PyInterpreterState *interp)
1584{
1585 PyObject *codec;
1586
Steve Dowercc16be82016-09-08 10:35:16 -07001587#ifdef MS_WINDOWS
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001588 if (Py_LegacyWindowsFSEncodingFlag) {
Steve Dowercc16be82016-09-08 10:35:16 -07001589 Py_FileSystemDefaultEncoding = "mbcs";
1590 Py_FileSystemDefaultEncodeErrors = "replace";
1591 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001592 else {
Steve Dowercc16be82016-09-08 10:35:16 -07001593 Py_FileSystemDefaultEncoding = "utf-8";
1594 Py_FileSystemDefaultEncodeErrors = "surrogatepass";
1595 }
1596#else
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001597 if (Py_FileSystemDefaultEncoding == NULL) {
Nick Coghland6009512014-11-20 21:39:37 +10001598 Py_FileSystemDefaultEncoding = get_locale_encoding();
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001599 if (Py_FileSystemDefaultEncoding == NULL) {
1600 return _Py_INIT_ERR("Unable to get the locale encoding");
1601 }
Nick Coghland6009512014-11-20 21:39:37 +10001602
1603 Py_HasFileSystemDefaultEncoding = 0;
1604 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001605 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001606 }
Steve Dowercc16be82016-09-08 10:35:16 -07001607#endif
Nick Coghland6009512014-11-20 21:39:37 +10001608
1609 /* the encoding is mbcs, utf-8 or ascii */
1610 codec = _PyCodec_Lookup(Py_FileSystemDefaultEncoding);
1611 if (!codec) {
1612 /* Such error can only occurs in critical situations: no more
1613 * memory, import a module of the standard library failed,
1614 * etc. */
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001615 return _Py_INIT_ERR("unable to load the file system codec");
Nick Coghland6009512014-11-20 21:39:37 +10001616 }
1617 Py_DECREF(codec);
1618 interp->fscodec_initialized = 1;
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001619 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001620}
1621
1622/* Import the site module (not into __main__ though) */
1623
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001624static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10001625initsite(void)
1626{
1627 PyObject *m;
1628 m = PyImport_ImportModule("site");
1629 if (m == NULL) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001630 return _Py_INIT_USER_ERR("Failed to import the site module");
Nick Coghland6009512014-11-20 21:39:37 +10001631 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08001632 Py_DECREF(m);
1633 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001634}
1635
Victor Stinner874dbe82015-09-04 17:29:57 +02001636/* Check if a file descriptor is valid or not.
1637 Return 0 if the file descriptor is invalid, return non-zero otherwise. */
1638static int
1639is_valid_fd(int fd)
1640{
Victor Stinner1c4670e2017-05-04 00:45:56 +02001641#ifdef __APPLE__
1642 /* bpo-30225: On macOS Tiger, when stdout is redirected to a pipe
1643 and the other side of the pipe is closed, dup(1) succeed, whereas
1644 fstat(1, &st) fails with EBADF. Prefer fstat() over dup() to detect
1645 such error. */
1646 struct stat st;
1647 return (fstat(fd, &st) == 0);
1648#else
Victor Stinner874dbe82015-09-04 17:29:57 +02001649 int fd2;
Steve Dower940f33a2016-09-08 11:21:54 -07001650 if (fd < 0)
Victor Stinner874dbe82015-09-04 17:29:57 +02001651 return 0;
1652 _Py_BEGIN_SUPPRESS_IPH
Victor Stinner449b2712015-09-29 13:59:50 +02001653 /* Prefer dup() over fstat(). fstat() can require input/output whereas
1654 dup() doesn't, there is a low risk of EMFILE/ENFILE at Python
1655 startup. */
Victor Stinner874dbe82015-09-04 17:29:57 +02001656 fd2 = dup(fd);
1657 if (fd2 >= 0)
1658 close(fd2);
1659 _Py_END_SUPPRESS_IPH
1660 return fd2 >= 0;
Victor Stinner1c4670e2017-05-04 00:45:56 +02001661#endif
Victor Stinner874dbe82015-09-04 17:29:57 +02001662}
1663
1664/* returns Py_None if the fd is not valid */
Nick Coghland6009512014-11-20 21:39:37 +10001665static PyObject*
1666create_stdio(PyObject* io,
Serhiy Storchakaef1585e2015-12-25 20:01:53 +02001667 int fd, int write_mode, const char* name,
1668 const char* encoding, const char* errors)
Nick Coghland6009512014-11-20 21:39:37 +10001669{
1670 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res;
1671 const char* mode;
1672 const char* newline;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001673 PyObject *line_buffering, *write_through;
Nick Coghland6009512014-11-20 21:39:37 +10001674 int buffering, isatty;
1675 _Py_IDENTIFIER(open);
1676 _Py_IDENTIFIER(isatty);
1677 _Py_IDENTIFIER(TextIOWrapper);
1678 _Py_IDENTIFIER(mode);
1679
Victor Stinner874dbe82015-09-04 17:29:57 +02001680 if (!is_valid_fd(fd))
1681 Py_RETURN_NONE;
1682
Nick Coghland6009512014-11-20 21:39:37 +10001683 /* stdin is always opened in buffered mode, first because it shouldn't
1684 make a difference in common use cases, second because TextIOWrapper
1685 depends on the presence of a read1() method which only exists on
1686 buffered streams.
1687 */
1688 if (Py_UnbufferedStdioFlag && write_mode)
1689 buffering = 0;
1690 else
1691 buffering = -1;
1692 if (write_mode)
1693 mode = "wb";
1694 else
1695 mode = "rb";
1696 buf = _PyObject_CallMethodId(io, &PyId_open, "isiOOOi",
1697 fd, mode, buffering,
Martin Panterb4ce1fc2015-11-30 03:18:29 +00001698 Py_None, Py_None, /* encoding, errors */
1699 Py_None, 0); /* newline, closefd */
Nick Coghland6009512014-11-20 21:39:37 +10001700 if (buf == NULL)
1701 goto error;
1702
1703 if (buffering) {
1704 _Py_IDENTIFIER(raw);
1705 raw = _PyObject_GetAttrId(buf, &PyId_raw);
1706 if (raw == NULL)
1707 goto error;
1708 }
1709 else {
1710 raw = buf;
1711 Py_INCREF(raw);
1712 }
1713
Steve Dower39294992016-08-30 21:22:36 -07001714#ifdef MS_WINDOWS
1715 /* Windows console IO is always UTF-8 encoded */
1716 if (PyWindowsConsoleIO_Check(raw))
1717 encoding = "utf-8";
1718#endif
1719
Nick Coghland6009512014-11-20 21:39:37 +10001720 text = PyUnicode_FromString(name);
1721 if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0)
1722 goto error;
Victor Stinner3466bde2016-09-05 18:16:01 -07001723 res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10001724 if (res == NULL)
1725 goto error;
1726 isatty = PyObject_IsTrue(res);
1727 Py_DECREF(res);
1728 if (isatty == -1)
1729 goto error;
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001730 if (Py_UnbufferedStdioFlag)
1731 write_through = Py_True;
1732 else
1733 write_through = Py_False;
1734 if (isatty && !Py_UnbufferedStdioFlag)
Nick Coghland6009512014-11-20 21:39:37 +10001735 line_buffering = Py_True;
1736 else
1737 line_buffering = Py_False;
1738
1739 Py_CLEAR(raw);
1740 Py_CLEAR(text);
1741
1742#ifdef MS_WINDOWS
1743 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r"
1744 newlines to "\n".
1745 sys.stdout and sys.stderr: translate "\n" to "\r\n". */
1746 newline = NULL;
1747#else
1748 /* sys.stdin: split lines at "\n".
1749 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */
1750 newline = "\n";
1751#endif
1752
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001753 stream = _PyObject_CallMethodId(io, &PyId_TextIOWrapper, "OsssOO",
Nick Coghland6009512014-11-20 21:39:37 +10001754 buf, encoding, errors,
Serhiy Storchaka77732be2017-10-04 20:25:40 +03001755 newline, line_buffering, write_through);
Nick Coghland6009512014-11-20 21:39:37 +10001756 Py_CLEAR(buf);
1757 if (stream == NULL)
1758 goto error;
1759
1760 if (write_mode)
1761 mode = "w";
1762 else
1763 mode = "r";
1764 text = PyUnicode_FromString(mode);
1765 if (!text || _PyObject_SetAttrId(stream, &PyId_mode, text) < 0)
1766 goto error;
1767 Py_CLEAR(text);
1768 return stream;
1769
1770error:
1771 Py_XDECREF(buf);
1772 Py_XDECREF(stream);
1773 Py_XDECREF(text);
1774 Py_XDECREF(raw);
Nick Coghland6009512014-11-20 21:39:37 +10001775
Victor Stinner874dbe82015-09-04 17:29:57 +02001776 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) {
1777 /* Issue #24891: the file descriptor was closed after the first
1778 is_valid_fd() check was called. Ignore the OSError and set the
1779 stream to None. */
1780 PyErr_Clear();
1781 Py_RETURN_NONE;
1782 }
1783 return NULL;
Nick Coghland6009512014-11-20 21:39:37 +10001784}
1785
1786/* Initialize sys.stdin, stdout, stderr and builtins.open */
Victor Stinnera7368ac2017-11-15 18:11:45 -08001787static _PyInitError
1788init_sys_streams(void)
Nick Coghland6009512014-11-20 21:39:37 +10001789{
1790 PyObject *iomod = NULL, *wrapper;
1791 PyObject *bimod = NULL;
1792 PyObject *m;
1793 PyObject *std = NULL;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001794 int fd;
Nick Coghland6009512014-11-20 21:39:37 +10001795 PyObject * encoding_attr;
1796 char *pythonioencoding = NULL, *encoding, *errors;
Victor Stinnera7368ac2017-11-15 18:11:45 -08001797 _PyInitError res = _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10001798
1799 /* Hack to avoid a nasty recursion issue when Python is invoked
1800 in verbose mode: pre-import the Latin-1 and UTF-8 codecs */
1801 if ((m = PyImport_ImportModule("encodings.utf_8")) == NULL) {
1802 goto error;
1803 }
1804 Py_DECREF(m);
1805
1806 if (!(m = PyImport_ImportModule("encodings.latin_1"))) {
1807 goto error;
1808 }
1809 Py_DECREF(m);
1810
1811 if (!(bimod = PyImport_ImportModule("builtins"))) {
1812 goto error;
1813 }
1814
1815 if (!(iomod = PyImport_ImportModule("io"))) {
1816 goto error;
1817 }
1818 if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
1819 goto error;
1820 }
1821
1822 /* Set builtins.open */
1823 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) {
1824 Py_DECREF(wrapper);
1825 goto error;
1826 }
1827 Py_DECREF(wrapper);
1828
1829 encoding = _Py_StandardStreamEncoding;
1830 errors = _Py_StandardStreamErrors;
1831 if (!encoding || !errors) {
Nick Coghland6009512014-11-20 21:39:37 +10001832 pythonioencoding = Py_GETENV("PYTHONIOENCODING");
1833 if (pythonioencoding) {
1834 char *err;
1835 pythonioencoding = _PyMem_Strdup(pythonioencoding);
1836 if (pythonioencoding == NULL) {
1837 PyErr_NoMemory();
1838 goto error;
1839 }
1840 err = strchr(pythonioencoding, ':');
1841 if (err) {
1842 *err = '\0';
1843 err++;
Serhiy Storchakafc435112016-04-10 14:34:13 +03001844 if (*err && !errors) {
Nick Coghland6009512014-11-20 21:39:37 +10001845 errors = err;
1846 }
1847 }
1848 if (*pythonioencoding && !encoding) {
1849 encoding = pythonioencoding;
1850 }
1851 }
Serhiy Storchakafc435112016-04-10 14:34:13 +03001852 if (!errors && !(pythonioencoding && *pythonioencoding)) {
Nick Coghlan6ea41862017-06-11 13:16:15 +10001853 /* Choose the default error handler based on the current locale */
1854 errors = get_default_standard_stream_error_handler();
Serhiy Storchakafc435112016-04-10 14:34:13 +03001855 }
Nick Coghland6009512014-11-20 21:39:37 +10001856 }
1857
1858 /* Set sys.stdin */
1859 fd = fileno(stdin);
1860 /* Under some conditions stdin, stdout and stderr may not be connected
1861 * and fileno() may point to an invalid file descriptor. For example
1862 * GUI apps don't have valid standard streams by default.
1863 */
Victor Stinner874dbe82015-09-04 17:29:57 +02001864 std = create_stdio(iomod, fd, 0, "<stdin>", encoding, errors);
1865 if (std == NULL)
1866 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001867 PySys_SetObject("__stdin__", std);
1868 _PySys_SetObjectId(&PyId_stdin, std);
1869 Py_DECREF(std);
1870
1871 /* Set sys.stdout */
1872 fd = fileno(stdout);
Victor Stinner874dbe82015-09-04 17:29:57 +02001873 std = create_stdio(iomod, fd, 1, "<stdout>", encoding, errors);
1874 if (std == NULL)
1875 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001876 PySys_SetObject("__stdout__", std);
1877 _PySys_SetObjectId(&PyId_stdout, std);
1878 Py_DECREF(std);
1879
1880#if 1 /* Disable this if you have trouble debugging bootstrap stuff */
1881 /* Set sys.stderr, replaces the preliminary stderr */
1882 fd = fileno(stderr);
Victor Stinner874dbe82015-09-04 17:29:57 +02001883 std = create_stdio(iomod, fd, 1, "<stderr>", encoding, "backslashreplace");
1884 if (std == NULL)
1885 goto error;
Nick Coghland6009512014-11-20 21:39:37 +10001886
1887 /* Same as hack above, pre-import stderr's codec to avoid recursion
1888 when import.c tries to write to stderr in verbose mode. */
1889 encoding_attr = PyObject_GetAttrString(std, "encoding");
1890 if (encoding_attr != NULL) {
Serhiy Storchaka85b0f5b2016-11-20 10:16:47 +02001891 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr);
Nick Coghland6009512014-11-20 21:39:37 +10001892 if (std_encoding != NULL) {
1893 PyObject *codec_info = _PyCodec_Lookup(std_encoding);
1894 Py_XDECREF(codec_info);
1895 }
1896 Py_DECREF(encoding_attr);
1897 }
1898 PyErr_Clear(); /* Not a fatal error if codec isn't available */
1899
1900 if (PySys_SetObject("__stderr__", std) < 0) {
1901 Py_DECREF(std);
1902 goto error;
1903 }
1904 if (_PySys_SetObjectId(&PyId_stderr, std) < 0) {
1905 Py_DECREF(std);
1906 goto error;
1907 }
1908 Py_DECREF(std);
1909#endif
1910
Victor Stinnera7368ac2017-11-15 18:11:45 -08001911 goto done;
Nick Coghland6009512014-11-20 21:39:37 +10001912
Victor Stinnera7368ac2017-11-15 18:11:45 -08001913error:
1914 res = _Py_INIT_ERR("can't initialize sys standard streams");
1915
1916done:
Nick Coghland6009512014-11-20 21:39:37 +10001917 /* We won't need them anymore. */
1918 if (_Py_StandardStreamEncoding) {
1919 PyMem_RawFree(_Py_StandardStreamEncoding);
1920 _Py_StandardStreamEncoding = NULL;
1921 }
1922 if (_Py_StandardStreamErrors) {
1923 PyMem_RawFree(_Py_StandardStreamErrors);
1924 _Py_StandardStreamErrors = NULL;
1925 }
1926 PyMem_Free(pythonioencoding);
1927 Py_XDECREF(bimod);
1928 Py_XDECREF(iomod);
Victor Stinnera7368ac2017-11-15 18:11:45 -08001929 return res;
Nick Coghland6009512014-11-20 21:39:37 +10001930}
1931
1932
Victor Stinner10dc4842015-03-24 12:01:30 +01001933static void
Victor Stinner791da1c2016-03-14 16:53:12 +01001934_Py_FatalError_DumpTracebacks(int fd)
Victor Stinner10dc4842015-03-24 12:01:30 +01001935{
Victor Stinner10dc4842015-03-24 12:01:30 +01001936 fputc('\n', stderr);
1937 fflush(stderr);
1938
1939 /* display the current Python stack */
Victor Stinner861d9ab2016-03-16 22:45:24 +01001940 _Py_DumpTracebackThreads(fd, NULL, NULL);
Victor Stinner10dc4842015-03-24 12:01:30 +01001941}
Victor Stinner791da1c2016-03-14 16:53:12 +01001942
1943/* Print the current exception (if an exception is set) with its traceback,
1944 or display the current Python stack.
1945
1946 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is
1947 called on catastrophic cases.
1948
1949 Return 1 if the traceback was displayed, 0 otherwise. */
1950
1951static int
1952_Py_FatalError_PrintExc(int fd)
1953{
1954 PyObject *ferr, *res;
1955 PyObject *exception, *v, *tb;
1956 int has_tb;
1957
1958 if (PyThreadState_GET() == NULL) {
1959 /* The GIL is released: trying to acquire it is likely to deadlock,
1960 just give up. */
1961 return 0;
1962 }
1963
1964 PyErr_Fetch(&exception, &v, &tb);
1965 if (exception == NULL) {
1966 /* No current exception */
1967 return 0;
1968 }
1969
1970 ferr = _PySys_GetObjectId(&PyId_stderr);
1971 if (ferr == NULL || ferr == Py_None) {
1972 /* sys.stderr is not set yet or set to None,
1973 no need to try to display the exception */
1974 return 0;
1975 }
1976
1977 PyErr_NormalizeException(&exception, &v, &tb);
1978 if (tb == NULL) {
1979 tb = Py_None;
1980 Py_INCREF(tb);
1981 }
1982 PyException_SetTraceback(v, tb);
1983 if (exception == NULL) {
1984 /* PyErr_NormalizeException() failed */
1985 return 0;
1986 }
1987
1988 has_tb = (tb != Py_None);
1989 PyErr_Display(exception, v, tb);
1990 Py_XDECREF(exception);
1991 Py_XDECREF(v);
1992 Py_XDECREF(tb);
1993
1994 /* sys.stderr may be buffered: call sys.stderr.flush() */
Victor Stinner3466bde2016-09-05 18:16:01 -07001995 res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
Victor Stinner791da1c2016-03-14 16:53:12 +01001996 if (res == NULL)
1997 PyErr_Clear();
1998 else
1999 Py_DECREF(res);
2000
2001 return has_tb;
2002}
2003
Nick Coghland6009512014-11-20 21:39:37 +10002004/* Print fatal error message and abort */
2005
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002006#ifdef MS_WINDOWS
2007static void
2008fatal_output_debug(const char *msg)
2009{
2010 /* buffer of 256 bytes allocated on the stack */
2011 WCHAR buffer[256 / sizeof(WCHAR)];
2012 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1;
2013 size_t msglen;
2014
2015 OutputDebugStringW(L"Fatal Python error: ");
2016
2017 msglen = strlen(msg);
2018 while (msglen) {
2019 size_t i;
2020
2021 if (buflen > msglen) {
2022 buflen = msglen;
2023 }
2024
2025 /* Convert the message to wchar_t. This uses a simple one-to-one
2026 conversion, assuming that the this error message actually uses
2027 ASCII only. If this ceases to be true, we will have to convert. */
2028 for (i=0; i < buflen; ++i) {
2029 buffer[i] = msg[i];
2030 }
2031 buffer[i] = L'\0';
2032 OutputDebugStringW(buffer);
2033
2034 msg += buflen;
2035 msglen -= buflen;
2036 }
2037 OutputDebugStringW(L"\n");
2038}
2039#endif
2040
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002041static void
2042fatal_error(const char *prefix, const char *msg, int status)
Nick Coghland6009512014-11-20 21:39:37 +10002043{
2044 const int fd = fileno(stderr);
Victor Stinner53345a42015-03-25 01:55:14 +01002045 static int reentrant = 0;
Victor Stinner53345a42015-03-25 01:55:14 +01002046
2047 if (reentrant) {
2048 /* Py_FatalError() caused a second fatal error.
2049 Example: flush_std_files() raises a recursion error. */
2050 goto exit;
2051 }
2052 reentrant = 1;
Nick Coghland6009512014-11-20 21:39:37 +10002053
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002054 fprintf(stderr, "Fatal Python error: ");
2055 if (prefix) {
2056 fputs(prefix, stderr);
2057 fputs(": ", stderr);
2058 }
2059 if (msg) {
2060 fputs(msg, stderr);
2061 }
2062 else {
2063 fprintf(stderr, "<message not set>");
2064 }
2065 fputs("\n", stderr);
Nick Coghland6009512014-11-20 21:39:37 +10002066 fflush(stderr); /* it helps in Windows debug build */
Victor Stinner10dc4842015-03-24 12:01:30 +01002067
Victor Stinnere0deff32015-03-24 13:46:18 +01002068 /* Print the exception (if an exception is set) with its traceback,
2069 * or display the current Python stack. */
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002070 if (!_Py_FatalError_PrintExc(fd)) {
Victor Stinner791da1c2016-03-14 16:53:12 +01002071 _Py_FatalError_DumpTracebacks(fd);
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002072 }
Victor Stinner10dc4842015-03-24 12:01:30 +01002073
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002074 /* The main purpose of faulthandler is to display the traceback.
2075 This function already did its best to display a traceback.
2076 Disable faulthandler to prevent writing a second traceback
2077 on abort(). */
Victor Stinner2025d782016-03-16 23:19:15 +01002078 _PyFaulthandler_Fini();
2079
Victor Stinner791da1c2016-03-14 16:53:12 +01002080 /* Check if the current Python thread hold the GIL */
2081 if (PyThreadState_GET() != NULL) {
2082 /* Flush sys.stdout and sys.stderr */
2083 flush_std_files();
2084 }
Victor Stinnere0deff32015-03-24 13:46:18 +01002085
Nick Coghland6009512014-11-20 21:39:37 +10002086#ifdef MS_WINDOWS
Victor Stinner8d5a3aa2017-10-04 09:50:12 -07002087 fatal_output_debug(msg);
Victor Stinner53345a42015-03-25 01:55:14 +01002088#endif /* MS_WINDOWS */
2089
2090exit:
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002091 if (status < 0) {
Victor Stinner53345a42015-03-25 01:55:14 +01002092#if defined(MS_WINDOWS) && defined(_DEBUG)
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002093 DebugBreak();
Nick Coghland6009512014-11-20 21:39:37 +10002094#endif
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002095 abort();
2096 }
2097 else {
2098 exit(status);
2099 }
2100}
2101
2102void
2103Py_FatalError(const char *msg)
2104{
2105 fatal_error(NULL, msg, -1);
2106}
2107
2108void
2109_Py_FatalInitError(_PyInitError err)
2110{
2111 /* On "user" error: exit with status 1.
2112 For all other errors, call abort(). */
2113 int status = err.user_err ? 1 : -1;
2114 fatal_error(err.prefix, err.msg, status);
Nick Coghland6009512014-11-20 21:39:37 +10002115}
2116
2117/* Clean up and exit */
2118
Victor Stinnerd7292b52016-06-17 12:29:00 +02002119# include "pythread.h"
Nick Coghland6009512014-11-20 21:39:37 +10002120
Nick Coghland6009512014-11-20 21:39:37 +10002121/* For the atexit module. */
2122void _Py_PyAtExit(void (*func)(void))
2123{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002124 _PyRuntime.pyexitfunc = func;
Nick Coghland6009512014-11-20 21:39:37 +10002125}
2126
2127static void
2128call_py_exitfuncs(void)
2129{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002130 if (_PyRuntime.pyexitfunc == NULL)
Nick Coghland6009512014-11-20 21:39:37 +10002131 return;
2132
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002133 (*_PyRuntime.pyexitfunc)();
Nick Coghland6009512014-11-20 21:39:37 +10002134 PyErr_Clear();
2135}
2136
2137/* Wait until threading._shutdown completes, provided
2138 the threading module was imported in the first place.
2139 The shutdown routine will wait until all non-daemon
2140 "threading" threads have completed. */
2141static void
2142wait_for_thread_shutdown(void)
2143{
Nick Coghland6009512014-11-20 21:39:37 +10002144 _Py_IDENTIFIER(_shutdown);
2145 PyObject *result;
Eric Snow3f9eee62017-09-15 16:35:20 -06002146 PyObject *threading = _PyImport_GetModuleId(&PyId_threading);
Nick Coghland6009512014-11-20 21:39:37 +10002147 if (threading == NULL) {
2148 /* threading not imported */
2149 PyErr_Clear();
2150 return;
2151 }
Victor Stinner3466bde2016-09-05 18:16:01 -07002152 result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL);
Nick Coghland6009512014-11-20 21:39:37 +10002153 if (result == NULL) {
2154 PyErr_WriteUnraisable(threading);
2155 }
2156 else {
2157 Py_DECREF(result);
2158 }
2159 Py_DECREF(threading);
Nick Coghland6009512014-11-20 21:39:37 +10002160}
2161
2162#define NEXITFUNCS 32
Nick Coghland6009512014-11-20 21:39:37 +10002163int Py_AtExit(void (*func)(void))
2164{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002165 if (_PyRuntime.nexitfuncs >= NEXITFUNCS)
Nick Coghland6009512014-11-20 21:39:37 +10002166 return -1;
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002167 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func;
Nick Coghland6009512014-11-20 21:39:37 +10002168 return 0;
2169}
2170
2171static void
2172call_ll_exitfuncs(void)
2173{
Eric Snow2ebc5ce2017-09-07 23:51:28 -06002174 while (_PyRuntime.nexitfuncs > 0)
2175 (*_PyRuntime.exitfuncs[--_PyRuntime.nexitfuncs])();
Nick Coghland6009512014-11-20 21:39:37 +10002176
2177 fflush(stdout);
2178 fflush(stderr);
2179}
2180
2181void
2182Py_Exit(int sts)
2183{
Martin Panterb4ce1fc2015-11-30 03:18:29 +00002184 if (Py_FinalizeEx() < 0) {
2185 sts = 120;
2186 }
Nick Coghland6009512014-11-20 21:39:37 +10002187
2188 exit(sts);
2189}
2190
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002191static _PyInitError
Nick Coghland6009512014-11-20 21:39:37 +10002192initsigs(void)
2193{
2194#ifdef SIGPIPE
2195 PyOS_setsig(SIGPIPE, SIG_IGN);
2196#endif
2197#ifdef SIGXFZ
2198 PyOS_setsig(SIGXFZ, SIG_IGN);
2199#endif
2200#ifdef SIGXFSZ
2201 PyOS_setsig(SIGXFSZ, SIG_IGN);
2202#endif
2203 PyOS_InitInterrupts(); /* May imply initsignal() */
2204 if (PyErr_Occurred()) {
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002205 return _Py_INIT_ERR("can't import signal");
Nick Coghland6009512014-11-20 21:39:37 +10002206 }
Victor Stinnerf7e5b562017-11-15 15:48:08 -08002207 return _Py_INIT_OK();
Nick Coghland6009512014-11-20 21:39:37 +10002208}
2209
2210
2211/* Restore signals that the interpreter has called SIG_IGN on to SIG_DFL.
2212 *
2213 * All of the code in this function must only use async-signal-safe functions,
2214 * listed at `man 7 signal` or
2215 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2216 */
2217void
2218_Py_RestoreSignals(void)
2219{
2220#ifdef SIGPIPE
2221 PyOS_setsig(SIGPIPE, SIG_DFL);
2222#endif
2223#ifdef SIGXFZ
2224 PyOS_setsig(SIGXFZ, SIG_DFL);
2225#endif
2226#ifdef SIGXFSZ
2227 PyOS_setsig(SIGXFSZ, SIG_DFL);
2228#endif
2229}
2230
2231
2232/*
2233 * The file descriptor fd is considered ``interactive'' if either
2234 * a) isatty(fd) is TRUE, or
2235 * b) the -i flag was given, and the filename associated with
2236 * the descriptor is NULL or "<stdin>" or "???".
2237 */
2238int
2239Py_FdIsInteractive(FILE *fp, const char *filename)
2240{
2241 if (isatty((int)fileno(fp)))
2242 return 1;
2243 if (!Py_InteractiveFlag)
2244 return 0;
2245 return (filename == NULL) ||
2246 (strcmp(filename, "<stdin>") == 0) ||
2247 (strcmp(filename, "???") == 0);
2248}
2249
2250
Nick Coghland6009512014-11-20 21:39:37 +10002251/* Wrappers around sigaction() or signal(). */
2252
2253PyOS_sighandler_t
2254PyOS_getsig(int sig)
2255{
2256#ifdef HAVE_SIGACTION
2257 struct sigaction context;
2258 if (sigaction(sig, NULL, &context) == -1)
2259 return SIG_ERR;
2260 return context.sa_handler;
2261#else
2262 PyOS_sighandler_t handler;
2263/* Special signal handling for the secure CRT in Visual Studio 2005 */
2264#if defined(_MSC_VER) && _MSC_VER >= 1400
2265 switch (sig) {
2266 /* Only these signals are valid */
2267 case SIGINT:
2268 case SIGILL:
2269 case SIGFPE:
2270 case SIGSEGV:
2271 case SIGTERM:
2272 case SIGBREAK:
2273 case SIGABRT:
2274 break;
2275 /* Don't call signal() with other values or it will assert */
2276 default:
2277 return SIG_ERR;
2278 }
2279#endif /* _MSC_VER && _MSC_VER >= 1400 */
2280 handler = signal(sig, SIG_IGN);
2281 if (handler != SIG_ERR)
2282 signal(sig, handler);
2283 return handler;
2284#endif
2285}
2286
2287/*
2288 * All of the code in this function must only use async-signal-safe functions,
2289 * listed at `man 7 signal` or
2290 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html.
2291 */
2292PyOS_sighandler_t
2293PyOS_setsig(int sig, PyOS_sighandler_t handler)
2294{
2295#ifdef HAVE_SIGACTION
2296 /* Some code in Modules/signalmodule.c depends on sigaction() being
2297 * used here if HAVE_SIGACTION is defined. Fix that if this code
2298 * changes to invalidate that assumption.
2299 */
2300 struct sigaction context, ocontext;
2301 context.sa_handler = handler;
2302 sigemptyset(&context.sa_mask);
2303 context.sa_flags = 0;
2304 if (sigaction(sig, &context, &ocontext) == -1)
2305 return SIG_ERR;
2306 return ocontext.sa_handler;
2307#else
2308 PyOS_sighandler_t oldhandler;
2309 oldhandler = signal(sig, handler);
2310#ifdef HAVE_SIGINTERRUPT
2311 siginterrupt(sig, 1);
2312#endif
2313 return oldhandler;
2314#endif
2315}
2316
2317#ifdef __cplusplus
2318}
2319#endif