[Python-Dev] Bizarre new test failure
Martin v. Loewis
09 Jun 2002 22:56:00 +0200
Guido van Rossum <firstname.lastname@example.org> writes:
> When tp_dict is cleared, this can remove the __del__ method before it
> can be called (it is called by the instance's tp_dealloc).
That cannot happen: an object whose type has an __del__ cannot refer
to an object for which tp_clear has been called. Objects with
finalizers go into gc.garbage, so in this case, the type is
resurrected, and not cleared.
> tp_mro participates in a cycle too: it is a tuple whose first element
> is the type itself. Tuples are immutable, so the tp_clear for tuples
> doesn't do anything. So type_clear is our only hope to break this
I see. So tp_mro must be cleared in tp_clear; it's not used from
subtype_dealloc, so it won't cause problems to clear it.