]> granicus.if.org Git - python/commitdiff
Prevent spurious leaks when running regrtest.py -R. There may be more
authorNeal Norwitz <nnorwitz@gmail.com>
Sun, 18 Jun 2006 19:35:01 +0000 (19:35 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Sun, 18 Jun 2006 19:35:01 +0000 (19:35 +0000)
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.

Lib/test/test_socket.py
Lib/test/test_support.py
Lib/test/test_threadedtempfile.py
Misc/build.sh

index e0aa58cc1cc84eea53807517c633448f018b1026..e773eab06651550eb4ecba60825055450b2eefc5 100644 (file)
@@ -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()
index 4f89a867ca26566c073ad8fa78a70eb691b88cc5..2a749386a5a509dc998de0d2976903a88f6039f5 100644 (file)
@@ -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)
+
index 459ba3a1e4bd7885242c88a2d1bcadb9f31a9636..974333b486109d3f1487d61cae1c3e5e799a5c4b 100644 (file)
@@ -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
index de5153981ffc92802ec547d890370501f2ba3b2d..c3c2e38bda99539ebdb2d378bfbc1e0993d85011 100755 (executable)
@@ -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.