On Mon, Jul 01, 2002 at 03:43:42PM -0600, Jason Gunthorpe wrote:
> 
> On Mon, 1 Jul 2002, Manuel Estrada Sainz wrote:
> 
> >  I attach a patch to python-apt which fixes the big leak by keeping
> >  track of and deleting the PkgCacheFile objects.
> 
> Yes, this particular leak is why the GetCache method is called
> TmpGetCache.. It wasn't ment to be a completely correct solution..
> 
> Your patch isn't entirely great.. The pkgcache py-wrapper should not be
> changed. It was ment to be as it is. The problem is that TmpGetCache
> doesn't create a PkgCacheFile pyobject to hold the reference to that
> class. It should do that and attach it to via the Owned mechanism to the
> PkgCache object it returns.
 
 Thanks for the guidance, hopefully I got it right this time.

> Ah, yes, the soruce list is leaking. tsk. Attached patch will fix that.

 That fixed it, thanks, when will the patch reach the oficial debian
 packages?

 Thanks

        ranty

-- 
--- Manuel Estrada Sainz <[EMAIL PROTECTED]>
                         <[EMAIL PROTECTED]>
                         <[EMAIL PROTECTED]>
------------------------ <[EMAIL PROTECTED]> -------------------
God grant us the serenity to accept the things we cannot change, courage to
change the things we can, and wisdom to know the difference.
diff -urN python-apt-0.5.4.3/python/cache.cc 
python-apt-0.5.4.3-mine/python/cache.cc
--- python-apt-0.5.4.3/python/cache.cc  Tue Feb 26 02:36:15 2002
+++ python-apt-0.5.4.3-mine/python/cache.cc     Fri Jul  5 04:02:49 2002
@@ -143,6 +143,26 @@
    0,                                   // tp_hash
 };
 
+PyTypeObject PkgCacheFileType =
+{
+   PyObject_HEAD_INIT(&PyType_Type)
+   0,                                  // ob_size
+   "pkgCacheFile",                      // tp_name
+   sizeof(CppOwnedPyObject<pkgCacheFile>),   // tp_basicsize
+   0,                                   // tp_itemsize
+   // Methods
+   CppOwnedDealloc<pkgCacheFile>,       // tp_dealloc
+   0,                                   // tp_print
+   0,                                   // tp_getattr
+   0,                                   // tp_setattr
+   0,                                   // tp_compare
+   0,                                   // tp_repr
+   0,                                   // tp_as_number
+   0,                                   // tp_as_sequence
+   0,                                   // tp_as_mapping
+   0,                                   // tp_hash
+};
+
                                                                        /*}}}*/
 // Package List Class                                                  /*{{{*/
 // ---------------------------------------------------------------------
@@ -727,5 +747,13 @@
    if (Cache->Open(Prog,false) == false)
       return HandleErrors();
    
-   return CppOwnedPyObject_NEW<pkgCache *>(0,&PkgCacheType,(pkgCache 
*)(*Cache));
+   CppOwnedPyObject<pkgCacheFile> *CacheFileObj =
+          CppOwnedPyObject_NEW<pkgCacheFile>(0,&PkgCacheFileType, *Cache);
+   
+   CppOwnedPyObject<pkgCache *> *CacheObj =
+          CppOwnedPyObject_NEW<pkgCache *>(CacheFileObj,&PkgCacheType,
+                                           (pkgCache *)(*Cache));
+
+   Py_DECREF(CacheFileObj);
+   return CacheObj;
 }

Reply via email to