diff options
author | Victor Stinner <vstinner@redhat.com> | 2019-05-28 16:01:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-28 16:01:17 +0200 |
commit | a85a1d337d26a65036e427341d15e3979f7e9ced (patch) | |
tree | b355ad22fb8ca020f6572c48519e2fdf641db47a /Python/pythonrun.c | |
parent | 51ddab8dae056867f3595ab3400bffc93f67c8d4 (diff) | |
download | cpython-git-a85a1d337d26a65036e427341d15e3979f7e9ced.tar.gz |
bpo-36829: sys.excepthook and sys.unraisablehook flush (GH-13620)
sys.excepthook() and sys.unraisablehook() now explicitly flush the
file (usually sys.stderr).
If file.flush() fails, sys.excepthook() silently ignores the error,
whereas sys.unraisablehook() logs the new exception.
Diffstat (limited to 'Python/pythonrun.c')
-rw-r--r-- | Python/pythonrun.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c index ba1d1cf02f..ace9f2f987 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -978,6 +978,16 @@ _PyErr_Display(PyObject *file, PyObject *exception, PyObject *value, PyObject *t } print_exception_recursive(file, value, seen); Py_XDECREF(seen); + + /* Call file.flush() */ + PyObject *res = _PyObject_CallMethodId(file, &PyId_flush, NULL); + if (!res) { + /* Silently ignore file.flush() error */ + PyErr_Clear(); + } + else { + Py_DECREF(res); + } } void |