summaryrefslogtreecommitdiffstats
path: root/Include/internal
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
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')
-rw-r--r--Include/internal/pycore_interp.h2
-rw-r--r--Include/internal/pycore_pylifecycle.h2
2 files changed, 3 insertions, 1 deletions
diff --git a/Include/internal/pycore_interp.h b/Include/internal/pycore_interp.h
index 2515234..12416c2 100644
--- a/Include/internal/pycore_interp.h
+++ b/Include/internal/pycore_interp.h
@@ -233,8 +233,8 @@ struct _is {
PyObject *after_forkers_parent;
PyObject *after_forkers_child;
#endif
+
/* AtExit module */
- void (*atexit_func)(PyObject *);
PyObject *atexit_module;
uint64_t tstate_next_unique_id;
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