[Python-Dev] Bizarre new test failure

Tim Peters tim.one@comcast.net
Fri, 07 Jun 2002 12:03:49 -0400


[Guido]
> That same testcase prints the same output for me on Linux, with Python
> 2.2, with a 2.3 from June 4th, and with 2.3 from current CVS:
>
>     collected 3
>     collected 51
>     collected 9
>     collected 0
>
>     and, at the end, collected 1
>
> So there really are test cases that require more than one collection
> to clean them up.

Same here.  I wish we understood why.  Or that at least one of Neil and I
understood why.

> ...
> But I can now reproduce on Linux what Neil did using the new -t option
> that I just added to regrtest.py:
>
>     ./python ../Lib/test/regrtest.py -t0 test_descr test_gc
>
> which tells me
>
>     test test_gc failed -- test_list: actual 10, expected 1
>
> When I put an extra gc.collect() call in test_gc.test_list(), the test
> succeeds.
>
> Is this the right fix?

No, but assuming there isn't a real bug here, repeating gc.collect() until
it returns 0 would be -- as the self-contained program showed, we *may* need
to call gc.collect() as many as 4 times before that happens.  And if it's
legit that it may need 4, I see no reason for believing there's any a priori
upper bound on how many may be needed.  And the test could have failed all
along, even in 2.2; it apparently depends on how many times gc just happens
to run before we get to test_gc.

I'll check in a "drain it" fix to test_gc, but I'm still squirming.

> I can't see anything particilarly wrong with subtype_clear() or the
> slot-traversing subtype_traverse() in typeobject.c.

I couldn't either, but in my case I had scant idea what it thought it was
trying to do <0.9 wink>.