Prevent spurious leaks when running regrtest.py -R. There may be more
issues that crop up from time to time, but this change seems to have been pretty stable (no spurious warnings) for about a week. Other modules which use threads may require similar use of threading_setup/threading_cleanup from test_support.
This commit is contained in:
parent
f5da071ec8
commit
9602cc2aa4
|
@ -906,7 +906,10 @@ def test_main():
|
|||
tests.append(BasicSocketPairTest)
|
||||
if sys.platform == 'linux2':
|
||||
tests.append(TestLinuxAbstractNamespace)
|
||||
|
||||
thread_info = test_support.threading_setup()
|
||||
test_support.run_unittest(*tests)
|
||||
test_support.threading_cleanup(*thread_info)
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_main()
|
||||
|
|
|
@ -453,3 +453,26 @@ def run_doctest(module, verbosity=None):
|
|||
if verbose:
|
||||
print 'doctest (%s) ... %d tests with zero failures' % (module.__name__, t)
|
||||
return f, t
|
||||
|
||||
#=======================================================================
|
||||
# Threading support to prevent reporting refleaks when running regrtest.py -R
|
||||
|
||||
def threading_setup():
|
||||
import threading
|
||||
return len(threading._active), len(threading._limbo)
|
||||
|
||||
def threading_cleanup(num_active, num_limbo):
|
||||
import threading
|
||||
import time
|
||||
|
||||
_MAX_COUNT = 10
|
||||
count = 0
|
||||
while len(threading._active) != num_active and count < _MAX_COUNT:
|
||||
count += 1
|
||||
time.sleep(0.1)
|
||||
|
||||
count = 0
|
||||
while len(threading._limbo) != num_limbo and count < _MAX_COUNT:
|
||||
count += 1
|
||||
time.sleep(0.1)
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ FILES_PER_THREAD = 50 # change w/ -f option
|
|||
|
||||
import thread # If this fails, we can't test this module
|
||||
import threading
|
||||
from test.test_support import TestFailed
|
||||
from test.test_support import TestFailed, threading_setup, threading_cleanup
|
||||
import StringIO
|
||||
from traceback import print_exc
|
||||
import tempfile
|
||||
|
@ -48,6 +48,7 @@ class TempFileGreedy(threading.Thread):
|
|||
|
||||
def test_main():
|
||||
threads = []
|
||||
thread_info = threading_setup()
|
||||
|
||||
print "Creating"
|
||||
for i in range(NUM_THREADS):
|
||||
|
@ -72,6 +73,7 @@ def test_main():
|
|||
if errors:
|
||||
raise TestFailed(msg)
|
||||
|
||||
threading_cleanup(*thread_info)
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys, getopt
|
||||
|
|
|
@ -60,7 +60,7 @@ REFLOG="build/reflog.txt.out"
|
|||
# Note: test_XXX (none currently) really leak, but are disabled
|
||||
# so we don't send spam. Any test which really leaks should only
|
||||
# be listed here if there are also test cases under Lib/test/leakers.
|
||||
LEAKY_TESTS="test_(ctypes|filecmp|socket|threadedtempfile|threading|urllib2)"
|
||||
LEAKY_TESTS="test_(XXX)" # Currently no tests should report spurious leaks.
|
||||
|
||||
# Skip these tests altogether when looking for leaks. These tests
|
||||
# do not need to be stored above in LEAKY_TESTS too.
|
||||
|
|
Loading…
Reference in New Issue