[Python-Dev] Weak references: dereference notification

Gustavo J. A. M. Carneiro gjc at inescporto.pt
Thu Nov 10 13:12:58 CET 2005


Qui, 2005-11-10 às 13:57 +1300, Greg Ewing escreveu:
> Gustavo J. A. M. Carneiro wrote:
> 
> >   OK, but what if it is a subclass of a builtin type, with instance
> > variables?  What if the PyObject is GC'ed but the ObjC object remains
> > alive, and later you get a new reference to it?  Do you create a new
> > PyObject wrapper for it?  What happened to the instance variables?
> 
> Your proposed scheme appears to involve destroying and
> then re-initialising the Python wrapper. Isn't that
> going to wipe out any instance variables it may
> have had?

  The object isn't really destroyed.  Simply ob_refcnt drops to zero,
then tp_dealloc is called, which is supposed to destroy it.  But since I
wrote tp_dealloc, I choose not to destroy it, and revive it by calling
PyObject_Init(), which makes ob_refcnt == 1 again, among other things.

> 
> Also, it seems to me that as soon as the refcount on
> the wrapper drops to zero, any weak references to it
> will be broken. Or does your resurrection code
> intervene before that happens?

  Yes, I intervene before that happens.

  Regards.

-- 
Gustavo J. A. M. Carneiro
<gjc at inescporto.pt> <gustavo at users.sourceforge.net>
The universe is always one step beyond logic.



More information about the Python-Dev mailing list