1 /* Python interpreter top-level routines, including init/exit */ 2 3 #include "Python.h" 4 5 #include "pycore_bytesobject.h" // _PyBytes_InitTypes() 6 #include "pycore_ceval.h" // _PyEval_FiniGIL() 7 #include "pycore_context.h" // _PyContext_Init() 8 #include "pycore_exceptions.h" // _PyExc_InitTypes() 9 #include "pycore_dict.h" // _PyDict_Fini() 10 #include "pycore_fileutils.h" // _Py_ResetForceASCII() 11 #include "pycore_floatobject.h" // _PyFloat_InitTypes() 12 #include "pycore_genobject.h" // _PyAsyncGen_Fini() 13 #include "pycore_import.h" // _PyImport_BootstrapImp() 14 #include "pycore_initconfig.h" // _PyStatus_OK() 15 #include "pycore_list.h" // _PyList_Fini() 16 #include "pycore_long.h" // _PyLong_InitTypes() 17 #include "pycore_object.h" // _PyDebug_PrintTotalRefs() 18 #include "pycore_pathconfig.h" // _PyConfig_WritePathConfig() 19 #include "pycore_pyerrors.h" // _PyErr_Occurred() 20 #include "pycore_pylifecycle.h" // _PyErr_Print() 21 #include "pycore_pymem.h" // _PyObject_DebugMallocStats() 22 #include "pycore_pystate.h" // _PyThreadState_GET() 23 #include "pycore_runtime.h" // _Py_ID() 24 #include "pycore_runtime_init.h" // _PyRuntimeState_INIT 25 #include "pycore_sliceobject.h" // _PySlice_Fini() 26 #include "pycore_sysmodule.h" // _PySys_ClearAuditHooks() 27 #include "pycore_traceback.h" // _Py_DumpTracebackThreads() 28 #include "pycore_tuple.h" // _PyTuple_InitTypes() 29 #include "pycore_typeobject.h" // _PyTypes_InitTypes() 30 #include "pycore_unicodeobject.h" // _PyUnicode_InitTypes() 31 32 extern void _PyIO_Fini(void); 33 34 #include <locale.h> // setlocale() 35 #include <stdlib.h> // getenv() 36 37 #if defined(__APPLE__) 38 #include <mach-o/loader.h> 39 #endif 40 41 #ifdef HAVE_SIGNAL_H 42 # include <signal.h> // SIG_IGN 43 #endif 44 45 #ifdef HAVE_LANGINFO_H 46 # include <langinfo.h> // nl_langinfo(CODESET) 47 #endif 48 49 #ifdef HAVE_FCNTL_H 50 # include <fcntl.h> // F_GETFD 51 #endif 52 53 #ifdef MS_WINDOWS 54 # undef BYTE 55 # include "windows.h" 56 57 extern PyTypeObject PyWindowsConsoleIO_Type; 58 # define PyWindowsConsoleIO_Check(op) \ 59 (PyObject_TypeCheck((op), &PyWindowsConsoleIO_Type)) 60 #endif 61 62 #define PUTS(fd, str) _Py_write_noraise(fd, str, (int)strlen(str)) 63 64 65 #ifdef __cplusplus 66 extern "C" { 67 #endif 68 69 70 /* Forward declarations */ 71 static PyStatus add_main_module(PyInterpreterState *interp); 72 static PyStatus init_import_site(void); 73 static PyStatus init_set_builtins_open(void); 74 static PyStatus init_sys_streams(PyThreadState *tstate); 75 static void wait_for_thread_shutdown(PyThreadState *tstate); 76 static void call_ll_exitfuncs(_PyRuntimeState *runtime); 77 78 int _Py_UnhandledKeyboardInterrupt = 0; 79 80 /* The following places the `_PyRuntime` structure in a location that can be 81 * found without any external information. This is meant to ease access to the 82 * interpreter state for various runtime debugging tools, but is *not* an 83 * officially supported feature */ 84 85 /* Suppress deprecation warning for PyBytesObject.ob_shash */ 86 _Py_COMP_DIAG_PUSH 87 _Py_COMP_DIAG_IGNORE_DEPR_DECLS 88 89 #if defined(MS_WINDOWS) 90 91 #pragma section("PyRuntime", read, write) 92 __declspec(allocate("PyRuntime")) 93 94 #elif defined(__APPLE__) 95 96 __attribute__(( 97 section(SEG_DATA ",PyRuntime") 98 )) 99 100 #endif 101 102 _PyRuntimeState _PyRuntime 103 #if defined(__linux__) && (defined(__GNUC__) || defined(__clang__)) 104 __attribute__ ((section (".PyRuntime"))) 105 #endif 106 = _PyRuntimeState_INIT; 107 _Py_COMP_DIAG_POP 108 109 static int runtime_initialized = 0; 110 111 PyStatus _PyRuntime_Initialize(void)112 _PyRuntime_Initialize(void) 113 { 114 /* XXX We only initialize once in the process, which aligns with 115 the static initialization of the former globals now found in 116 _PyRuntime. However, _PyRuntime *should* be initialized with 117 every Py_Initialize() call, but doing so breaks the runtime. 118 This is because the runtime state is not properly finalized 119 currently. */ 120 if (runtime_initialized) { 121 return _PyStatus_OK(); 122 } 123 runtime_initialized = 1; 124 125 return _PyRuntimeState_Init(&_PyRuntime); 126 } 127 128 void _PyRuntime_Finalize(void)129 _PyRuntime_Finalize(void) 130 { 131 _PyRuntimeState_Fini(&_PyRuntime); 132 runtime_initialized = 0; 133 } 134 135 int _Py_IsFinalizing(void)136 _Py_IsFinalizing(void) 137 { 138 return _PyRuntimeState_GetFinalizing(&_PyRuntime) != NULL; 139 } 140 141 /* Hack to force loading of object files */ 142 int (*_PyOS_mystrnicmp_hack)(const char *, const char *, Py_ssize_t) = \ 143 PyOS_mystrnicmp; /* Python/pystrcmp.o */ 144 145 146 /* APIs to access the initialization flags 147 * 148 * Can be called prior to Py_Initialize. 149 */ 150 151 int _Py_IsCoreInitialized(void)152 _Py_IsCoreInitialized(void) 153 { 154 return _PyRuntime.core_initialized; 155 } 156 157 int Py_IsInitialized(void)158 Py_IsInitialized(void) 159 { 160 return _PyRuntime.initialized; 161 } 162 163 164 /* Global initializations. Can be undone by Py_FinalizeEx(). Don't 165 call this twice without an intervening Py_FinalizeEx() call. When 166 initializations fail, a fatal error is issued and the function does 167 not return. On return, the first thread and interpreter state have 168 been created. 169 170 Locking: you must hold the interpreter lock while calling this. 171 (If the lock has not yet been initialized, that's equivalent to 172 having the lock, but you cannot use multiple threads.) 173 174 */ 175 static int init_importlib(PyThreadState * tstate,PyObject * sysmod)176 init_importlib(PyThreadState *tstate, PyObject *sysmod) 177 { 178 assert(!_PyErr_Occurred(tstate)); 179 180 PyInterpreterState *interp = tstate->interp; 181 int verbose = _PyInterpreterState_GetConfig(interp)->verbose; 182 183 // Import _importlib through its frozen version, _frozen_importlib. 184 if (verbose) { 185 PySys_FormatStderr("import _frozen_importlib # frozen\n"); 186 } 187 if (PyImport_ImportFrozenModule("_frozen_importlib") <= 0) { 188 return -1; 189 } 190 PyObject *importlib = PyImport_AddModule("_frozen_importlib"); // borrowed 191 if (importlib == NULL) { 192 return -1; 193 } 194 interp->importlib = Py_NewRef(importlib); 195 196 // Import the _imp module 197 if (verbose) { 198 PySys_FormatStderr("import _imp # builtin\n"); 199 } 200 PyObject *imp_mod = _PyImport_BootstrapImp(tstate); 201 if (imp_mod == NULL) { 202 return -1; 203 } 204 if (_PyImport_SetModuleString("_imp", imp_mod) < 0) { 205 Py_DECREF(imp_mod); 206 return -1; 207 } 208 209 // Install importlib as the implementation of import 210 PyObject *value = PyObject_CallMethod(importlib, "_install", 211 "OO", sysmod, imp_mod); 212 Py_DECREF(imp_mod); 213 if (value == NULL) { 214 return -1; 215 } 216 Py_DECREF(value); 217 218 assert(!_PyErr_Occurred(tstate)); 219 return 0; 220 } 221 222 223 static PyStatus init_importlib_external(PyThreadState * tstate)224 init_importlib_external(PyThreadState *tstate) 225 { 226 PyObject *value; 227 value = PyObject_CallMethod(tstate->interp->importlib, 228 "_install_external_importers", ""); 229 if (value == NULL) { 230 _PyErr_Print(tstate); 231 return _PyStatus_ERR("external importer setup failed"); 232 } 233 Py_DECREF(value); 234 return _PyImportZip_Init(tstate); 235 } 236 237 /* Helper functions to better handle the legacy C locale 238 * 239 * The legacy C locale assumes ASCII as the default text encoding, which 240 * causes problems not only for the CPython runtime, but also other 241 * components like GNU readline. 242 * 243 * Accordingly, when the CLI detects it, it attempts to coerce it to a 244 * more capable UTF-8 based alternative as follows: 245 * 246 * if (_Py_LegacyLocaleDetected()) { 247 * _Py_CoerceLegacyLocale(); 248 * } 249 * 250 * See the documentation of the PYTHONCOERCECLOCALE setting for more details. 251 * 252 * Locale coercion also impacts the default error handler for the standard 253 * streams: while the usual default is "strict", the default for the legacy 254 * C locale and for any of the coercion target locales is "surrogateescape". 255 */ 256 257 int _Py_LegacyLocaleDetected(int warn)258 _Py_LegacyLocaleDetected(int warn) 259 { 260 #ifndef MS_WINDOWS 261 if (!warn) { 262 const char *locale_override = getenv("LC_ALL"); 263 if (locale_override != NULL && *locale_override != '\0') { 264 /* Don't coerce C locale if the LC_ALL environment variable 265 is set */ 266 return 0; 267 } 268 } 269 270 /* On non-Windows systems, the C locale is considered a legacy locale */ 271 /* XXX (ncoghlan): some platforms (notably Mac OS X) don't appear to treat 272 * the POSIX locale as a simple alias for the C locale, so 273 * we may also want to check for that explicitly. 274 */ 275 const char *ctype_loc = setlocale(LC_CTYPE, NULL); 276 return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0; 277 #else 278 /* Windows uses code pages instead of locales, so no locale is legacy */ 279 return 0; 280 #endif 281 } 282 283 #ifndef MS_WINDOWS 284 static const char *_C_LOCALE_WARNING = 285 "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII " 286 "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, " 287 "C.utf8, or UTF-8 (if available) as alternative Unicode-compatible " 288 "locales is recommended.\n"; 289 290 static void emit_stderr_warning_for_legacy_locale(_PyRuntimeState * runtime)291 emit_stderr_warning_for_legacy_locale(_PyRuntimeState *runtime) 292 { 293 const PyPreConfig *preconfig = &runtime->preconfig; 294 if (preconfig->coerce_c_locale_warn && _Py_LegacyLocaleDetected(1)) { 295 PySys_FormatStderr("%s", _C_LOCALE_WARNING); 296 } 297 } 298 #endif /* !defined(MS_WINDOWS) */ 299 300 typedef struct _CandidateLocale { 301 const char *locale_name; /* The locale to try as a coercion target */ 302 } _LocaleCoercionTarget; 303 304 static _LocaleCoercionTarget _TARGET_LOCALES[] = { 305 {"C.UTF-8"}, 306 {"C.utf8"}, 307 {"UTF-8"}, 308 {NULL} 309 }; 310 311 312 int _Py_IsLocaleCoercionTarget(const char * ctype_loc)313 _Py_IsLocaleCoercionTarget(const char *ctype_loc) 314 { 315 const _LocaleCoercionTarget *target = NULL; 316 for (target = _TARGET_LOCALES; target->locale_name; target++) { 317 if (strcmp(ctype_loc, target->locale_name) == 0) { 318 return 1; 319 } 320 } 321 return 0; 322 } 323 324 325 #ifdef PY_COERCE_C_LOCALE 326 static const char C_LOCALE_COERCION_WARNING[] = 327 "Python detected LC_CTYPE=C: LC_CTYPE coerced to %.20s (set another locale " 328 "or PYTHONCOERCECLOCALE=0 to disable this locale coercion behavior).\n"; 329 330 static int _coerce_default_locale_settings(int warn,const _LocaleCoercionTarget * target)331 _coerce_default_locale_settings(int warn, const _LocaleCoercionTarget *target) 332 { 333 const char *newloc = target->locale_name; 334 335 /* Reset locale back to currently configured defaults */ 336 _Py_SetLocaleFromEnv(LC_ALL); 337 338 /* Set the relevant locale environment variable */ 339 if (setenv("LC_CTYPE", newloc, 1)) { 340 fprintf(stderr, 341 "Error setting LC_CTYPE, skipping C locale coercion\n"); 342 return 0; 343 } 344 if (warn) { 345 fprintf(stderr, C_LOCALE_COERCION_WARNING, newloc); 346 } 347 348 /* Reconfigure with the overridden environment variables */ 349 _Py_SetLocaleFromEnv(LC_ALL); 350 return 1; 351 } 352 #endif 353 354 int _Py_CoerceLegacyLocale(int warn)355 _Py_CoerceLegacyLocale(int warn) 356 { 357 int coerced = 0; 358 #ifdef PY_COERCE_C_LOCALE 359 char *oldloc = NULL; 360 361 oldloc = _PyMem_RawStrdup(setlocale(LC_CTYPE, NULL)); 362 if (oldloc == NULL) { 363 return coerced; 364 } 365 366 const char *locale_override = getenv("LC_ALL"); 367 if (locale_override == NULL || *locale_override == '\0') { 368 /* LC_ALL is also not set (or is set to an empty string) */ 369 const _LocaleCoercionTarget *target = NULL; 370 for (target = _TARGET_LOCALES; target->locale_name; target++) { 371 const char *new_locale = setlocale(LC_CTYPE, 372 target->locale_name); 373 if (new_locale != NULL) { 374 #if !defined(_Py_FORCE_UTF8_LOCALE) && defined(HAVE_LANGINFO_H) && defined(CODESET) 375 /* Also ensure that nl_langinfo works in this locale */ 376 char *codeset = nl_langinfo(CODESET); 377 if (!codeset || *codeset == '\0') { 378 /* CODESET is not set or empty, so skip coercion */ 379 new_locale = NULL; 380 _Py_SetLocaleFromEnv(LC_CTYPE); 381 continue; 382 } 383 #endif 384 /* Successfully configured locale, so make it the default */ 385 coerced = _coerce_default_locale_settings(warn, target); 386 goto done; 387 } 388 } 389 } 390 /* No C locale warning here, as Py_Initialize will emit one later */ 391 392 setlocale(LC_CTYPE, oldloc); 393 394 done: 395 PyMem_RawFree(oldloc); 396 #endif 397 return coerced; 398 } 399 400 /* _Py_SetLocaleFromEnv() is a wrapper around setlocale(category, "") to 401 * isolate the idiosyncrasies of different libc implementations. It reads the 402 * appropriate environment variable and uses its value to select the locale for 403 * 'category'. */ 404 char * _Py_SetLocaleFromEnv(int category)405 _Py_SetLocaleFromEnv(int category) 406 { 407 char *res; 408 #ifdef __ANDROID__ 409 const char *locale; 410 const char **pvar; 411 #ifdef PY_COERCE_C_LOCALE 412 const char *coerce_c_locale; 413 #endif 414 const char *utf8_locale = "C.UTF-8"; 415 const char *env_var_set[] = { 416 "LC_ALL", 417 "LC_CTYPE", 418 "LANG", 419 NULL, 420 }; 421 422 /* Android setlocale(category, "") doesn't check the environment variables 423 * and incorrectly sets the "C" locale at API 24 and older APIs. We only 424 * check the environment variables listed in env_var_set. */ 425 for (pvar=env_var_set; *pvar; pvar++) { 426 locale = getenv(*pvar); 427 if (locale != NULL && *locale != '\0') { 428 if (strcmp(locale, utf8_locale) == 0 || 429 strcmp(locale, "en_US.UTF-8") == 0) { 430 return setlocale(category, utf8_locale); 431 } 432 return setlocale(category, "C"); 433 } 434 } 435 436 /* Android uses UTF-8, so explicitly set the locale to C.UTF-8 if none of 437 * LC_ALL, LC_CTYPE, or LANG is set to a non-empty string. 438 * Quote from POSIX section "8.2 Internationalization Variables": 439 * "4. If the LANG environment variable is not set or is set to the empty 440 * string, the implementation-defined default locale shall be used." */ 441 442 #ifdef PY_COERCE_C_LOCALE 443 coerce_c_locale = getenv("PYTHONCOERCECLOCALE"); 444 if (coerce_c_locale == NULL || strcmp(coerce_c_locale, "0") != 0) { 445 /* Some other ported code may check the environment variables (e.g. in 446 * extension modules), so we make sure that they match the locale 447 * configuration */ 448 if (setenv("LC_CTYPE", utf8_locale, 1)) { 449 fprintf(stderr, "Warning: failed setting the LC_CTYPE " 450 "environment variable to %s\n", utf8_locale); 451 } 452 } 453 #endif 454 res = setlocale(category, utf8_locale); 455 #else /* !defined(__ANDROID__) */ 456 res = setlocale(category, ""); 457 #endif 458 _Py_ResetForceASCII(); 459 return res; 460 } 461 462 463 static int interpreter_update_config(PyThreadState * tstate,int only_update_path_config)464 interpreter_update_config(PyThreadState *tstate, int only_update_path_config) 465 { 466 const PyConfig *config = &tstate->interp->config; 467 468 if (!only_update_path_config) { 469 PyStatus status = _PyConfig_Write(config, tstate->interp->runtime); 470 if (_PyStatus_EXCEPTION(status)) { 471 _PyErr_SetFromPyStatus(status); 472 return -1; 473 } 474 } 475 476 if (_Py_IsMainInterpreter(tstate->interp)) { 477 PyStatus status = _PyPathConfig_UpdateGlobal(config); 478 if (_PyStatus_EXCEPTION(status)) { 479 _PyErr_SetFromPyStatus(status); 480 return -1; 481 } 482 } 483 484 // Update the sys module for the new configuration 485 if (_PySys_UpdateConfig(tstate) < 0) { 486 return -1; 487 } 488 return 0; 489 } 490 491 492 int _PyInterpreterState_SetConfig(const PyConfig * src_config)493 _PyInterpreterState_SetConfig(const PyConfig *src_config) 494 { 495 PyThreadState *tstate = _PyThreadState_GET(); 496 int res = -1; 497 498 PyConfig config; 499 PyConfig_InitPythonConfig(&config); 500 PyStatus status = _PyConfig_Copy(&config, src_config); 501 if (_PyStatus_EXCEPTION(status)) { 502 _PyErr_SetFromPyStatus(status); 503 goto done; 504 } 505 506 status = _PyConfig_Read(&config, 1); 507 if (_PyStatus_EXCEPTION(status)) { 508 _PyErr_SetFromPyStatus(status); 509 goto done; 510 } 511 512 status = _PyConfig_Copy(&tstate->interp->config, &config); 513 if (_PyStatus_EXCEPTION(status)) { 514 _PyErr_SetFromPyStatus(status); 515 goto done; 516 } 517 518 res = interpreter_update_config(tstate, 0); 519 520 done: 521 PyConfig_Clear(&config); 522 return res; 523 } 524 525 526 /* Global initializations. Can be undone by Py_Finalize(). Don't 527 call this twice without an intervening Py_Finalize() call. 528 529 Every call to Py_InitializeFromConfig, Py_Initialize or Py_InitializeEx 530 must have a corresponding call to Py_Finalize. 531 532 Locking: you must hold the interpreter lock while calling these APIs. 533 (If the lock has not yet been initialized, that's equivalent to 534 having the lock, but you cannot use multiple threads.) 535 536 */ 537 538 static PyStatus pyinit_core_reconfigure(_PyRuntimeState * runtime,PyThreadState ** tstate_p,const PyConfig * config)539 pyinit_core_reconfigure(_PyRuntimeState *runtime, 540 PyThreadState **tstate_p, 541 const PyConfig *config) 542 { 543 PyStatus status; 544 PyThreadState *tstate = _PyThreadState_GET(); 545 if (!tstate) { 546 return _PyStatus_ERR("failed to read thread state"); 547 } 548 *tstate_p = tstate; 549 550 PyInterpreterState *interp = tstate->interp; 551 if (interp == NULL) { 552 return _PyStatus_ERR("can't make main interpreter"); 553 } 554 555 status = _PyConfig_Write(config, runtime); 556 if (_PyStatus_EXCEPTION(status)) { 557 return status; 558 } 559 560 status = _PyConfig_Copy(&interp->config, config); 561 if (_PyStatus_EXCEPTION(status)) { 562 return status; 563 } 564 config = _PyInterpreterState_GetConfig(interp); 565 566 if (config->_install_importlib) { 567 status = _PyPathConfig_UpdateGlobal(config); 568 if (_PyStatus_EXCEPTION(status)) { 569 return status; 570 } 571 } 572 return _PyStatus_OK(); 573 } 574 575 576 static PyStatus pycore_init_runtime(_PyRuntimeState * runtime,const PyConfig * config)577 pycore_init_runtime(_PyRuntimeState *runtime, 578 const PyConfig *config) 579 { 580 if (runtime->initialized) { 581 return _PyStatus_ERR("main interpreter already initialized"); 582 } 583 584 PyStatus status = _PyConfig_Write(config, runtime); 585 if (_PyStatus_EXCEPTION(status)) { 586 return status; 587 } 588 589 /* Py_Finalize leaves _Py_Finalizing set in order to help daemon 590 * threads behave a little more gracefully at interpreter shutdown. 591 * We clobber it here so the new interpreter can start with a clean 592 * slate. 593 * 594 * However, this may still lead to misbehaviour if there are daemon 595 * threads still hanging around from a previous Py_Initialize/Finalize 596 * pair :( 597 */ 598 _PyRuntimeState_SetFinalizing(runtime, NULL); 599 600 status = _Py_HashRandomization_Init(config); 601 if (_PyStatus_EXCEPTION(status)) { 602 return status; 603 } 604 605 status = _PyInterpreterState_Enable(runtime); 606 if (_PyStatus_EXCEPTION(status)) { 607 return status; 608 } 609 return _PyStatus_OK(); 610 } 611 612 613 static PyStatus init_interp_create_gil(PyThreadState * tstate)614 init_interp_create_gil(PyThreadState *tstate) 615 { 616 PyStatus status; 617 618 /* finalize_interp_delete() comment explains why _PyEval_FiniGIL() is 619 only called here. */ 620 _PyEval_FiniGIL(tstate->interp); 621 622 /* Auto-thread-state API */ 623 status = _PyGILState_SetTstate(tstate); 624 if (_PyStatus_EXCEPTION(status)) { 625 return status; 626 } 627 628 /* Create the GIL and take it */ 629 status = _PyEval_InitGIL(tstate); 630 if (_PyStatus_EXCEPTION(status)) { 631 return status; 632 } 633 634 return _PyStatus_OK(); 635 } 636 637 638 static PyStatus pycore_create_interpreter(_PyRuntimeState * runtime,const PyConfig * config,PyThreadState ** tstate_p)639 pycore_create_interpreter(_PyRuntimeState *runtime, 640 const PyConfig *config, 641 PyThreadState **tstate_p) 642 { 643 /* Auto-thread-state API */ 644 PyStatus status = _PyGILState_Init(runtime); 645 if (_PyStatus_EXCEPTION(status)) { 646 return status; 647 } 648 649 PyInterpreterState *interp = PyInterpreterState_New(); 650 if (interp == NULL) { 651 return _PyStatus_ERR("can't make main interpreter"); 652 } 653 assert(_Py_IsMainInterpreter(interp)); 654 655 status = _PyConfig_Copy(&interp->config, config); 656 if (_PyStatus_EXCEPTION(status)) { 657 return status; 658 } 659 660 PyThreadState *tstate = PyThreadState_New(interp); 661 if (tstate == NULL) { 662 return _PyStatus_ERR("can't make first thread"); 663 } 664 (void) PyThreadState_Swap(tstate); 665 666 status = init_interp_create_gil(tstate); 667 if (_PyStatus_EXCEPTION(status)) { 668 return status; 669 } 670 671 *tstate_p = tstate; 672 return _PyStatus_OK(); 673 } 674 675 676 static PyStatus pycore_init_global_objects(PyInterpreterState * interp)677 pycore_init_global_objects(PyInterpreterState *interp) 678 { 679 PyStatus status; 680 681 _PyFloat_InitState(interp); 682 683 status = _PyUnicode_InitGlobalObjects(interp); 684 if (_PyStatus_EXCEPTION(status)) { 685 return status; 686 } 687 688 _PyUnicode_InitState(interp); 689 690 return _PyStatus_OK(); 691 } 692 693 694 static PyStatus pycore_init_types(PyInterpreterState * interp)695 pycore_init_types(PyInterpreterState *interp) 696 { 697 PyStatus status; 698 699 status = _PyTypes_InitState(interp); 700 if (_PyStatus_EXCEPTION(status)) { 701 return status; 702 } 703 704 status = _PyTypes_InitTypes(interp); 705 if (_PyStatus_EXCEPTION(status)) { 706 return status; 707 } 708 709 status = _PyBytes_InitTypes(interp); 710 if (_PyStatus_EXCEPTION(status)) { 711 return status; 712 } 713 714 status = _PyLong_InitTypes(interp); 715 if (_PyStatus_EXCEPTION(status)) { 716 return status; 717 } 718 719 status = _PyUnicode_InitTypes(interp); 720 if (_PyStatus_EXCEPTION(status)) { 721 return status; 722 } 723 724 status = _PyFloat_InitTypes(interp); 725 if (_PyStatus_EXCEPTION(status)) { 726 return status; 727 } 728 729 status = _PyTuple_InitTypes(interp); 730 if (_PyStatus_EXCEPTION(status)) { 731 return status; 732 } 733 734 if (_PyExc_InitTypes(interp) < 0) { 735 return _PyStatus_ERR("failed to initialize an exception type"); 736 } 737 738 status = _PyExc_InitGlobalObjects(interp); 739 if (_PyStatus_EXCEPTION(status)) { 740 return status; 741 } 742 743 status = _PyExc_InitState(interp); 744 if (_PyStatus_EXCEPTION(status)) { 745 return status; 746 } 747 748 status = _PyErr_InitTypes(interp); 749 if (_PyStatus_EXCEPTION(status)) { 750 return status; 751 } 752 753 status = _PyContext_Init(interp); 754 if (_PyStatus_EXCEPTION(status)) { 755 return status; 756 } 757 return _PyStatus_OK(); 758 } 759 760 761 static PyStatus pycore_init_builtins(PyThreadState * tstate)762 pycore_init_builtins(PyThreadState *tstate) 763 { 764 PyInterpreterState *interp = tstate->interp; 765 766 PyObject *bimod = _PyBuiltin_Init(interp); 767 if (bimod == NULL) { 768 goto error; 769 } 770 771 if (_PyImport_FixupBuiltin(bimod, "builtins", interp->modules) < 0) { 772 goto error; 773 } 774 775 PyObject *builtins_dict = PyModule_GetDict(bimod); 776 if (builtins_dict == NULL) { 777 goto error; 778 } 779 Py_INCREF(builtins_dict); 780 interp->builtins = builtins_dict; 781 782 PyObject *isinstance = PyDict_GetItem(builtins_dict, &_Py_ID(isinstance)); 783 assert(isinstance); 784 interp->callable_cache.isinstance = isinstance; 785 PyObject *len = PyDict_GetItem(builtins_dict, &_Py_ID(len)); 786 assert(len); 787 interp->callable_cache.len = len; 788 PyObject *list_append = _PyType_Lookup(&PyList_Type, &_Py_ID(append)); 789 assert(list_append); 790 interp->callable_cache.list_append = list_append; 791 792 if (_PyBuiltins_AddExceptions(bimod) < 0) { 793 return _PyStatus_ERR("failed to add exceptions to builtins"); 794 } 795 796 interp->builtins_copy = PyDict_Copy(interp->builtins); 797 if (interp->builtins_copy == NULL) { 798 goto error; 799 } 800 Py_DECREF(bimod); 801 802 // Get the __import__ function 803 PyObject *import_func = _PyDict_GetItemStringWithError(interp->builtins, 804 "__import__"); 805 if (import_func == NULL) { 806 goto error; 807 } 808 interp->import_func = Py_NewRef(import_func); 809 810 assert(!_PyErr_Occurred(tstate)); 811 return _PyStatus_OK(); 812 813 error: 814 Py_XDECREF(bimod); 815 return _PyStatus_ERR("can't initialize builtins module"); 816 } 817 818 819 static PyStatus pycore_interp_init(PyThreadState * tstate)820 pycore_interp_init(PyThreadState *tstate) 821 { 822 PyInterpreterState *interp = tstate->interp; 823 PyStatus status; 824 PyObject *sysmod = NULL; 825 826 // Create singletons before the first PyType_Ready() call, since 827 // PyType_Ready() uses singletons like the Unicode empty string (tp_doc) 828 // and the empty tuple singletons (tp_bases). 829 status = pycore_init_global_objects(interp); 830 if (_PyStatus_EXCEPTION(status)) { 831 return status; 832 } 833 834 // The GC must be initialized before the first GC collection. 835 status = _PyGC_Init(interp); 836 if (_PyStatus_EXCEPTION(status)) { 837 return status; 838 } 839 // Intern strings in deep-frozen modules first so that others 840 // can use it instead of creating a heap allocated string. 841 if (_Py_Deepfreeze_Init() < 0) { 842 return _PyStatus_ERR("failed to initialize deep-frozen modules"); 843 } 844 845 status = pycore_init_types(interp); 846 if (_PyStatus_EXCEPTION(status)) { 847 goto done; 848 } 849 850 if (_PyWarnings_InitState(interp) < 0) { 851 return _PyStatus_ERR("can't initialize warnings"); 852 } 853 854 status = _PyAtExit_Init(interp); 855 if (_PyStatus_EXCEPTION(status)) { 856 return status; 857 } 858 859 status = _PySys_Create(tstate, &sysmod); 860 if (_PyStatus_EXCEPTION(status)) { 861 goto done; 862 } 863 864 status = pycore_init_builtins(tstate); 865 if (_PyStatus_EXCEPTION(status)) { 866 goto done; 867 } 868 869 const PyConfig *config = _PyInterpreterState_GetConfig(interp); 870 if (config->_install_importlib) { 871 /* This call sets up builtin and frozen import support */ 872 if (init_importlib(tstate, sysmod) < 0) { 873 return _PyStatus_ERR("failed to initialize importlib"); 874 } 875 } 876 877 done: 878 /* sys.modules['sys'] contains a strong reference to the module */ 879 Py_XDECREF(sysmod); 880 return status; 881 } 882 883 884 static PyStatus pyinit_config(_PyRuntimeState * runtime,PyThreadState ** tstate_p,const PyConfig * config)885 pyinit_config(_PyRuntimeState *runtime, 886 PyThreadState **tstate_p, 887 const PyConfig *config) 888 { 889 PyStatus status = pycore_init_runtime(runtime, config); 890 if (_PyStatus_EXCEPTION(status)) { 891 return status; 892 } 893 894 PyThreadState *tstate; 895 status = pycore_create_interpreter(runtime, config, &tstate); 896 if (_PyStatus_EXCEPTION(status)) { 897 return status; 898 } 899 *tstate_p = tstate; 900 901 status = pycore_interp_init(tstate); 902 if (_PyStatus_EXCEPTION(status)) { 903 return status; 904 } 905 906 /* Only when we get here is the runtime core fully initialized */ 907 runtime->core_initialized = 1; 908 return _PyStatus_OK(); 909 } 910 911 912 PyStatus _Py_PreInitializeFromPyArgv(const PyPreConfig * src_config,const _PyArgv * args)913 _Py_PreInitializeFromPyArgv(const PyPreConfig *src_config, const _PyArgv *args) 914 { 915 PyStatus status; 916 917 if (src_config == NULL) { 918 return _PyStatus_ERR("preinitialization config is NULL"); 919 } 920 921 status = _PyRuntime_Initialize(); 922 if (_PyStatus_EXCEPTION(status)) { 923 return status; 924 } 925 _PyRuntimeState *runtime = &_PyRuntime; 926 927 if (runtime->preinitialized) { 928 /* If it's already configured: ignored the new configuration */ 929 return _PyStatus_OK(); 930 } 931 932 /* Note: preinitialized remains 1 on error, it is only set to 0 933 at exit on success. */ 934 runtime->preinitializing = 1; 935 936 PyPreConfig config; 937 938 status = _PyPreConfig_InitFromPreConfig(&config, src_config); 939 if (_PyStatus_EXCEPTION(status)) { 940 return status; 941 } 942 943 status = _PyPreConfig_Read(&config, args); 944 if (_PyStatus_EXCEPTION(status)) { 945 return status; 946 } 947 948 status = _PyPreConfig_Write(&config); 949 if (_PyStatus_EXCEPTION(status)) { 950 return status; 951 } 952 953 runtime->preinitializing = 0; 954 runtime->preinitialized = 1; 955 return _PyStatus_OK(); 956 } 957 958 959 PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig * src_config,Py_ssize_t argc,char ** argv)960 Py_PreInitializeFromBytesArgs(const PyPreConfig *src_config, Py_ssize_t argc, char **argv) 961 { 962 _PyArgv args = {.use_bytes_argv = 1, .argc = argc, .bytes_argv = argv}; 963 return _Py_PreInitializeFromPyArgv(src_config, &args); 964 } 965 966 967 PyStatus Py_PreInitializeFromArgs(const PyPreConfig * src_config,Py_ssize_t argc,wchar_t ** argv)968 Py_PreInitializeFromArgs(const PyPreConfig *src_config, Py_ssize_t argc, wchar_t **argv) 969 { 970 _PyArgv args = {.use_bytes_argv = 0, .argc = argc, .wchar_argv = argv}; 971 return _Py_PreInitializeFromPyArgv(src_config, &args); 972 } 973 974 975 PyStatus Py_PreInitialize(const PyPreConfig * src_config)976 Py_PreInitialize(const PyPreConfig *src_config) 977 { 978 return _Py_PreInitializeFromPyArgv(src_config, NULL); 979 } 980 981 982 PyStatus _Py_PreInitializeFromConfig(const PyConfig * config,const _PyArgv * args)983 _Py_PreInitializeFromConfig(const PyConfig *config, 984 const _PyArgv *args) 985 { 986 assert(config != NULL); 987 988 PyStatus status = _PyRuntime_Initialize(); 989 if (_PyStatus_EXCEPTION(status)) { 990 return status; 991 } 992 _PyRuntimeState *runtime = &_PyRuntime; 993 994 if (runtime->preinitialized) { 995 /* Already initialized: do nothing */ 996 return _PyStatus_OK(); 997 } 998 999 PyPreConfig preconfig; 1000 1001 _PyPreConfig_InitFromConfig(&preconfig, config); 1002 1003 if (!config->parse_argv) { 1004 return Py_PreInitialize(&preconfig); 1005 } 1006 else if (args == NULL) { 1007 _PyArgv config_args = { 1008 .use_bytes_argv = 0, 1009 .argc = config->argv.length, 1010 .wchar_argv = config->argv.items}; 1011 return _Py_PreInitializeFromPyArgv(&preconfig, &config_args); 1012 } 1013 else { 1014 return _Py_PreInitializeFromPyArgv(&preconfig, args); 1015 } 1016 } 1017 1018 1019 /* Begin interpreter initialization 1020 * 1021 * On return, the first thread and interpreter state have been created, 1022 * but the compiler, signal handling, multithreading and 1023 * multiple interpreter support, and codec infrastructure are not yet 1024 * available. 1025 * 1026 * The import system will support builtin and frozen modules only. 1027 * The only supported io is writing to sys.stderr 1028 * 1029 * If any operation invoked by this function fails, a fatal error is 1030 * issued and the function does not return. 1031 * 1032 * Any code invoked from this function should *not* assume it has access 1033 * to the Python C API (unless the API is explicitly listed as being 1034 * safe to call without calling Py_Initialize first) 1035 */ 1036 static PyStatus pyinit_core(_PyRuntimeState * runtime,const PyConfig * src_config,PyThreadState ** tstate_p)1037 pyinit_core(_PyRuntimeState *runtime, 1038 const PyConfig *src_config, 1039 PyThreadState **tstate_p) 1040 { 1041 PyStatus status; 1042 1043 status = _Py_PreInitializeFromConfig(src_config, NULL); 1044 if (_PyStatus_EXCEPTION(status)) { 1045 return status; 1046 } 1047 1048 PyConfig config; 1049 PyConfig_InitPythonConfig(&config); 1050 1051 status = _PyConfig_Copy(&config, src_config); 1052 if (_PyStatus_EXCEPTION(status)) { 1053 goto done; 1054 } 1055 1056 // Read the configuration, but don't compute the path configuration 1057 // (it is computed in the main init). 1058 status = _PyConfig_Read(&config, 0); 1059 if (_PyStatus_EXCEPTION(status)) { 1060 goto done; 1061 } 1062 1063 if (!runtime->core_initialized) { 1064 status = pyinit_config(runtime, tstate_p, &config); 1065 } 1066 else { 1067 status = pyinit_core_reconfigure(runtime, tstate_p, &config); 1068 } 1069 if (_PyStatus_EXCEPTION(status)) { 1070 goto done; 1071 } 1072 1073 done: 1074 PyConfig_Clear(&config); 1075 return status; 1076 } 1077 1078 1079 /* Py_Initialize() has already been called: update the main interpreter 1080 configuration. Example of bpo-34008: Py_Main() called after 1081 Py_Initialize(). */ 1082 static PyStatus pyinit_main_reconfigure(PyThreadState * tstate)1083 pyinit_main_reconfigure(PyThreadState *tstate) 1084 { 1085 if (interpreter_update_config(tstate, 0) < 0) { 1086 return _PyStatus_ERR("fail to reconfigure Python"); 1087 } 1088 return _PyStatus_OK(); 1089 } 1090 1091 1092 static PyStatus init_interp_main(PyThreadState * tstate)1093 init_interp_main(PyThreadState *tstate) 1094 { 1095 extern void _PyThread_debug_deprecation(void); 1096 1097 assert(!_PyErr_Occurred(tstate)); 1098 1099 PyStatus status; 1100 int is_main_interp = _Py_IsMainInterpreter(tstate->interp); 1101 PyInterpreterState *interp = tstate->interp; 1102 const PyConfig *config = _PyInterpreterState_GetConfig(interp); 1103 1104 if (!config->_install_importlib) { 1105 /* Special mode for freeze_importlib: run with no import system 1106 * 1107 * This means anything which needs support from extension modules 1108 * or pure Python code in the standard library won't work. 1109 */ 1110 if (is_main_interp) { 1111 interp->runtime->initialized = 1; 1112 } 1113 return _PyStatus_OK(); 1114 } 1115 1116 // Initialize the import-related configuration. 1117 status = _PyConfig_InitImportConfig(&interp->config); 1118 if (_PyStatus_EXCEPTION(status)) { 1119 return status; 1120 } 1121 1122 if (interpreter_update_config(tstate, 1) < 0) { 1123 return _PyStatus_ERR("failed to update the Python config"); 1124 } 1125 1126 status = init_importlib_external(tstate); 1127 if (_PyStatus_EXCEPTION(status)) { 1128 return status; 1129 } 1130 1131 if (is_main_interp) { 1132 /* initialize the faulthandler module */ 1133 status = _PyFaulthandler_Init(config->faulthandler); 1134 if (_PyStatus_EXCEPTION(status)) { 1135 return status; 1136 } 1137 } 1138 1139 status = _PyUnicode_InitEncodings(tstate); 1140 if (_PyStatus_EXCEPTION(status)) { 1141 return status; 1142 } 1143 1144 if (is_main_interp) { 1145 if (_PySignal_Init(config->install_signal_handlers) < 0) { 1146 return _PyStatus_ERR("can't initialize signals"); 1147 } 1148 1149 if (_PyTraceMalloc_Init(config->tracemalloc) < 0) { 1150 return _PyStatus_ERR("can't initialize tracemalloc"); 1151 } 1152 } 1153 1154 status = init_sys_streams(tstate); 1155 if (_PyStatus_EXCEPTION(status)) { 1156 return status; 1157 } 1158 1159 status = init_set_builtins_open(); 1160 if (_PyStatus_EXCEPTION(status)) { 1161 return status; 1162 } 1163 1164 status = add_main_module(interp); 1165 if (_PyStatus_EXCEPTION(status)) { 1166 return status; 1167 } 1168 1169 if (is_main_interp) { 1170 /* Initialize warnings. */ 1171 PyObject *warnoptions = PySys_GetObject("warnoptions"); 1172 if (warnoptions != NULL && PyList_Size(warnoptions) > 0) 1173 { 1174 PyObject *warnings_module = PyImport_ImportModule("warnings"); 1175 if (warnings_module == NULL) { 1176 fprintf(stderr, "'import warnings' failed; traceback:\n"); 1177 _PyErr_Print(tstate); 1178 } 1179 Py_XDECREF(warnings_module); 1180 } 1181 1182 interp->runtime->initialized = 1; 1183 } 1184 1185 if (config->site_import) { 1186 status = init_import_site(); 1187 if (_PyStatus_EXCEPTION(status)) { 1188 return status; 1189 } 1190 } 1191 1192 if (is_main_interp) { 1193 #ifndef MS_WINDOWS 1194 emit_stderr_warning_for_legacy_locale(interp->runtime); 1195 #endif 1196 } 1197 1198 // Warn about PYTHONTHREADDEBUG deprecation 1199 _PyThread_debug_deprecation(); 1200 1201 assert(!_PyErr_Occurred(tstate)); 1202 1203 return _PyStatus_OK(); 1204 } 1205 1206 1207 /* Update interpreter state based on supplied configuration settings 1208 * 1209 * After calling this function, most of the restrictions on the interpreter 1210 * are lifted. The only remaining incomplete settings are those related 1211 * to the main module (sys.argv[0], __main__ metadata) 1212 * 1213 * Calling this when the interpreter is not initializing, is already 1214 * initialized or without a valid current thread state is a fatal error. 1215 * Other errors should be reported as normal Python exceptions with a 1216 * non-zero return code. 1217 */ 1218 static PyStatus pyinit_main(PyThreadState * tstate)1219 pyinit_main(PyThreadState *tstate) 1220 { 1221 PyInterpreterState *interp = tstate->interp; 1222 if (!interp->runtime->core_initialized) { 1223 return _PyStatus_ERR("runtime core not initialized"); 1224 } 1225 1226 if (interp->runtime->initialized) { 1227 return pyinit_main_reconfigure(tstate); 1228 } 1229 1230 PyStatus status = init_interp_main(tstate); 1231 if (_PyStatus_EXCEPTION(status)) { 1232 return status; 1233 } 1234 return _PyStatus_OK(); 1235 } 1236 1237 1238 PyStatus Py_InitializeFromConfig(const PyConfig * config)1239 Py_InitializeFromConfig(const PyConfig *config) 1240 { 1241 if (config == NULL) { 1242 return _PyStatus_ERR("initialization config is NULL"); 1243 } 1244 1245 PyStatus status; 1246 1247 status = _PyRuntime_Initialize(); 1248 if (_PyStatus_EXCEPTION(status)) { 1249 return status; 1250 } 1251 _PyRuntimeState *runtime = &_PyRuntime; 1252 1253 PyThreadState *tstate = NULL; 1254 status = pyinit_core(runtime, config, &tstate); 1255 if (_PyStatus_EXCEPTION(status)) { 1256 return status; 1257 } 1258 config = _PyInterpreterState_GetConfig(tstate->interp); 1259 1260 if (config->_init_main) { 1261 status = pyinit_main(tstate); 1262 if (_PyStatus_EXCEPTION(status)) { 1263 return status; 1264 } 1265 } 1266 1267 return _PyStatus_OK(); 1268 } 1269 1270 1271 void Py_InitializeEx(int install_sigs)1272 Py_InitializeEx(int install_sigs) 1273 { 1274 PyStatus status; 1275 1276 status = _PyRuntime_Initialize(); 1277 if (_PyStatus_EXCEPTION(status)) { 1278 Py_ExitStatusException(status); 1279 } 1280 _PyRuntimeState *runtime = &_PyRuntime; 1281 1282 if (runtime->initialized) { 1283 /* bpo-33932: Calling Py_Initialize() twice does nothing. */ 1284 return; 1285 } 1286 1287 PyConfig config; 1288 _PyConfig_InitCompatConfig(&config); 1289 1290 config.install_signal_handlers = install_sigs; 1291 1292 status = Py_InitializeFromConfig(&config); 1293 PyConfig_Clear(&config); 1294 if (_PyStatus_EXCEPTION(status)) { 1295 Py_ExitStatusException(status); 1296 } 1297 } 1298 1299 void Py_Initialize(void)1300 Py_Initialize(void) 1301 { 1302 Py_InitializeEx(1); 1303 } 1304 1305 1306 PyStatus _Py_InitializeMain(void)1307 _Py_InitializeMain(void) 1308 { 1309 PyStatus status = _PyRuntime_Initialize(); 1310 if (_PyStatus_EXCEPTION(status)) { 1311 return status; 1312 } 1313 _PyRuntimeState *runtime = &_PyRuntime; 1314 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime); 1315 return pyinit_main(tstate); 1316 } 1317 1318 1319 static void finalize_modules_delete_special(PyThreadState * tstate,int verbose)1320 finalize_modules_delete_special(PyThreadState *tstate, int verbose) 1321 { 1322 // List of names to clear in sys 1323 static const char * const sys_deletes[] = { 1324 "path", "argv", "ps1", "ps2", 1325 "last_type", "last_value", "last_traceback", 1326 "path_hooks", "path_importer_cache", "meta_path", 1327 "__interactivehook__", 1328 NULL 1329 }; 1330 1331 static const char * const sys_files[] = { 1332 "stdin", "__stdin__", 1333 "stdout", "__stdout__", 1334 "stderr", "__stderr__", 1335 NULL 1336 }; 1337 1338 PyInterpreterState *interp = tstate->interp; 1339 if (verbose) { 1340 PySys_WriteStderr("# clear builtins._\n"); 1341 } 1342 if (PyDict_SetItemString(interp->builtins, "_", Py_None) < 0) { 1343 PyErr_WriteUnraisable(NULL); 1344 } 1345 1346 const char * const *p; 1347 for (p = sys_deletes; *p != NULL; p++) { 1348 if (verbose) { 1349 PySys_WriteStderr("# clear sys.%s\n", *p); 1350 } 1351 if (PyDict_SetItemString(interp->sysdict, *p, Py_None) < 0) { 1352 PyErr_WriteUnraisable(NULL); 1353 } 1354 } 1355 for (p = sys_files; *p != NULL; p+=2) { 1356 const char *name = p[0]; 1357 const char *orig_name = p[1]; 1358 if (verbose) { 1359 PySys_WriteStderr("# restore sys.%s\n", name); 1360 } 1361 PyObject *value = _PyDict_GetItemStringWithError(interp->sysdict, 1362 orig_name); 1363 if (value == NULL) { 1364 if (_PyErr_Occurred(tstate)) { 1365 PyErr_WriteUnraisable(NULL); 1366 } 1367 value = Py_None; 1368 } 1369 if (PyDict_SetItemString(interp->sysdict, name, value) < 0) { 1370 PyErr_WriteUnraisable(NULL); 1371 } 1372 } 1373 } 1374 1375 1376 static PyObject* finalize_remove_modules(PyObject * modules,int verbose)1377 finalize_remove_modules(PyObject *modules, int verbose) 1378 { 1379 PyObject *weaklist = PyList_New(0); 1380 if (weaklist == NULL) { 1381 PyErr_WriteUnraisable(NULL); 1382 } 1383 1384 #define STORE_MODULE_WEAKREF(name, mod) \ 1385 if (weaklist != NULL) { \ 1386 PyObject *wr = PyWeakref_NewRef(mod, NULL); \ 1387 if (wr) { \ 1388 PyObject *tup = PyTuple_Pack(2, name, wr); \ 1389 if (!tup || PyList_Append(weaklist, tup) < 0) { \ 1390 PyErr_WriteUnraisable(NULL); \ 1391 } \ 1392 Py_XDECREF(tup); \ 1393 Py_DECREF(wr); \ 1394 } \ 1395 else { \ 1396 PyErr_WriteUnraisable(NULL); \ 1397 } \ 1398 } 1399 1400 #define CLEAR_MODULE(name, mod) \ 1401 if (PyModule_Check(mod)) { \ 1402 if (verbose && PyUnicode_Check(name)) { \ 1403 PySys_FormatStderr("# cleanup[2] removing %U\n", name); \ 1404 } \ 1405 STORE_MODULE_WEAKREF(name, mod); \ 1406 if (PyObject_SetItem(modules, name, Py_None) < 0) { \ 1407 PyErr_WriteUnraisable(NULL); \ 1408 } \ 1409 } 1410 1411 if (PyDict_CheckExact(modules)) { 1412 Py_ssize_t pos = 0; 1413 PyObject *key, *value; 1414 while (PyDict_Next(modules, &pos, &key, &value)) { 1415 CLEAR_MODULE(key, value); 1416 } 1417 } 1418 else { 1419 PyObject *iterator = PyObject_GetIter(modules); 1420 if (iterator == NULL) { 1421 PyErr_WriteUnraisable(NULL); 1422 } 1423 else { 1424 PyObject *key; 1425 while ((key = PyIter_Next(iterator))) { 1426 PyObject *value = PyObject_GetItem(modules, key); 1427 if (value == NULL) { 1428 PyErr_WriteUnraisable(NULL); 1429 continue; 1430 } 1431 CLEAR_MODULE(key, value); 1432 Py_DECREF(value); 1433 Py_DECREF(key); 1434 } 1435 if (PyErr_Occurred()) { 1436 PyErr_WriteUnraisable(NULL); 1437 } 1438 Py_DECREF(iterator); 1439 } 1440 } 1441 #undef CLEAR_MODULE 1442 #undef STORE_MODULE_WEAKREF 1443 1444 return weaklist; 1445 } 1446 1447 1448 static void finalize_clear_modules_dict(PyObject * modules)1449 finalize_clear_modules_dict(PyObject *modules) 1450 { 1451 if (PyDict_CheckExact(modules)) { 1452 PyDict_Clear(modules); 1453 } 1454 else { 1455 if (PyObject_CallMethodNoArgs(modules, &_Py_ID(clear)) == NULL) { 1456 PyErr_WriteUnraisable(NULL); 1457 } 1458 } 1459 } 1460 1461 1462 static void finalize_restore_builtins(PyThreadState * tstate)1463 finalize_restore_builtins(PyThreadState *tstate) 1464 { 1465 PyInterpreterState *interp = tstate->interp; 1466 PyObject *dict = PyDict_Copy(interp->builtins); 1467 if (dict == NULL) { 1468 PyErr_WriteUnraisable(NULL); 1469 } 1470 PyDict_Clear(interp->builtins); 1471 if (PyDict_Update(interp->builtins, interp->builtins_copy)) { 1472 _PyErr_Clear(tstate); 1473 } 1474 Py_XDECREF(dict); 1475 } 1476 1477 1478 static void finalize_modules_clear_weaklist(PyInterpreterState * interp,PyObject * weaklist,int verbose)1479 finalize_modules_clear_weaklist(PyInterpreterState *interp, 1480 PyObject *weaklist, int verbose) 1481 { 1482 // First clear modules imported later 1483 for (Py_ssize_t i = PyList_GET_SIZE(weaklist) - 1; i >= 0; i--) { 1484 PyObject *tup = PyList_GET_ITEM(weaklist, i); 1485 PyObject *name = PyTuple_GET_ITEM(tup, 0); 1486 PyObject *mod = PyWeakref_GET_OBJECT(PyTuple_GET_ITEM(tup, 1)); 1487 if (mod == Py_None) { 1488 continue; 1489 } 1490 assert(PyModule_Check(mod)); 1491 PyObject *dict = PyModule_GetDict(mod); 1492 if (dict == interp->builtins || dict == interp->sysdict) { 1493 continue; 1494 } 1495 Py_INCREF(mod); 1496 if (verbose && PyUnicode_Check(name)) { 1497 PySys_FormatStderr("# cleanup[3] wiping %U\n", name); 1498 } 1499 _PyModule_Clear(mod); 1500 Py_DECREF(mod); 1501 } 1502 } 1503 1504 1505 static void finalize_clear_sys_builtins_dict(PyInterpreterState * interp,int verbose)1506 finalize_clear_sys_builtins_dict(PyInterpreterState *interp, int verbose) 1507 { 1508 // Clear sys dict 1509 if (verbose) { 1510 PySys_FormatStderr("# cleanup[3] wiping sys\n"); 1511 } 1512 _PyModule_ClearDict(interp->sysdict); 1513 1514 // Clear builtins dict 1515 if (verbose) { 1516 PySys_FormatStderr("# cleanup[3] wiping builtins\n"); 1517 } 1518 _PyModule_ClearDict(interp->builtins); 1519 } 1520 1521 1522 /* Clear modules, as good as we can */ 1523 static void finalize_modules(PyThreadState * tstate)1524 finalize_modules(PyThreadState *tstate) 1525 { 1526 PyInterpreterState *interp = tstate->interp; 1527 PyObject *modules = interp->modules; 1528 if (modules == NULL) { 1529 // Already done 1530 return; 1531 } 1532 int verbose = _PyInterpreterState_GetConfig(interp)->verbose; 1533 1534 // Delete some special builtins._ and sys attributes first. These are 1535 // common places where user values hide and people complain when their 1536 // destructors fail. Since the modules containing them are 1537 // deleted *last* of all, they would come too late in the normal 1538 // destruction order. Sigh. 1539 // 1540 // XXX Perhaps these precautions are obsolete. Who knows? 1541 finalize_modules_delete_special(tstate, verbose); 1542 1543 // Remove all modules from sys.modules, hoping that garbage collection 1544 // can reclaim most of them: set all sys.modules values to None. 1545 // 1546 // We prepare a list which will receive (name, weakref) tuples of 1547 // modules when they are removed from sys.modules. The name is used 1548 // for diagnosis messages (in verbose mode), while the weakref helps 1549 // detect those modules which have been held alive. 1550 PyObject *weaklist = finalize_remove_modules(modules, verbose); 1551 1552 // Clear the modules dict 1553 finalize_clear_modules_dict(modules); 1554 1555 // Restore the original builtins dict, to ensure that any 1556 // user data gets cleared. 1557 finalize_restore_builtins(tstate); 1558 1559 // Collect garbage 1560 _PyGC_CollectNoFail(tstate); 1561 1562 // Dump GC stats before it's too late, since it uses the warnings 1563 // machinery. 1564 _PyGC_DumpShutdownStats(interp); 1565 1566 if (weaklist != NULL) { 1567 // Now, if there are any modules left alive, clear their globals to 1568 // minimize potential leaks. All C extension modules actually end 1569 // up here, since they are kept alive in the interpreter state. 1570 // 1571 // The special treatment of "builtins" here is because even 1572 // when it's not referenced as a module, its dictionary is 1573 // referenced by almost every module's __builtins__. Since 1574 // deleting a module clears its dictionary (even if there are 1575 // references left to it), we need to delete the "builtins" 1576 // module last. Likewise, we don't delete sys until the very 1577 // end because it is implicitly referenced (e.g. by print). 1578 // 1579 // Since dict is ordered in CPython 3.6+, modules are saved in 1580 // importing order. First clear modules imported later. 1581 finalize_modules_clear_weaklist(interp, weaklist, verbose); 1582 Py_DECREF(weaklist); 1583 } 1584 1585 // Clear sys and builtins modules dict 1586 finalize_clear_sys_builtins_dict(interp, verbose); 1587 1588 // Clear module dict copies stored in the interpreter state: 1589 // clear PyInterpreterState.modules_by_index and 1590 // clear PyModuleDef.m_base.m_copy (of extensions not using the multi-phase 1591 // initialization API) 1592 _PyInterpreterState_ClearModules(interp); 1593 1594 // Clear and delete the modules directory. Actual modules will 1595 // still be there only if imported during the execution of some 1596 // destructor. 1597 Py_SETREF(interp->modules, NULL); 1598 1599 // Collect garbage once more 1600 _PyGC_CollectNoFail(tstate); 1601 } 1602 1603 1604 /* Flush stdout and stderr */ 1605 1606 static int file_is_closed(PyObject * fobj)1607 file_is_closed(PyObject *fobj) 1608 { 1609 int r; 1610 PyObject *tmp = PyObject_GetAttrString(fobj, "closed"); 1611 if (tmp == NULL) { 1612 PyErr_Clear(); 1613 return 0; 1614 } 1615 r = PyObject_IsTrue(tmp); 1616 Py_DECREF(tmp); 1617 if (r < 0) 1618 PyErr_Clear(); 1619 return r > 0; 1620 } 1621 1622 1623 static int flush_std_files(void)1624 flush_std_files(void) 1625 { 1626 PyThreadState *tstate = _PyThreadState_GET(); 1627 PyObject *fout = _PySys_GetAttr(tstate, &_Py_ID(stdout)); 1628 PyObject *ferr = _PySys_GetAttr(tstate, &_Py_ID(stderr)); 1629 PyObject *tmp; 1630 int status = 0; 1631 1632 if (fout != NULL && fout != Py_None && !file_is_closed(fout)) { 1633 tmp = PyObject_CallMethodNoArgs(fout, &_Py_ID(flush)); 1634 if (tmp == NULL) { 1635 PyErr_WriteUnraisable(fout); 1636 status = -1; 1637 } 1638 else 1639 Py_DECREF(tmp); 1640 } 1641 1642 if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) { 1643 tmp = PyObject_CallMethodNoArgs(ferr, &_Py_ID(flush)); 1644 if (tmp == NULL) { 1645 PyErr_Clear(); 1646 status = -1; 1647 } 1648 else 1649 Py_DECREF(tmp); 1650 } 1651 1652 return status; 1653 } 1654 1655 /* Undo the effect of Py_Initialize(). 1656 1657 Beware: if multiple interpreter and/or thread states exist, these 1658 are not wiped out; only the current thread and interpreter state 1659 are deleted. But since everything else is deleted, those other 1660 interpreter and thread states should no longer be used. 1661 1662 (XXX We should do better, e.g. wipe out all interpreters and 1663 threads.) 1664 1665 Locking: as above. 1666 1667 */ 1668 1669 1670 static void finalize_interp_types(PyInterpreterState * interp)1671 finalize_interp_types(PyInterpreterState *interp) 1672 { 1673 _PyUnicode_FiniTypes(interp); 1674 _PySys_Fini(interp); 1675 _PyExc_Fini(interp); 1676 _PyAsyncGen_Fini(interp); 1677 _PyContext_Fini(interp); 1678 _PyFloat_FiniType(interp); 1679 _PyLong_FiniTypes(interp); 1680 _PyThread_FiniType(interp); 1681 _PyErr_FiniTypes(interp); 1682 _PyTypes_Fini(interp); 1683 _PyTypes_FiniTypes(interp); 1684 1685 // Call _PyUnicode_ClearInterned() before _PyDict_Fini() since it uses 1686 // a dict internally. 1687 _PyUnicode_ClearInterned(interp); 1688 1689 _PyDict_Fini(interp); 1690 _PyList_Fini(interp); 1691 _PyTuple_Fini(interp); 1692 1693 _PySlice_Fini(interp); 1694 1695 _PyUnicode_Fini(interp); 1696 _PyFloat_Fini(interp); 1697 } 1698 1699 1700 static void finalize_interp_clear(PyThreadState * tstate)1701 finalize_interp_clear(PyThreadState *tstate) 1702 { 1703 int is_main_interp = _Py_IsMainInterpreter(tstate->interp); 1704 1705 _PyExc_ClearExceptionGroupType(tstate->interp); 1706 1707 /* Clear interpreter state and all thread states */ 1708 _PyInterpreterState_Clear(tstate); 1709 1710 if (is_main_interp) { 1711 _PyIO_Fini(); 1712 } 1713 1714 /* Clear all loghooks */ 1715 /* Both _PySys_Audit function and users still need PyObject, such as tuple. 1716 Call _PySys_ClearAuditHooks when PyObject available. */ 1717 if (is_main_interp) { 1718 _PySys_ClearAuditHooks(tstate); 1719 } 1720 1721 if (is_main_interp) { 1722 _Py_HashRandomization_Fini(); 1723 _PyArg_Fini(); 1724 _Py_ClearFileSystemEncoding(); 1725 _Py_Deepfreeze_Fini(); 1726 } 1727 1728 finalize_interp_types(tstate->interp); 1729 } 1730 1731 1732 static void finalize_interp_delete(PyInterpreterState * interp)1733 finalize_interp_delete(PyInterpreterState *interp) 1734 { 1735 if (_Py_IsMainInterpreter(interp)) { 1736 /* Cleanup auto-thread-state */ 1737 _PyGILState_Fini(interp); 1738 } 1739 1740 /* We can't call _PyEval_FiniGIL() here because destroying the GIL lock can 1741 fail when it is being awaited by another running daemon thread (see 1742 bpo-9901). Instead pycore_create_interpreter() destroys the previously 1743 created GIL, which ensures that Py_Initialize / Py_FinalizeEx can be 1744 called multiple times. */ 1745 1746 PyInterpreterState_Delete(interp); 1747 } 1748 1749 1750 int Py_FinalizeEx(void)1751 Py_FinalizeEx(void) 1752 { 1753 int status = 0; 1754 1755 _PyRuntimeState *runtime = &_PyRuntime; 1756 if (!runtime->initialized) { 1757 return status; 1758 } 1759 1760 /* Get current thread state and interpreter pointer */ 1761 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime); 1762 1763 // Wrap up existing "threading"-module-created, non-daemon threads. 1764 wait_for_thread_shutdown(tstate); 1765 1766 // Make any remaining pending calls. 1767 _Py_FinishPendingCalls(tstate); 1768 1769 /* The interpreter is still entirely intact at this point, and the 1770 * exit funcs may be relying on that. In particular, if some thread 1771 * or exit func is still waiting to do an import, the import machinery 1772 * expects Py_IsInitialized() to return true. So don't say the 1773 * runtime is uninitialized until after the exit funcs have run. 1774 * Note that Threading.py uses an exit func to do a join on all the 1775 * threads created thru it, so this also protects pending imports in 1776 * the threads created via Threading. 1777 */ 1778 1779 _PyAtExit_Call(tstate->interp); 1780 1781 /* Copy the core config, PyInterpreterState_Delete() free 1782 the core config memory */ 1783 #ifdef Py_REF_DEBUG 1784 int show_ref_count = tstate->interp->config.show_ref_count; 1785 #endif 1786 #ifdef Py_TRACE_REFS 1787 int dump_refs = tstate->interp->config.dump_refs; 1788 wchar_t *dump_refs_file = tstate->interp->config.dump_refs_file; 1789 #endif 1790 #ifdef WITH_PYMALLOC 1791 int malloc_stats = tstate->interp->config.malloc_stats; 1792 #endif 1793 1794 /* Remaining daemon threads will automatically exit 1795 when they attempt to take the GIL (ex: PyEval_RestoreThread()). */ 1796 _PyRuntimeState_SetFinalizing(runtime, tstate); 1797 runtime->initialized = 0; 1798 runtime->core_initialized = 0; 1799 1800 /* Destroy the state of all threads of the interpreter, except of the 1801 current thread. In practice, only daemon threads should still be alive, 1802 except if wait_for_thread_shutdown() has been cancelled by CTRL+C. 1803 Clear frames of other threads to call objects destructors. Destructors 1804 will be called in the current Python thread. Since 1805 _PyRuntimeState_SetFinalizing() has been called, no other Python thread 1806 can take the GIL at this point: if they try, they will exit 1807 immediately. */ 1808 _PyThreadState_DeleteExcept(runtime, tstate); 1809 1810 /* Flush sys.stdout and sys.stderr */ 1811 if (flush_std_files() < 0) { 1812 status = -1; 1813 } 1814 1815 /* Disable signal handling */ 1816 _PySignal_Fini(); 1817 1818 /* Collect garbage. This may call finalizers; it's nice to call these 1819 * before all modules are destroyed. 1820 * XXX If a __del__ or weakref callback is triggered here, and tries to 1821 * XXX import a module, bad things can happen, because Python no 1822 * XXX longer believes it's initialized. 1823 * XXX Fatal Python error: Interpreter not initialized (version mismatch?) 1824 * XXX is easy to provoke that way. I've also seen, e.g., 1825 * XXX Exception exceptions.ImportError: 'No module named sha' 1826 * XXX in <function callback at 0x008F5718> ignored 1827 * XXX but I'm unclear on exactly how that one happens. In any case, 1828 * XXX I haven't seen a real-life report of either of these. 1829 */ 1830 PyGC_Collect(); 1831 1832 /* Destroy all modules */ 1833 finalize_modules(tstate); 1834 1835 /* Print debug stats if any */ 1836 _PyEval_Fini(); 1837 1838 /* Flush sys.stdout and sys.stderr (again, in case more was printed) */ 1839 if (flush_std_files() < 0) { 1840 status = -1; 1841 } 1842 1843 /* Collect final garbage. This disposes of cycles created by 1844 * class definitions, for example. 1845 * XXX This is disabled because it caused too many problems. If 1846 * XXX a __del__ or weakref callback triggers here, Python code has 1847 * XXX a hard time running, because even the sys module has been 1848 * XXX cleared out (sys.stdout is gone, sys.excepthook is gone, etc). 1849 * XXX One symptom is a sequence of information-free messages 1850 * XXX coming from threads (if a __del__ or callback is invoked, 1851 * XXX other threads can execute too, and any exception they encounter 1852 * XXX triggers a comedy of errors as subsystem after subsystem 1853 * XXX fails to find what it *expects* to find in sys to help report 1854 * XXX the exception and consequent unexpected failures). I've also 1855 * XXX seen segfaults then, after adding print statements to the 1856 * XXX Python code getting called. 1857 */ 1858 #if 0 1859 _PyGC_CollectIfEnabled(); 1860 #endif 1861 1862 /* Disable tracemalloc after all Python objects have been destroyed, 1863 so it is possible to use tracemalloc in objects destructor. */ 1864 _PyTraceMalloc_Fini(); 1865 1866 /* Destroy the database used by _PyImport_{Fixup,Find}Extension */ 1867 _PyImport_Fini(); 1868 1869 /* unload faulthandler module */ 1870 _PyFaulthandler_Fini(); 1871 1872 /* dump hash stats */ 1873 _PyHash_Fini(); 1874 1875 #ifdef Py_TRACE_REFS 1876 /* Display all objects still alive -- this can invoke arbitrary 1877 * __repr__ overrides, so requires a mostly-intact interpreter. 1878 * Alas, a lot of stuff may still be alive now that will be cleaned 1879 * up later. 1880 */ 1881 1882 FILE *dump_refs_fp = NULL; 1883 if (dump_refs_file != NULL) { 1884 dump_refs_fp = _Py_wfopen(dump_refs_file, L"w"); 1885 if (dump_refs_fp == NULL) { 1886 fprintf(stderr, "PYTHONDUMPREFSFILE: cannot create file: %ls\n", dump_refs_file); 1887 } 1888 } 1889 1890 if (dump_refs) { 1891 _Py_PrintReferences(stderr); 1892 } 1893 1894 if (dump_refs_fp != NULL) { 1895 _Py_PrintReferences(dump_refs_fp); 1896 } 1897 #endif /* Py_TRACE_REFS */ 1898 1899 finalize_interp_clear(tstate); 1900 finalize_interp_delete(tstate->interp); 1901 1902 #ifdef Py_REF_DEBUG 1903 if (show_ref_count) { 1904 _PyDebug_PrintTotalRefs(); 1905 } 1906 #endif 1907 1908 #ifdef Py_TRACE_REFS 1909 /* Display addresses (& refcnts) of all objects still alive. 1910 * An address can be used to find the repr of the object, printed 1911 * above by _Py_PrintReferences. 1912 */ 1913 1914 if (dump_refs) { 1915 _Py_PrintReferenceAddresses(stderr); 1916 } 1917 1918 if (dump_refs_fp != NULL) { 1919 _Py_PrintReferenceAddresses(dump_refs_fp); 1920 fclose(dump_refs_fp); 1921 } 1922 #endif /* Py_TRACE_REFS */ 1923 #ifdef WITH_PYMALLOC 1924 if (malloc_stats) { 1925 _PyObject_DebugMallocStats(stderr); 1926 } 1927 #endif 1928 1929 call_ll_exitfuncs(runtime); 1930 1931 _PyRuntime_Finalize(); 1932 return status; 1933 } 1934 1935 void Py_Finalize(void)1936 Py_Finalize(void) 1937 { 1938 Py_FinalizeEx(); 1939 } 1940 1941 1942 /* Create and initialize a new interpreter and thread, and return the 1943 new thread. This requires that Py_Initialize() has been called 1944 first. 1945 1946 Unsuccessful initialization yields a NULL pointer. Note that *no* 1947 exception information is available even in this case -- the 1948 exception information is held in the thread, and there is no 1949 thread. 1950 1951 Locking: as above. 1952 1953 */ 1954 1955 static PyStatus new_interpreter(PyThreadState ** tstate_p,int isolated_subinterpreter)1956 new_interpreter(PyThreadState **tstate_p, int isolated_subinterpreter) 1957 { 1958 PyStatus status; 1959 1960 status = _PyRuntime_Initialize(); 1961 if (_PyStatus_EXCEPTION(status)) { 1962 return status; 1963 } 1964 _PyRuntimeState *runtime = &_PyRuntime; 1965 1966 if (!runtime->initialized) { 1967 return _PyStatus_ERR("Py_Initialize must be called first"); 1968 } 1969 1970 /* Issue #10915, #15751: The GIL API doesn't work with multiple 1971 interpreters: disable PyGILState_Check(). */ 1972 runtime->gilstate.check_enabled = 0; 1973 1974 PyInterpreterState *interp = PyInterpreterState_New(); 1975 if (interp == NULL) { 1976 *tstate_p = NULL; 1977 return _PyStatus_OK(); 1978 } 1979 1980 PyThreadState *tstate = PyThreadState_New(interp); 1981 if (tstate == NULL) { 1982 PyInterpreterState_Delete(interp); 1983 *tstate_p = NULL; 1984 return _PyStatus_OK(); 1985 } 1986 1987 PyThreadState *save_tstate = PyThreadState_Swap(tstate); 1988 1989 /* Copy the current interpreter config into the new interpreter */ 1990 const PyConfig *config; 1991 if (save_tstate != NULL) { 1992 config = _PyInterpreterState_GetConfig(save_tstate->interp); 1993 } 1994 else 1995 { 1996 /* No current thread state, copy from the main interpreter */ 1997 PyInterpreterState *main_interp = _PyInterpreterState_Main(); 1998 config = _PyInterpreterState_GetConfig(main_interp); 1999 } 2000 2001 2002 status = _PyConfig_Copy(&interp->config, config); 2003 if (_PyStatus_EXCEPTION(status)) { 2004 goto error; 2005 } 2006 interp->config._isolated_interpreter = isolated_subinterpreter; 2007 2008 status = init_interp_create_gil(tstate); 2009 if (_PyStatus_EXCEPTION(status)) { 2010 goto error; 2011 } 2012 2013 status = pycore_interp_init(tstate); 2014 if (_PyStatus_EXCEPTION(status)) { 2015 goto error; 2016 } 2017 2018 status = init_interp_main(tstate); 2019 if (_PyStatus_EXCEPTION(status)) { 2020 goto error; 2021 } 2022 2023 *tstate_p = tstate; 2024 return _PyStatus_OK(); 2025 2026 error: 2027 *tstate_p = NULL; 2028 2029 /* Oops, it didn't work. Undo it all. */ 2030 PyErr_PrintEx(0); 2031 PyThreadState_Swap(save_tstate); 2032 PyThreadState_Clear(tstate); 2033 PyThreadState_Delete(tstate); 2034 PyInterpreterState_Delete(interp); 2035 2036 return status; 2037 } 2038 2039 PyThreadState * _Py_NewInterpreter(int isolated_subinterpreter)2040 _Py_NewInterpreter(int isolated_subinterpreter) 2041 { 2042 PyThreadState *tstate = NULL; 2043 PyStatus status = new_interpreter(&tstate, isolated_subinterpreter); 2044 if (_PyStatus_EXCEPTION(status)) { 2045 Py_ExitStatusException(status); 2046 } 2047 return tstate; 2048 2049 } 2050 2051 PyThreadState * Py_NewInterpreter(void)2052 Py_NewInterpreter(void) 2053 { 2054 return _Py_NewInterpreter(0); 2055 } 2056 2057 /* Delete an interpreter and its last thread. This requires that the 2058 given thread state is current, that the thread has no remaining 2059 frames, and that it is its interpreter's only remaining thread. 2060 It is a fatal error to violate these constraints. 2061 2062 (Py_FinalizeEx() doesn't have these constraints -- it zaps 2063 everything, regardless.) 2064 2065 Locking: as above. 2066 2067 */ 2068 2069 void Py_EndInterpreter(PyThreadState * tstate)2070 Py_EndInterpreter(PyThreadState *tstate) 2071 { 2072 PyInterpreterState *interp = tstate->interp; 2073 2074 if (tstate != _PyThreadState_GET()) { 2075 Py_FatalError("thread is not current"); 2076 } 2077 if (tstate->cframe->current_frame != NULL) { 2078 Py_FatalError("thread still has a frame"); 2079 } 2080 interp->finalizing = 1; 2081 2082 // Wrap up existing "threading"-module-created, non-daemon threads. 2083 wait_for_thread_shutdown(tstate); 2084 2085 _PyAtExit_Call(tstate->interp); 2086 2087 if (tstate != interp->threads.head || tstate->next != NULL) { 2088 Py_FatalError("not the last thread"); 2089 } 2090 2091 finalize_modules(tstate); 2092 2093 finalize_interp_clear(tstate); 2094 finalize_interp_delete(tstate->interp); 2095 } 2096 2097 /* Add the __main__ module */ 2098 2099 static PyStatus add_main_module(PyInterpreterState * interp)2100 add_main_module(PyInterpreterState *interp) 2101 { 2102 PyObject *m, *d, *loader, *ann_dict; 2103 m = PyImport_AddModule("__main__"); 2104 if (m == NULL) 2105 return _PyStatus_ERR("can't create __main__ module"); 2106 2107 d = PyModule_GetDict(m); 2108 ann_dict = PyDict_New(); 2109 if ((ann_dict == NULL) || 2110 (PyDict_SetItemString(d, "__annotations__", ann_dict) < 0)) { 2111 return _PyStatus_ERR("Failed to initialize __main__.__annotations__"); 2112 } 2113 Py_DECREF(ann_dict); 2114 2115 if (_PyDict_GetItemStringWithError(d, "__builtins__") == NULL) { 2116 if (PyErr_Occurred()) { 2117 return _PyStatus_ERR("Failed to test __main__.__builtins__"); 2118 } 2119 PyObject *bimod = PyImport_ImportModule("builtins"); 2120 if (bimod == NULL) { 2121 return _PyStatus_ERR("Failed to retrieve builtins module"); 2122 } 2123 if (PyDict_SetItemString(d, "__builtins__", bimod) < 0) { 2124 return _PyStatus_ERR("Failed to initialize __main__.__builtins__"); 2125 } 2126 Py_DECREF(bimod); 2127 } 2128 2129 /* Main is a little special - imp.is_builtin("__main__") will return 2130 * False, but BuiltinImporter is still the most appropriate initial 2131 * setting for its __loader__ attribute. A more suitable value will 2132 * be set if __main__ gets further initialized later in the startup 2133 * process. 2134 */ 2135 loader = _PyDict_GetItemStringWithError(d, "__loader__"); 2136 if (loader == NULL || loader == Py_None) { 2137 if (PyErr_Occurred()) { 2138 return _PyStatus_ERR("Failed to test __main__.__loader__"); 2139 } 2140 PyObject *loader = PyObject_GetAttrString(interp->importlib, 2141 "BuiltinImporter"); 2142 if (loader == NULL) { 2143 return _PyStatus_ERR("Failed to retrieve BuiltinImporter"); 2144 } 2145 if (PyDict_SetItemString(d, "__loader__", loader) < 0) { 2146 return _PyStatus_ERR("Failed to initialize __main__.__loader__"); 2147 } 2148 Py_DECREF(loader); 2149 } 2150 return _PyStatus_OK(); 2151 } 2152 2153 /* Import the site module (not into __main__ though) */ 2154 2155 static PyStatus init_import_site(void)2156 init_import_site(void) 2157 { 2158 PyObject *m; 2159 m = PyImport_ImportModule("site"); 2160 if (m == NULL) { 2161 return _PyStatus_ERR("Failed to import the site module"); 2162 } 2163 Py_DECREF(m); 2164 return _PyStatus_OK(); 2165 } 2166 2167 /* Check if a file descriptor is valid or not. 2168 Return 0 if the file descriptor is invalid, return non-zero otherwise. */ 2169 static int is_valid_fd(int fd)2170 is_valid_fd(int fd) 2171 { 2172 /* dup() is faster than fstat(): fstat() can require input/output operations, 2173 whereas dup() doesn't. There is a low risk of EMFILE/ENFILE at Python 2174 startup. Problem: dup() doesn't check if the file descriptor is valid on 2175 some platforms. 2176 2177 fcntl(fd, F_GETFD) is even faster, because it only checks the process table. 2178 It is preferred over dup() when available, since it cannot fail with the 2179 "too many open files" error (EMFILE). 2180 2181 bpo-30225: On macOS Tiger, when stdout is redirected to a pipe and the other 2182 side of the pipe is closed, dup(1) succeed, whereas fstat(1, &st) fails with 2183 EBADF. FreeBSD has similar issue (bpo-32849). 2184 2185 Only use dup() on Linux where dup() is enough to detect invalid FD 2186 (bpo-32849). 2187 */ 2188 if (fd < 0) { 2189 return 0; 2190 } 2191 #if defined(F_GETFD) && ( \ 2192 defined(__linux__) || \ 2193 defined(__APPLE__) || \ 2194 defined(__wasm__)) 2195 return fcntl(fd, F_GETFD) >= 0; 2196 #elif defined(__linux__) 2197 int fd2 = dup(fd); 2198 if (fd2 >= 0) { 2199 close(fd2); 2200 } 2201 return (fd2 >= 0); 2202 #elif defined(MS_WINDOWS) 2203 HANDLE hfile; 2204 _Py_BEGIN_SUPPRESS_IPH 2205 hfile = (HANDLE)_get_osfhandle(fd); 2206 _Py_END_SUPPRESS_IPH 2207 return (hfile != INVALID_HANDLE_VALUE 2208 && GetFileType(hfile) != FILE_TYPE_UNKNOWN); 2209 #else 2210 struct stat st; 2211 return (fstat(fd, &st) == 0); 2212 #endif 2213 } 2214 2215 /* returns Py_None if the fd is not valid */ 2216 static PyObject* create_stdio(const PyConfig * config,PyObject * io,int fd,int write_mode,const char * name,const wchar_t * encoding,const wchar_t * errors)2217 create_stdio(const PyConfig *config, PyObject* io, 2218 int fd, int write_mode, const char* name, 2219 const wchar_t* encoding, const wchar_t* errors) 2220 { 2221 PyObject *buf = NULL, *stream = NULL, *text = NULL, *raw = NULL, *res; 2222 const char* mode; 2223 const char* newline; 2224 PyObject *line_buffering, *write_through; 2225 int buffering, isatty; 2226 const int buffered_stdio = config->buffered_stdio; 2227 2228 if (!is_valid_fd(fd)) 2229 Py_RETURN_NONE; 2230 2231 /* stdin is always opened in buffered mode, first because it shouldn't 2232 make a difference in common use cases, second because TextIOWrapper 2233 depends on the presence of a read1() method which only exists on 2234 buffered streams. 2235 */ 2236 if (!buffered_stdio && write_mode) 2237 buffering = 0; 2238 else 2239 buffering = -1; 2240 if (write_mode) 2241 mode = "wb"; 2242 else 2243 mode = "rb"; 2244 buf = _PyObject_CallMethod(io, &_Py_ID(open), "isiOOOO", 2245 fd, mode, buffering, 2246 Py_None, Py_None, /* encoding, errors */ 2247 Py_None, Py_False); /* newline, closefd */ 2248 if (buf == NULL) 2249 goto error; 2250 2251 if (buffering) { 2252 raw = PyObject_GetAttr(buf, &_Py_ID(raw)); 2253 if (raw == NULL) 2254 goto error; 2255 } 2256 else { 2257 raw = buf; 2258 Py_INCREF(raw); 2259 } 2260 2261 #ifdef MS_WINDOWS 2262 /* Windows console IO is always UTF-8 encoded */ 2263 if (PyWindowsConsoleIO_Check(raw)) 2264 encoding = L"utf-8"; 2265 #endif 2266 2267 text = PyUnicode_FromString(name); 2268 if (text == NULL || PyObject_SetAttr(raw, &_Py_ID(name), text) < 0) 2269 goto error; 2270 res = PyObject_CallMethodNoArgs(raw, &_Py_ID(isatty)); 2271 if (res == NULL) 2272 goto error; 2273 isatty = PyObject_IsTrue(res); 2274 Py_DECREF(res); 2275 if (isatty == -1) 2276 goto error; 2277 if (!buffered_stdio) 2278 write_through = Py_True; 2279 else 2280 write_through = Py_False; 2281 if (buffered_stdio && (isatty || fd == fileno(stderr))) 2282 line_buffering = Py_True; 2283 else 2284 line_buffering = Py_False; 2285 2286 Py_CLEAR(raw); 2287 Py_CLEAR(text); 2288 2289 #ifdef MS_WINDOWS 2290 /* sys.stdin: enable universal newline mode, translate "\r\n" and "\r" 2291 newlines to "\n". 2292 sys.stdout and sys.stderr: translate "\n" to "\r\n". */ 2293 newline = NULL; 2294 #else 2295 /* sys.stdin: split lines at "\n". 2296 sys.stdout and sys.stderr: don't translate newlines (use "\n"). */ 2297 newline = "\n"; 2298 #endif 2299 2300 PyObject *encoding_str = PyUnicode_FromWideChar(encoding, -1); 2301 if (encoding_str == NULL) { 2302 Py_CLEAR(buf); 2303 goto error; 2304 } 2305 2306 PyObject *errors_str = PyUnicode_FromWideChar(errors, -1); 2307 if (errors_str == NULL) { 2308 Py_CLEAR(buf); 2309 Py_CLEAR(encoding_str); 2310 goto error; 2311 } 2312 2313 stream = _PyObject_CallMethod(io, &_Py_ID(TextIOWrapper), "OOOsOO", 2314 buf, encoding_str, errors_str, 2315 newline, line_buffering, write_through); 2316 Py_CLEAR(buf); 2317 Py_CLEAR(encoding_str); 2318 Py_CLEAR(errors_str); 2319 if (stream == NULL) 2320 goto error; 2321 2322 if (write_mode) 2323 mode = "w"; 2324 else 2325 mode = "r"; 2326 text = PyUnicode_FromString(mode); 2327 if (!text || PyObject_SetAttr(stream, &_Py_ID(mode), text) < 0) 2328 goto error; 2329 Py_CLEAR(text); 2330 return stream; 2331 2332 error: 2333 Py_XDECREF(buf); 2334 Py_XDECREF(stream); 2335 Py_XDECREF(text); 2336 Py_XDECREF(raw); 2337 2338 if (PyErr_ExceptionMatches(PyExc_OSError) && !is_valid_fd(fd)) { 2339 /* Issue #24891: the file descriptor was closed after the first 2340 is_valid_fd() check was called. Ignore the OSError and set the 2341 stream to None. */ 2342 PyErr_Clear(); 2343 Py_RETURN_NONE; 2344 } 2345 return NULL; 2346 } 2347 2348 /* Set builtins.open to io.open */ 2349 static PyStatus init_set_builtins_open(void)2350 init_set_builtins_open(void) 2351 { 2352 PyObject *iomod = NULL, *wrapper; 2353 PyObject *bimod = NULL; 2354 PyStatus res = _PyStatus_OK(); 2355 2356 if (!(iomod = PyImport_ImportModule("io"))) { 2357 goto error; 2358 } 2359 2360 if (!(bimod = PyImport_ImportModule("builtins"))) { 2361 goto error; 2362 } 2363 2364 if (!(wrapper = PyObject_GetAttrString(iomod, "open"))) { 2365 goto error; 2366 } 2367 2368 /* Set builtins.open */ 2369 if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) { 2370 Py_DECREF(wrapper); 2371 goto error; 2372 } 2373 Py_DECREF(wrapper); 2374 goto done; 2375 2376 error: 2377 res = _PyStatus_ERR("can't initialize io.open"); 2378 2379 done: 2380 Py_XDECREF(bimod); 2381 Py_XDECREF(iomod); 2382 return res; 2383 } 2384 2385 2386 /* Create sys.stdin, sys.stdout and sys.stderr */ 2387 static PyStatus init_sys_streams(PyThreadState * tstate)2388 init_sys_streams(PyThreadState *tstate) 2389 { 2390 PyObject *iomod = NULL; 2391 PyObject *std = NULL; 2392 int fd; 2393 PyObject * encoding_attr; 2394 PyStatus res = _PyStatus_OK(); 2395 const PyConfig *config = _PyInterpreterState_GetConfig(tstate->interp); 2396 2397 /* Check that stdin is not a directory 2398 Using shell redirection, you can redirect stdin to a directory, 2399 crashing the Python interpreter. Catch this common mistake here 2400 and output a useful error message. Note that under MS Windows, 2401 the shell already prevents that. */ 2402 #ifndef MS_WINDOWS 2403 struct _Py_stat_struct sb; 2404 if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 && 2405 S_ISDIR(sb.st_mode)) { 2406 return _PyStatus_ERR("<stdin> is a directory, cannot continue"); 2407 } 2408 #endif 2409 2410 if (!(iomod = PyImport_ImportModule("io"))) { 2411 goto error; 2412 } 2413 2414 /* Set sys.stdin */ 2415 fd = fileno(stdin); 2416 /* Under some conditions stdin, stdout and stderr may not be connected 2417 * and fileno() may point to an invalid file descriptor. For example 2418 * GUI apps don't have valid standard streams by default. 2419 */ 2420 std = create_stdio(config, iomod, fd, 0, "<stdin>", 2421 config->stdio_encoding, 2422 config->stdio_errors); 2423 if (std == NULL) 2424 goto error; 2425 PySys_SetObject("__stdin__", std); 2426 _PySys_SetAttr(&_Py_ID(stdin), std); 2427 Py_DECREF(std); 2428 2429 /* Set sys.stdout */ 2430 fd = fileno(stdout); 2431 std = create_stdio(config, iomod, fd, 1, "<stdout>", 2432 config->stdio_encoding, 2433 config->stdio_errors); 2434 if (std == NULL) 2435 goto error; 2436 PySys_SetObject("__stdout__", std); 2437 _PySys_SetAttr(&_Py_ID(stdout), std); 2438 Py_DECREF(std); 2439 2440 #if 1 /* Disable this if you have trouble debugging bootstrap stuff */ 2441 /* Set sys.stderr, replaces the preliminary stderr */ 2442 fd = fileno(stderr); 2443 std = create_stdio(config, iomod, fd, 1, "<stderr>", 2444 config->stdio_encoding, 2445 L"backslashreplace"); 2446 if (std == NULL) 2447 goto error; 2448 2449 /* Same as hack above, pre-import stderr's codec to avoid recursion 2450 when import.c tries to write to stderr in verbose mode. */ 2451 encoding_attr = PyObject_GetAttrString(std, "encoding"); 2452 if (encoding_attr != NULL) { 2453 const char *std_encoding = PyUnicode_AsUTF8(encoding_attr); 2454 if (std_encoding != NULL) { 2455 PyObject *codec_info = _PyCodec_Lookup(std_encoding); 2456 Py_XDECREF(codec_info); 2457 } 2458 Py_DECREF(encoding_attr); 2459 } 2460 _PyErr_Clear(tstate); /* Not a fatal error if codec isn't available */ 2461 2462 if (PySys_SetObject("__stderr__", std) < 0) { 2463 Py_DECREF(std); 2464 goto error; 2465 } 2466 if (_PySys_SetAttr(&_Py_ID(stderr), std) < 0) { 2467 Py_DECREF(std); 2468 goto error; 2469 } 2470 Py_DECREF(std); 2471 #endif 2472 2473 goto done; 2474 2475 error: 2476 res = _PyStatus_ERR("can't initialize sys standard streams"); 2477 2478 done: 2479 _Py_ClearStandardStreamEncoding(); 2480 Py_XDECREF(iomod); 2481 return res; 2482 } 2483 2484 2485 static void _Py_FatalError_DumpTracebacks(int fd,PyInterpreterState * interp,PyThreadState * tstate)2486 _Py_FatalError_DumpTracebacks(int fd, PyInterpreterState *interp, 2487 PyThreadState *tstate) 2488 { 2489 PUTS(fd, "\n"); 2490 2491 /* display the current Python stack */ 2492 _Py_DumpTracebackThreads(fd, interp, tstate); 2493 } 2494 2495 /* Print the current exception (if an exception is set) with its traceback, 2496 or display the current Python stack. 2497 2498 Don't call PyErr_PrintEx() and the except hook, because Py_FatalError() is 2499 called on catastrophic cases. 2500 2501 Return 1 if the traceback was displayed, 0 otherwise. */ 2502 2503 static int _Py_FatalError_PrintExc(PyThreadState * tstate)2504 _Py_FatalError_PrintExc(PyThreadState *tstate) 2505 { 2506 PyObject *ferr, *res; 2507 PyObject *exception, *v, *tb; 2508 int has_tb; 2509 2510 _PyErr_Fetch(tstate, &exception, &v, &tb); 2511 if (exception == NULL) { 2512 /* No current exception */ 2513 return 0; 2514 } 2515 2516 ferr = _PySys_GetAttr(tstate, &_Py_ID(stderr)); 2517 if (ferr == NULL || ferr == Py_None) { 2518 /* sys.stderr is not set yet or set to None, 2519 no need to try to display the exception */ 2520 return 0; 2521 } 2522 2523 _PyErr_NormalizeException(tstate, &exception, &v, &tb); 2524 if (tb == NULL) { 2525 tb = Py_None; 2526 Py_INCREF(tb); 2527 } 2528 PyException_SetTraceback(v, tb); 2529 if (exception == NULL) { 2530 /* PyErr_NormalizeException() failed */ 2531 return 0; 2532 } 2533 2534 has_tb = (tb != Py_None); 2535 PyErr_Display(exception, v, tb); 2536 Py_XDECREF(exception); 2537 Py_XDECREF(v); 2538 Py_XDECREF(tb); 2539 2540 /* sys.stderr may be buffered: call sys.stderr.flush() */ 2541 res = PyObject_CallMethodNoArgs(ferr, &_Py_ID(flush)); 2542 if (res == NULL) { 2543 _PyErr_Clear(tstate); 2544 } 2545 else { 2546 Py_DECREF(res); 2547 } 2548 2549 return has_tb; 2550 } 2551 2552 /* Print fatal error message and abort */ 2553 2554 #ifdef MS_WINDOWS 2555 static void fatal_output_debug(const char * msg)2556 fatal_output_debug(const char *msg) 2557 { 2558 /* buffer of 256 bytes allocated on the stack */ 2559 WCHAR buffer[256 / sizeof(WCHAR)]; 2560 size_t buflen = Py_ARRAY_LENGTH(buffer) - 1; 2561 size_t msglen; 2562 2563 OutputDebugStringW(L"Fatal Python error: "); 2564 2565 msglen = strlen(msg); 2566 while (msglen) { 2567 size_t i; 2568 2569 if (buflen > msglen) { 2570 buflen = msglen; 2571 } 2572 2573 /* Convert the message to wchar_t. This uses a simple one-to-one 2574 conversion, assuming that the this error message actually uses 2575 ASCII only. If this ceases to be true, we will have to convert. */ 2576 for (i=0; i < buflen; ++i) { 2577 buffer[i] = msg[i]; 2578 } 2579 buffer[i] = L'\0'; 2580 OutputDebugStringW(buffer); 2581 2582 msg += buflen; 2583 msglen -= buflen; 2584 } 2585 OutputDebugStringW(L"\n"); 2586 } 2587 #endif 2588 2589 2590 static void fatal_error_dump_runtime(int fd,_PyRuntimeState * runtime)2591 fatal_error_dump_runtime(int fd, _PyRuntimeState *runtime) 2592 { 2593 PUTS(fd, "Python runtime state: "); 2594 PyThreadState *finalizing = _PyRuntimeState_GetFinalizing(runtime); 2595 if (finalizing) { 2596 PUTS(fd, "finalizing (tstate=0x"); 2597 _Py_DumpHexadecimal(fd, (uintptr_t)finalizing, sizeof(finalizing) * 2); 2598 PUTS(fd, ")"); 2599 } 2600 else if (runtime->initialized) { 2601 PUTS(fd, "initialized"); 2602 } 2603 else if (runtime->core_initialized) { 2604 PUTS(fd, "core initialized"); 2605 } 2606 else if (runtime->preinitialized) { 2607 PUTS(fd, "preinitialized"); 2608 } 2609 else if (runtime->preinitializing) { 2610 PUTS(fd, "preinitializing"); 2611 } 2612 else { 2613 PUTS(fd, "unknown"); 2614 } 2615 PUTS(fd, "\n"); 2616 } 2617 2618 2619 static inline void _Py_NO_RETURN fatal_error_exit(int status)2620 fatal_error_exit(int status) 2621 { 2622 if (status < 0) { 2623 #if defined(MS_WINDOWS) && defined(_DEBUG) 2624 DebugBreak(); 2625 #endif 2626 abort(); 2627 } 2628 else { 2629 exit(status); 2630 } 2631 } 2632 2633 2634 // Dump the list of extension modules of sys.modules, excluding stdlib modules 2635 // (sys.stdlib_module_names), into fd file descriptor. 2636 // 2637 // This function is called by a signal handler in faulthandler: avoid memory 2638 // allocations and keep the implementation simple. For example, the list is not 2639 // sorted on purpose. 2640 void _Py_DumpExtensionModules(int fd,PyInterpreterState * interp)2641 _Py_DumpExtensionModules(int fd, PyInterpreterState *interp) 2642 { 2643 if (interp == NULL) { 2644 return; 2645 } 2646 PyObject *modules = interp->modules; 2647 if (modules == NULL || !PyDict_Check(modules)) { 2648 return; 2649 } 2650 2651 Py_ssize_t pos; 2652 PyObject *key, *value; 2653 2654 // Avoid PyDict_GetItemString() which calls PyUnicode_FromString(), 2655 // memory cannot be allocated on the heap in a signal handler. 2656 // Iterate on the dict instead. 2657 PyObject *stdlib_module_names = NULL; 2658 if (interp->sysdict != NULL) { 2659 pos = 0; 2660 while (PyDict_Next(interp->sysdict, &pos, &key, &value)) { 2661 if (PyUnicode_Check(key) 2662 && PyUnicode_CompareWithASCIIString(key, "stdlib_module_names") == 0) { 2663 stdlib_module_names = value; 2664 break; 2665 } 2666 } 2667 } 2668 // If we failed to get sys.stdlib_module_names or it's not a frozenset, 2669 // don't exclude stdlib modules. 2670 if (stdlib_module_names != NULL && !PyFrozenSet_Check(stdlib_module_names)) { 2671 stdlib_module_names = NULL; 2672 } 2673 2674 // List extensions 2675 int header = 1; 2676 Py_ssize_t count = 0; 2677 pos = 0; 2678 while (PyDict_Next(modules, &pos, &key, &value)) { 2679 if (!PyUnicode_Check(key)) { 2680 continue; 2681 } 2682 if (!_PyModule_IsExtension(value)) { 2683 continue; 2684 } 2685 // Use the module name from the sys.modules key, 2686 // don't attempt to get the module object name. 2687 if (stdlib_module_names != NULL) { 2688 int is_stdlib_ext = 0; 2689 2690 Py_ssize_t i = 0; 2691 PyObject *item; 2692 Py_hash_t hash; 2693 while (_PySet_NextEntry(stdlib_module_names, &i, &item, &hash)) { 2694 if (PyUnicode_Check(item) 2695 && PyUnicode_Compare(key, item) == 0) 2696 { 2697 is_stdlib_ext = 1; 2698 break; 2699 } 2700 } 2701 if (is_stdlib_ext) { 2702 // Ignore stdlib extension 2703 continue; 2704 } 2705 } 2706 2707 if (header) { 2708 PUTS(fd, "\nExtension modules: "); 2709 header = 0; 2710 } 2711 else { 2712 PUTS(fd, ", "); 2713 } 2714 2715 _Py_DumpASCII(fd, key); 2716 count++; 2717 } 2718 2719 if (count) { 2720 PUTS(fd, " (total: "); 2721 _Py_DumpDecimal(fd, count); 2722 PUTS(fd, ")"); 2723 PUTS(fd, "\n"); 2724 } 2725 } 2726 2727 2728 static void _Py_NO_RETURN fatal_error(int fd,int header,const char * prefix,const char * msg,int status)2729 fatal_error(int fd, int header, const char *prefix, const char *msg, 2730 int status) 2731 { 2732 static int reentrant = 0; 2733 2734 if (reentrant) { 2735 /* Py_FatalError() caused a second fatal error. 2736 Example: flush_std_files() raises a recursion error. */ 2737 fatal_error_exit(status); 2738 } 2739 reentrant = 1; 2740 2741 if (header) { 2742 PUTS(fd, "Fatal Python error: "); 2743 if (prefix) { 2744 PUTS(fd, prefix); 2745 PUTS(fd, ": "); 2746 } 2747 if (msg) { 2748 PUTS(fd, msg); 2749 } 2750 else { 2751 PUTS(fd, "<message not set>"); 2752 } 2753 PUTS(fd, "\n"); 2754 } 2755 2756 _PyRuntimeState *runtime = &_PyRuntime; 2757 fatal_error_dump_runtime(fd, runtime); 2758 2759 /* Check if the current thread has a Python thread state 2760 and holds the GIL. 2761 2762 tss_tstate is NULL if Py_FatalError() is called from a C thread which 2763 has no Python thread state. 2764 2765 tss_tstate != tstate if the current Python thread does not hold the GIL. 2766 */ 2767 PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime); 2768 PyInterpreterState *interp = NULL; 2769 PyThreadState *tss_tstate = PyGILState_GetThisThreadState(); 2770 if (tstate != NULL) { 2771 interp = tstate->interp; 2772 } 2773 else if (tss_tstate != NULL) { 2774 interp = tss_tstate->interp; 2775 } 2776 int has_tstate_and_gil = (tss_tstate != NULL && tss_tstate == tstate); 2777 2778 if (has_tstate_and_gil) { 2779 /* If an exception is set, print the exception with its traceback */ 2780 if (!_Py_FatalError_PrintExc(tss_tstate)) { 2781 /* No exception is set, or an exception is set without traceback */ 2782 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate); 2783 } 2784 } 2785 else { 2786 _Py_FatalError_DumpTracebacks(fd, interp, tss_tstate); 2787 } 2788 2789 _Py_DumpExtensionModules(fd, interp); 2790 2791 /* The main purpose of faulthandler is to display the traceback. 2792 This function already did its best to display a traceback. 2793 Disable faulthandler to prevent writing a second traceback 2794 on abort(). */ 2795 _PyFaulthandler_Fini(); 2796 2797 /* Check if the current Python thread hold the GIL */ 2798 if (has_tstate_and_gil) { 2799 /* Flush sys.stdout and sys.stderr */ 2800 flush_std_files(); 2801 } 2802 2803 #ifdef MS_WINDOWS 2804 fatal_output_debug(msg); 2805 #endif /* MS_WINDOWS */ 2806 2807 fatal_error_exit(status); 2808 } 2809 2810 2811 #undef Py_FatalError 2812 2813 void _Py_NO_RETURN Py_FatalError(const char * msg)2814 Py_FatalError(const char *msg) 2815 { 2816 fatal_error(fileno(stderr), 1, NULL, msg, -1); 2817 } 2818 2819 2820 void _Py_NO_RETURN _Py_FatalErrorFunc(const char * func,const char * msg)2821 _Py_FatalErrorFunc(const char *func, const char *msg) 2822 { 2823 fatal_error(fileno(stderr), 1, func, msg, -1); 2824 } 2825 2826 2827 void _Py_NO_RETURN _Py_FatalErrorFormat(const char * func,const char * format,...)2828 _Py_FatalErrorFormat(const char *func, const char *format, ...) 2829 { 2830 static int reentrant = 0; 2831 if (reentrant) { 2832 /* _Py_FatalErrorFormat() caused a second fatal error */ 2833 fatal_error_exit(-1); 2834 } 2835 reentrant = 1; 2836 2837 FILE *stream = stderr; 2838 const int fd = fileno(stream); 2839 PUTS(fd, "Fatal Python error: "); 2840 if (func) { 2841 PUTS(fd, func); 2842 PUTS(fd, ": "); 2843 } 2844 2845 va_list vargs; 2846 #ifdef HAVE_STDARG_PROTOTYPES 2847 va_start(vargs, format); 2848 #else 2849 va_start(vargs); 2850 #endif 2851 vfprintf(stream, format, vargs); 2852 va_end(vargs); 2853 2854 fputs("\n", stream); 2855 fflush(stream); 2856 2857 fatal_error(fd, 0, NULL, NULL, -1); 2858 } 2859 2860 2861 void _Py_NO_RETURN _Py_FatalRefcountErrorFunc(const char * func,const char * msg)2862 _Py_FatalRefcountErrorFunc(const char *func, const char *msg) 2863 { 2864 _Py_FatalErrorFormat(func, 2865 "%s: bug likely caused by a refcount error " 2866 "in a C extension", 2867 msg); 2868 } 2869 2870 2871 void _Py_NO_RETURN Py_ExitStatusException(PyStatus status)2872 Py_ExitStatusException(PyStatus status) 2873 { 2874 if (_PyStatus_IS_EXIT(status)) { 2875 exit(status.exitcode); 2876 } 2877 else if (_PyStatus_IS_ERROR(status)) { 2878 fatal_error(fileno(stderr), 1, status.func, status.err_msg, 1); 2879 } 2880 else { 2881 Py_FatalError("Py_ExitStatusException() must not be called on success"); 2882 } 2883 } 2884 2885 2886 /* Wait until threading._shutdown completes, provided 2887 the threading module was imported in the first place. 2888 The shutdown routine will wait until all non-daemon 2889 "threading" threads have completed. */ 2890 static void wait_for_thread_shutdown(PyThreadState * tstate)2891 wait_for_thread_shutdown(PyThreadState *tstate) 2892 { 2893 PyObject *result; 2894 PyObject *threading = PyImport_GetModule(&_Py_ID(threading)); 2895 if (threading == NULL) { 2896 if (_PyErr_Occurred(tstate)) { 2897 PyErr_WriteUnraisable(NULL); 2898 } 2899 /* else: threading not imported */ 2900 return; 2901 } 2902 result = PyObject_CallMethodNoArgs(threading, &_Py_ID(_shutdown)); 2903 if (result == NULL) { 2904 PyErr_WriteUnraisable(threading); 2905 } 2906 else { 2907 Py_DECREF(result); 2908 } 2909 Py_DECREF(threading); 2910 } 2911 2912 #define NEXITFUNCS 32 Py_AtExit(void (* func)(void))2913 int Py_AtExit(void (*func)(void)) 2914 { 2915 if (_PyRuntime.nexitfuncs >= NEXITFUNCS) 2916 return -1; 2917 _PyRuntime.exitfuncs[_PyRuntime.nexitfuncs++] = func; 2918 return 0; 2919 } 2920 2921 static void call_ll_exitfuncs(_PyRuntimeState * runtime)2922 call_ll_exitfuncs(_PyRuntimeState *runtime) 2923 { 2924 while (runtime->nexitfuncs > 0) { 2925 /* pop last function from the list */ 2926 runtime->nexitfuncs--; 2927 void (*exitfunc)(void) = runtime->exitfuncs[runtime->nexitfuncs]; 2928 runtime->exitfuncs[runtime->nexitfuncs] = NULL; 2929 2930 exitfunc(); 2931 } 2932 2933 fflush(stdout); 2934 fflush(stderr); 2935 } 2936 2937 void _Py_NO_RETURN Py_Exit(int sts)2938 Py_Exit(int sts) 2939 { 2940 if (Py_FinalizeEx() < 0) { 2941 sts = 120; 2942 } 2943 2944 exit(sts); 2945 } 2946 2947 2948 /* 2949 * The file descriptor fd is considered ``interactive'' if either 2950 * a) isatty(fd) is TRUE, or 2951 * b) the -i flag was given, and the filename associated with 2952 * the descriptor is NULL or "<stdin>" or "???". 2953 */ 2954 int Py_FdIsInteractive(FILE * fp,const char * filename)2955 Py_FdIsInteractive(FILE *fp, const char *filename) 2956 { 2957 if (isatty((int)fileno(fp))) 2958 return 1; 2959 if (!Py_InteractiveFlag) 2960 return 0; 2961 return (filename == NULL) || 2962 (strcmp(filename, "<stdin>") == 0) || 2963 (strcmp(filename, "???") == 0); 2964 } 2965 2966 2967 int _Py_FdIsInteractive(FILE * fp,PyObject * filename)2968 _Py_FdIsInteractive(FILE *fp, PyObject *filename) 2969 { 2970 if (isatty((int)fileno(fp))) { 2971 return 1; 2972 } 2973 if (!Py_InteractiveFlag) { 2974 return 0; 2975 } 2976 return (filename == NULL) || 2977 (PyUnicode_CompareWithASCIIString(filename, "<stdin>") == 0) || 2978 (PyUnicode_CompareWithASCIIString(filename, "???") == 0); 2979 } 2980 2981 2982 /* Wrappers around sigaction() or signal(). */ 2983 2984 PyOS_sighandler_t PyOS_getsig(int sig)2985 PyOS_getsig(int sig) 2986 { 2987 #ifdef HAVE_SIGACTION 2988 struct sigaction context; 2989 if (sigaction(sig, NULL, &context) == -1) 2990 return SIG_ERR; 2991 return context.sa_handler; 2992 #else 2993 PyOS_sighandler_t handler; 2994 /* Special signal handling for the secure CRT in Visual Studio 2005 */ 2995 #if defined(_MSC_VER) && _MSC_VER >= 1400 2996 switch (sig) { 2997 /* Only these signals are valid */ 2998 case SIGINT: 2999 case SIGILL: 3000 case SIGFPE: 3001 case SIGSEGV: 3002 case SIGTERM: 3003 case SIGBREAK: 3004 case SIGABRT: 3005 break; 3006 /* Don't call signal() with other values or it will assert */ 3007 default: 3008 return SIG_ERR; 3009 } 3010 #endif /* _MSC_VER && _MSC_VER >= 1400 */ 3011 handler = signal(sig, SIG_IGN); 3012 if (handler != SIG_ERR) 3013 signal(sig, handler); 3014 return handler; 3015 #endif 3016 } 3017 3018 /* 3019 * All of the code in this function must only use async-signal-safe functions, 3020 * listed at `man 7 signal` or 3021 * http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html. 3022 */ 3023 PyOS_sighandler_t PyOS_setsig(int sig,PyOS_sighandler_t handler)3024 PyOS_setsig(int sig, PyOS_sighandler_t handler) 3025 { 3026 #ifdef HAVE_SIGACTION 3027 /* Some code in Modules/signalmodule.c depends on sigaction() being 3028 * used here if HAVE_SIGACTION is defined. Fix that if this code 3029 * changes to invalidate that assumption. 3030 */ 3031 struct sigaction context, ocontext; 3032 context.sa_handler = handler; 3033 sigemptyset(&context.sa_mask); 3034 /* Using SA_ONSTACK is friendlier to other C/C++/Golang-VM code that 3035 * extension module or embedding code may use where tiny thread stacks 3036 * are used. https://bugs.python.org/issue43390 */ 3037 context.sa_flags = SA_ONSTACK; 3038 if (sigaction(sig, &context, &ocontext) == -1) 3039 return SIG_ERR; 3040 return ocontext.sa_handler; 3041 #else 3042 PyOS_sighandler_t oldhandler; 3043 oldhandler = signal(sig, handler); 3044 #ifdef HAVE_SIGINTERRUPT 3045 siginterrupt(sig, 1); 3046 #endif 3047 return oldhandler; 3048 #endif 3049 } 3050 3051 #ifdef __cplusplus 3052 } 3053 #endif 3054