summaryrefslogtreecommitdiffstats
path: root/Include/internal/pycore_pylifecycle.h
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2020-12-14 22:07:54 (GMT)
committerGitHub <noreply@github.com>2020-12-14 22:07:54 (GMT)
commit357704c9f2375f29ed5b3a93adac086fa714538d (patch)
tree8b69403f419da52a6728c8557e1169aaf23c9e2e /Include/internal/pycore_pylifecycle.h
parent83d52044ae4def1e8611a4b1b9263b850ca5c458 (diff)
downloadcpython-357704c9f2375f29ed5b3a93adac086fa714538d.zip
cpython-357704c9f2375f29ed5b3a93adac086fa714538d.tar.gz
cpython-357704c9f2375f29ed5b3a93adac086fa714538d.tar.bz2
bpo-42639: atexit now logs callbacks exceptions (GH-23771)
At Python exit, if a callback registered with atexit.register() fails, its exception is now logged. Previously, only some exceptions were logged, and the last exception was always silently ignored. Add _PyAtExit_Call() function and remove PyInterpreterState.atexit_func member. call_py_exitfuncs() now calls directly _PyAtExit_Call(). The atexit module must now always be built as a built-in module.
Diffstat (limited to 'Include/internal/pycore_pylifecycle.h')
-rw-r--r--Include/internal/pycore_pylifecycle.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/Include/internal/pycore_pylifecycle.h b/Include/internal/pycore_pylifecycle.h
index b691e63..e6e4187 100644
--- a/Include/internal/pycore_pylifecycle.h
+++ b/Include/internal/pycore_pylifecycle.h
@@ -109,6 +109,8 @@ PyAPI_FUNC(void) _PyErr_Display(PyObject *file, PyObject *exception,
PyAPI_FUNC(void) _PyThreadState_DeleteCurrent(PyThreadState *tstate);
+extern void _PyAtExit_Call(PyObject *module);
+
#ifdef __cplusplus
}
#endif