[Stackless] Re: [Python-Dev] _Py_RefTotal wrong in Py 2.2.3

Tim Peters tim at zope.com
Mon Nov 17 18:12:16 CET 2003


[Michael Hudson]
> ...
> One way of getting _Py_RefTotal out of sync is resurrecting objects in
> __del__ methods.

Oops!  That's right:

"""
from sys import gettotalrefcount as g

class C:
    def __del__(self):
        alist.append(self)

alist = []
c1, c2, c3 = C(), C(), C()
del c1, c2, c3

while 1:
    print g(), len(alist),
    del alist[:]
"""

g() goes up by 3 each time around the loop.

		/* If Py_REF_DEBUG, the original decref dropped _Py_RefTotal,
		 * but _Py_NewReference bumped it again, so that's a wash.

Heh.  If you ignore the new reference(s) that resurrected the thing, I
suppose that would be true.  It should (2.3.2) do

	_Py_DEC_REFTOTAL;

to make up for the extra increment done by _Py_NewReference; likewise in
slot_tp_del (BTW, the macro expands to nothing if Py_REF_DEBUG isn't
defined).

_______________________________________________
Stackless mailing list
Stackless at www.tismer.com
http://www.tismer.com/mailman/listinfo/stackless




More information about the Stackless mailing list