Issue #19972: Add rarely used freefunc. This fixes a leak if sys.exit()
is used in a program.
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index d61c8ab..c52f945 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -7464,6 +7464,12 @@
return 0;
}
+static void
+pickle_free(PyObject *m)
+{
+ _Pickle_ClearState(_Pickle_GetState(m));
+}
+
static int
pickle_traverse(PyObject *m, visitproc visit, void *arg)
{
@@ -7485,14 +7491,14 @@
static struct PyModuleDef _picklemodule = {
PyModuleDef_HEAD_INIT,
- "_pickle", /* m_name */
- pickle_module_doc, /* m_doc */
- sizeof(PickleState), /* m_size */
- pickle_methods, /* m_methods */
- NULL, /* m_reload */
- pickle_traverse, /* m_traverse */
- pickle_clear, /* m_clear */
- NULL /* m_free */
+ "_pickle", /* m_name */
+ pickle_module_doc, /* m_doc */
+ sizeof(PickleState), /* m_size */
+ pickle_methods, /* m_methods */
+ NULL, /* m_reload */
+ pickle_traverse, /* m_traverse */
+ pickle_clear, /* m_clear */
+ (freefunc)pickle_free /* m_free */
};
PyMODINIT_FUNC