[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