]> granicus.if.org Git - python/commitdiff
Issue #19972: Add rarely used freefunc. This fixes a leak if sys.exit()
authorStefan Krah <skrah@bytereef.org>
Sat, 14 Dec 2013 12:43:10 +0000 (13:43 +0100)
committerStefan Krah <skrah@bytereef.org>
Sat, 14 Dec 2013 12:43:10 +0000 (13:43 +0100)
is used in a program.

Modules/_pickle.c

index d61c8abb2ff0d6e3c07d329a1f0ec7ad2a381643..c52f9451bcb51c04e3bc5e15b4e25b152b2d65c9 100644 (file)
@@ -7464,6 +7464,12 @@ pickle_clear(PyObject *m)
     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 @@ pickle_traverse(PyObject *m, visitproc visit, void *arg)
 
 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