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.
This commit is contained in:
parent
3459251d5a
commit
2484aaea15
@ -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__":
|
||||
|
Loading…
x
Reference in New Issue
Block a user