New issue 2149: Memory leak for Python subclass of cpyext object with non-trivial tp_dealloc https://bitbucket.org/pypy/pypy/issues/2149/memory-leak-for-python-subclass-of-cpyext
Jason Madden: As [discussed on IRC](https://botbot.me/freenode/pypy/2015-09-30/?msg=50868264&page=3) and initially reported to [gevent](https://github.com/gevent/gevent/issues/660), if a pure-Python object subclasses a cpyext object that has a non trivial `tp_dealloc` (e.g., it stores additional instance data in its struct), memory can leak. This is because deallocating the pure-Python instance fails to call the `tp_dealloc` of the superclass. This is easy to demonstrate with Cython, though Cython is not necessary. Given a `base.pxd` like so: ```python cdef class Base: cdef public object thing ``` and a corresponding `base.py` like so: ```python class Base(object): def __init__(self): self.thing = [] ``` compile the cython code and then create a subclass in python: ```python from base import Base class Sub(Base): pass ``` A tool like objgraph will show that allocating instances of `Sub` leaks a new list each time. _______________________________________________ pypy-issue mailing list [email protected] https://mail.python.org/mailman/listinfo/pypy-issue
