En Thu, 20 Aug 2009 07:02:26 -0300, ashwin.u....@nokia.com <ashwin.u....@nokia.com> escribió:

We are currently trying to identify and fix all the memory leaks by just doing Py_Initialize-PyRun_SimpleFile(some simple script)-Py_Finalize and found that there are around 70 malloc-ed blocks which are not freed. One of the significant contributor to this number is the 'files' object in ZipImporter. I am not able to identify the reason for this leak and was wondering if anyone on this list would help me out here.

So, here goes :

Since we have a zip file in our sys.path, this object is initialized and added to the zip_directory_cache dict during Py_Initialize. One point to note here is that there is no DECREF on the 'files' object after adding it to the zip_directory_cache dict.

When a module in a directory is imported(encoding.alias) then the reference count of 'files' is increased. When this module is unloaded during Py_Finalize-PyImport_Cleanup, the ref count of files object is decremented properly. So at the end of Py_Finalize the files object still has one reference count which is a result of it being an entry in the zip_directory_cache.

I didn't read the source, but isn't that the expected behavior? If the module is still referenced by zip_directory_cache, the reference count must be 1 or more.
Maybe zip_directory_cache should be cleared at interpreter shutdown?

--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to