[Python-Dev] [Python-checkins] Python Regression Test Failures refleak (1) (original) (raw)

Tim Peters tim.peters at gmail.com
Wed Jun 7 03:02:55 CEST 2006


[Tim, gets different results across whole runs of python_d ../Lib/test/regrtest.py -R 2:40: test_filecmp test_exceptions ]

I think I found the cause for test_filecmp giving different results across runs, at least on Windows. It appears to be due to this test line:

    self.failUnless(d.same_files == ['file'])

and you still think I'm nuts ;-) The skinny is that

    d = filecmp.dircmp(self.dir, self.dir_same)

and filecmp contains a module-level _cache with a funky scheme for avoiding file comparisons if various os.stat() values haven't changed. But st_mtime on Windows doesn't necessarily change when a file is modified -- it has limited resolution (2 seconds on FAT32, and I'm having a hard time finding a believable answer for NTFS (which I'm using)).

In any case, filecmp._cache usually doesn't change during a run, but sometimes it sprouts a new entry, like

{('c:\docume1\owner\locals1\temp\dir\file', 'c:\docume1\owner\locals1\temp\dir-same\file'): ((32768, 27L, 1149640843.78125), (32768, 27L, 1149640843.796875), True) }

and then that shows up as a small "leak".

That's easily repaired, and after doing so I haven't seen test_filecmp report a leak again.

test_exceptions is a different story. My first 12 post-fix runs of:

python_d ..\Lib\test\regrtest.py -R2:40: test_filecmp test_exceptions

gave leak-free:

test_filecmp
beginning 42 repetitions
123456789012345678901234567890123456789012
..........................................
test_exceptions
beginning 42 repetitions
123456789012345678901234567890123456789012
..........................................
All 2 tests OK.
[25878 refs]

output, but the 13th was unlucky:

test_filecmp
beginning 42 repetitions
123456789012345678901234567890123456789012
..........................................
test_exceptions
beginning 42 repetitions
123456789012345678901234567890123456789012
..........................................
test_exceptions leaked [0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
   0, 0, 0, 0, 0] references
All 2 tests OK.
[25883 refs]

Running test_filecmp too isn't necessary for me to see this -- test_exceptions can be run by itself, although it typically takes me about 15 runs before "a leak" is reported. When a leak is reported, it's always 203, and there's only one of those in the leak vector, but I've seen it at index positions 0, 1, 2, and 3 (i.e., it moves around; it was at index 1 in the output above).

Anyone bored enough to report what happens on Linux? Anyone remember adding a goofy cache to exception internals?

a-suitable-msg-for-6/6/6-ly y'rs - tim



More information about the Python-Dev mailing list