Zipimport leaks memory?

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Fri Aug 21 06:31:33 EDT 2009


En Thu, 20 Aug 2009 07:02:26 -0300, ashwin.u.rao at nokia.com  
<ashwin.u.rao at 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




More information about the Python-list mailing list