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

Reply via email to