From f75dbef208673865b31d32d5a2196b15b1b03024 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Fri, 8 Feb 2008 00:11:31 +0000 Subject: Deallocate content of the dict free list on interpreter shutdown --- Include/pythonrun.h | 1 + Misc/NEWS | 3 +++ Objects/dictobject.c | 12 ++++++++++++ Python/pythonrun.c | 1 + 4 files changed, 17 insertions(+) diff --git a/Include/pythonrun.h b/Include/pythonrun.h index cfc40e3..0164088 100644 --- a/Include/pythonrun.h +++ b/Include/pythonrun.h @@ -130,6 +130,7 @@ PyAPI_FUNC(void) _PyImport_Fini(void); PyAPI_FUNC(void) PyMethod_Fini(void); PyAPI_FUNC(void) PyFrame_Fini(void); PyAPI_FUNC(void) PyCFunction_Fini(void); +PyAPI_FUNC(void) PyDict_Fini(void); PyAPI_FUNC(void) PyTuple_Fini(void); PyAPI_FUNC(void) PyList_Fini(void); PyAPI_FUNC(void) PySet_Fini(void); diff --git a/Misc/NEWS b/Misc/NEWS index d15531d..af9f364 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 1? Core and builtins ----------------- +- Fixed a minor memory leak in dictobject.c. The content of the free + list was not freed on interpreter shutdown. + - Limit free list of method and builtin function objects to 256 entries each. diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 82d247f..9e2b944 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -205,6 +205,18 @@ show_alloc(void) static PyDictObject *free_list[PyDict_MAXFREELIST]; static int numfree = 0; +void +PyDict_Fini(void) +{ + PyListObject *op; + + while (numfree) { + op = free_list[numfree--]; + assert(PyDict_CheckExact(op)); + PyObject_GC_Del(op); + } +} + PyObject * PyDict_New(void) { diff --git a/Python/pythonrun.c b/Python/pythonrun.c index f5465c5..ec31af1 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -473,6 +473,7 @@ Py_Finalize(void) PyString_Fini(); PyInt_Fini(); PyFloat_Fini(); + PyDict_Fini(); #ifdef Py_USING_UNICODE /* Cleanup Unicode implementation */ -- cgit v0.12