mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
bpo-32030: Enhance Py_Main() (#4412)
Parse more env vars in Py_Main(): * Add more options to _PyCoreConfig: * faulthandler * tracemalloc * importtime * Move code to parse environment variables from _Py_InitializeCore() to Py_Main(). This change fixes a regression from Python 3.6: PYTHONUNBUFFERED is now read before calling pymain_init_stdio(). * _PyFaulthandler_Init() and _PyTraceMalloc_Init() now take an argument to decide if the module has to be enabled at startup. * tracemalloc_start() is now responsible to check the maximum number of frames. Other changes: * Cleanup Py_Main(): * Rename some pymain_xxx() subfunctions * Add pymain_run_python() subfunction * Cleanup Py_NewInterpreter() * _PyInterpreterState_Enable() now reports failure * init_hash_secret() now considers pyurandom() failure as an "user error": don't fail with abort(). * pymain_optlist_append() and pymain_strdup() now sets err on memory allocation failure.
This commit is contained in:
parent
f7e5b56c37
commit
a7368ac636
12 changed files with 495 additions and 411 deletions
|
@ -1299,36 +1299,8 @@ faulthandler_init_enable(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Call faulthandler.enable() if the PYTHONFAULTHANDLER environment variable
|
||||
is defined, or if sys._xoptions has a 'faulthandler' key. */
|
||||
|
||||
static int
|
||||
faulthandler_init_parse(void)
|
||||
{
|
||||
char *p = Py_GETENV("PYTHONFAULTHANDLER");
|
||||
if (p && *p != '\0') {
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* PYTHONFAULTHANDLER environment variable is missing
|
||||
or an empty string */
|
||||
PyObject *xoptions = PySys_GetXOptions();
|
||||
if (xoptions == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
PyObject *key = PyUnicode_FromString("faulthandler");
|
||||
if (key == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int has_key = PyDict_Contains(xoptions, key);
|
||||
Py_DECREF(key);
|
||||
return has_key;
|
||||
}
|
||||
|
||||
_PyInitError
|
||||
_PyFaulthandler_Init(void)
|
||||
_PyFaulthandler_Init(int enable)
|
||||
{
|
||||
#ifdef HAVE_SIGALTSTACK
|
||||
int err;
|
||||
|
@ -1357,11 +1329,6 @@ _PyFaulthandler_Init(void)
|
|||
PyThread_acquire_lock(thread.cancel_event, 1);
|
||||
#endif
|
||||
|
||||
int enable = faulthandler_init_parse();
|
||||
if (enable < 0) {
|
||||
return _Py_INIT_ERR("failed to parse faulthandler env var and cmdline");
|
||||
}
|
||||
|
||||
if (enable) {
|
||||
if (faulthandler_init_enable() < 0) {
|
||||
return _Py_INIT_ERR("failed to enable faulthandler");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue