[Cython] Object not released when calling cpdef method from inherited class ?

Guillaume Chereau charlie at openmoko.org
Tue Jul 8 05:37:10 CEST 2008


Hello all,

I am currently using cython for a project related to openmoko cell
phone : http://charlie137-2.blogspot.com/2008/07/introducing-tichy.html

I noticed that the memory is constantly increasing when I use cython. I
tracked down the problem to the case where I create a subclass of a
cython class and then redefine a cpdef method, asking it to call the
parent method, but ONLY if the cpdef method then call an other cpdef
method !

Here is the smallest example I could come with that fails :


== test.pyx ==

cdef class A:
    cpdef func(self):
        return
        
    cpdef test(self):
         self.func()


== main.py ==

import test
import gc

class B(test.A):
    def test(self):
        test.A.test(self)
        
b = B()

for i in range(10):
    b.test()
    gc.collect()
    print len(gc.get_objects())


The output will show that some objects are not released.

Is it a known bug ? Is there a way to avoid it ?

I tried with both Cython 0.9.6 and Cython 0.9.8

cheers,
-Charlie
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://codespeak.net/pipermail/cython-dev/attachments/20080708/0fb6b6e8/attachment.pgp 


More information about the Cython-dev mailing list