mirror of
https://github.com/python/cpython.git
synced 2025-12-15 21:44:50 +00:00
bpo-42639: Move atexit state to PyInterpreterState (GH-23763)
* Add _PyAtExit_Call() function and remove pyexitfunc and pyexitmodule members of PyInterpreterState. The function logs atexit callback errors using _PyErr_WriteUnraisableMsg(). * Add _PyAtExit_Init() and _PyAtExit_Fini() functions. * Remove traverse, clear and free functions of the atexit module. Co-authored-by: Dong-hee Na <donghee.na@python.org>
This commit is contained in:
parent
8473cf89bd
commit
b8fa135908
7 changed files with 101 additions and 113 deletions
|
|
@ -159,6 +159,20 @@ struct _Py_exc_state {
|
|||
};
|
||||
|
||||
|
||||
// atexit state
|
||||
typedef struct {
|
||||
PyObject *func;
|
||||
PyObject *args;
|
||||
PyObject *kwargs;
|
||||
} atexit_callback;
|
||||
|
||||
struct atexit_state {
|
||||
atexit_callback **callbacks;
|
||||
int ncallbacks;
|
||||
int callback_len;
|
||||
};
|
||||
|
||||
|
||||
/* interpreter state */
|
||||
|
||||
#define _PY_NSMALLPOSINTS 257
|
||||
|
|
@ -234,12 +248,10 @@ struct _is {
|
|||
PyObject *after_forkers_child;
|
||||
#endif
|
||||
|
||||
/* AtExit module */
|
||||
PyObject *atexit_module;
|
||||
|
||||
uint64_t tstate_next_unique_id;
|
||||
|
||||
struct _warnings_runtime_state warnings;
|
||||
struct atexit_state atexit;
|
||||
|
||||
PyObject *audit_hooks;
|
||||
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ extern PyStatus _PyTypes_Init(void);
|
|||
extern PyStatus _PyTypes_InitSlotDefs(void);
|
||||
extern PyStatus _PyImportZip_Init(PyThreadState *tstate);
|
||||
extern PyStatus _PyGC_Init(PyThreadState *tstate);
|
||||
extern PyStatus _PyAtExit_Init(PyThreadState *tstate);
|
||||
|
||||
|
||||
/* Various internal finalizers */
|
||||
|
|
@ -85,6 +86,7 @@ extern void _PyHash_Fini(void);
|
|||
extern void _PyTraceMalloc_Fini(void);
|
||||
extern void _PyWarnings_Fini(PyInterpreterState *interp);
|
||||
extern void _PyAST_Fini(PyInterpreterState *interp);
|
||||
extern void _PyAtExit_Fini(PyInterpreterState *interp);
|
||||
|
||||
extern PyStatus _PyGILState_Init(PyThreadState *tstate);
|
||||
extern void _PyGILState_Fini(PyThreadState *tstate);
|
||||
|
|
@ -109,7 +111,7 @@ PyAPI_FUNC(void) _PyErr_Display(PyObject *file, PyObject *exception,
|
|||
|
||||
PyAPI_FUNC(void) _PyThreadState_DeleteCurrent(PyThreadState *tstate);
|
||||
|
||||
extern void _PyAtExit_Call(PyObject *module);
|
||||
extern void _PyAtExit_Call(PyThreadState *tstate);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue