Guido van Rossum
Sat, 10 Aug 2002 12:17:17 -0400
> > It passes regrtest but causes test_gc to leak 20 objects. 13 from
> > test_finalizer_newclass and 7 from test_del_newclass. These leaks
> > go away if test_saveall is skipped. I've tried earlier versions of
> > this patch (which were ok at the time) and they now create this
> > leak too.
> > Some change since the last time I worked on interning must have
> > caused this. Either this change reveals a bug in my patch or my patch
> > reveals a subtle bug in the GC.
> > I don't know why it interacts with GC logic because strings are
> > non-gc objects. I've tried to untrack the interned dictionary because
> > it plays dirty tricks with refcounts but it doesn't change the
> > symptom.
> I've seen this too! But only when I run the full test suite, not when
> I run test_gc in isolation. I made a number of small changes to the GC
> code, I'll have to roll them back one at a time to see which one
> caused this -- and then look for a solution. :-(
Duh. This warning is only printed when regrtest.py is given the -l
option. Oren's first paragraph quoted above is exactly right.
But none of the changes to C files made in the last month made any
difference... The difference is test_gc.py itself! With a checkout
from a month ago, if I change the classes in test_finalizer() and
test_del() to be new-style classes, I get the same warnings.
Maybe Tim understands the problem now? (Summary: why do I get the
$ ./python ../Lib/test/regrtest.py -l test_gc
Warning: test created 20 uncollectable object(s).
1 test OK.
--Guido van Rossum (home page: http://www.python.org/~guido/)