From: Tim Peters Date: Thu, 11 Jul 2002 06:56:07 +0000 (+0000) Subject: Added a test that provokes the hypothesized (in my last checkin comment) X-Git-Tag: v2.3c1~5048 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2484aaea15a8fd0bbd5397c58699b2fa773a6aa2;p=python Added a test that provokes the hypothesized (in my last checkin comment) debug-build failure when an instance of a new-style class is resurrected by a __del__ method -- we simply never had any code that tried this. This is already fixed in 2.3 CVS. In 2.2.1, it blows up via Fatal Python error: GC object already in linked list I'll fix it in 2.2.1 CVS next. --- diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index ea67c4eb77..4069403102 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -3183,6 +3183,25 @@ def slices(): a.__setitem__(slice(0, 2, 1), [2,3]) vereq(a, [2,3,1]) +def subtype_resurrection(): + if verbose: + print "Testing resurrection of new-style instance." + + class C(object): + container = [] + + def __del__(self): + # resurrect the instance + C.container.append(self) + + c = C() + c.attr = 42 + # The only interesting thing here is whether this blows up in a + # debug build, due to flawed GC tracking logic in typeobject.c's + # call_finalizer() (a 2.2.1 bug). + del c + del C.container[-1] # resurrect it again for the heck of it + vereq(C.container[-1].attr, 42) def do_this_first(): if verbose: @@ -3274,6 +3293,7 @@ def test_main(): string_exceptions() copy_setstate() slices() + subtype_resurrection() if verbose: print "All OK" if __name__ == "__main__":