bpo-36142: Rework error reporting in pymain_main() (GH-12113)

Add a new _Py_INIT_EXIT() macro to be able to exit Python with an
exitcode using _PyInitError API. Rewrite function calls by
pymain_main() to use _PyInitError.

Changes:

* Remove _PyMain.err and _PyMain.status field
* Add _Py_INIT_EXIT() macro and _PyInitError.exitcode field.
* Rename _Py_FatalInitError() to _Py_ExitInitError().
This commit is contained in:
Victor Stinner 2019-03-01 12:14:41 +01:00 committed by GitHub
parent b9f0354efc
commit dfe884759d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 191 additions and 229 deletions

View file

@ -86,7 +86,7 @@ Py_FrozenMain(int argc, char **argv)
/* No need to call _PyCoreConfig_Clear() since we didn't allocate any
memory: program_name is a constant string. */
if (_Py_INIT_FAILED(err)) {
_Py_FatalInitError(err);
_Py_ExitInitError(err);
}
#ifdef MS_WINDOWS

View file

@ -408,7 +408,7 @@ pathconfig_global_init(void)
error:
_PyCoreConfig_Clear(&config);
_Py_FatalInitError(err);
_Py_ExitInitError(err);
}

View file

@ -960,7 +960,7 @@ Py_InitializeEx(int install_sigs)
_PyCoreConfig_Clear(&config);
if (_Py_INIT_FAILED(err)) {
_Py_FatalInitError(err);
_Py_ExitInitError(err);
}
}
@ -1432,7 +1432,7 @@ Py_NewInterpreter(void)
PyThreadState *tstate;
_PyInitError err = new_interpreter(&tstate);
if (_Py_INIT_FAILED(err)) {
_Py_FatalInitError(err);
_Py_ExitInitError(err);
}
return tstate;
@ -2073,12 +2073,17 @@ Py_FatalError(const char *msg)
}
void _Py_NO_RETURN
_Py_FatalInitError(_PyInitError err)
_Py_ExitInitError(_PyInitError err)
{
/* On "user" error: exit with status 1.
For all other errors, call abort(). */
int status = err.user_err ? 1 : -1;
fatal_error(err.prefix, err.msg, status);
if (err.exitcode >= 0) {
exit(err.exitcode);
}
else {
/* On "user" error: exit with status 1.
For all other errors, call abort(). */
int status = err.user_err ? 1 : -1;
fatal_error(err.prefix, err.msg, status);
}
}
/* Clean up and exit */