Yep, an INCREF is always generated on assignment to an object variable, the fact that there's a cast here is irrelevant.
- Robert On Aug 5, 2009, at 7:13 AM, Lisandro Dalcin wrote: > Yes, in that case Cython manages the reference count the right way. > You do NOT NEED to INCREF/DECREF. In fact, your code is introducing a > reference leak. > > On Wed, Aug 5, 2009 at 7:46 AM, Dag Sverre > Seljebotn<[email protected]> wrote: >> I'm not sure of this, but I know how I'd find out: Compile the pyx >> with the -a switch, open the generated html, and click on the line >> in question. >> >> Dag Sverre Seljebotn >> -----Original Message----- >> From: Daniele Pianu <[email protected]> >> Date: Wednesday, Aug 5, 2009 11:26 am >> Subject: [Cython] Reference count on object assignment >> To: [email protected]: [email protected] >> >> Hi all, >>> I've a simple question about the reference count automatically >>> performed by Cython/Pyrex. I've a cdef function in an ipotetic >>> extension type: >>> >>> ...... >>> >>> cdef TakeObject( self, void* obj ): >>> self.obj = <object>obj >>> Py_INCREF( self.obj ) >>> >>> ....... >>> >>> The function receives a void pointer that I know it's always a >>> pointer to a Python object. The extension type must mantain a >>> reference to >>> this object in its obj attribute, so, I perform >>> the assignment "self.obj = <object>obj". The reference should be >>> valid after the object pointed by the obj method argument is >>> deref-counted. For this reason, I increment manually the >>> reference count of the same object (now pointed by the obj >>> instance attribute too). The question >>> is: in an assignment where a <object> cast is performed, is the >>> reference count automatically handled? Or do I need to manually >>> increment-decrement the reference count as in the example above? >>> And, if self.obj previously pointed to another object whose >>> reference >>> counted was incremented, do I have to decrement the reference >>> count to avoid a possible memory leak? I've checked a bit the >>> code and it seems the, first than the assignment is done, the >>> self.obj ref count is >>> decremented, but I've not understood if it's incremented too >>> after the new assignment. >>> >>> Thanks for any advice, >>> Daniele >>> _______________________________________________ >>> Cython-dev mailing list >>> [email protected] >>> http://codespeak.net/mailman/listinfo/cython-dev >>> >> >> _______________________________________________ >> Cython-dev mailing list >> [email protected] >> http://codespeak.net/mailman/listinfo/cython-dev >> > > > > -- > Lisandro Dalcín > --------------- > Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC) > Instituto de Desarrollo Tecnológico para la Industria Química (INTEC) > Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET) > PTLC - Güemes 3450, (3000) Santa Fe, Argentina > Tel/Fax: +54-(0)342-451.1594 > _______________________________________________ > Cython-dev mailing list > [email protected] > http://codespeak.net/mailman/listinfo/cython-dev _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
