]> granicus.if.org Git - python/commitdiff
support.threading_cleanup() log a warning on fail (#1195)
authorVictor Stinner <victor.stinner@gmail.com>
Thu, 20 Apr 2017 11:40:08 +0000 (13:40 +0200)
committerGitHub <noreply@github.com>
Thu, 20 Apr 2017 11:40:08 +0000 (13:40 +0200)
The @reap_threads decorator and the threading_cleanup() function of
test.support now log a warning if they fail to clenaup threads.

Fix also the usage of support.threading_cleanup() in
test_urllib2_localnet.

The log may help to debug such other warning seen on the AMD64
FreeBSD CURRENT Non-Debug 3.x buildbot:

Warning -- threading._dangling was modified by test_logging

Lib/test/support/__init__.py
Lib/test/test_urllib2_localnet.py

index 21d8f2ce20525ff1e447e7edb4afe1157afb4ef6..d3beef22aefec50c897768735fcd7c099cc539c5 100644 (file)
@@ -2019,13 +2019,20 @@ def threading_cleanup(*original_values):
     if not _thread:
         return
     _MAX_COUNT = 100
+    t0 = time.monotonic()
     for count in range(_MAX_COUNT):
         values = _thread._count(), threading._dangling
         if values == original_values:
             break
         time.sleep(0.01)
         gc_collect()
-    # XXX print a warning in case of failure?
+    else:
+        dt = time.monotonic() - t0
+        print("Warning -- threading_cleanup() failed to cleanup %s threads "
+              "after %.0f sec (count: %s, dangling: %s)"
+              % (values[0] - original_values[0], dt,
+                 values[0], len(values[1])),
+              file=sys.stderr)
 
 def reap_threads(func):
     """Use this function when threads are being used.  This will
index 70c4c013e9cc717ffea4e0c243783236e20d87bf..716b6aad25efc2d8d3fdc27637e1ac4c590d7801 100644 (file)
@@ -664,7 +664,7 @@ def setUpModule():
 
 def tearDownModule():
     if threads_key:
-        support.threading_cleanup(threads_key)
+        support.threading_cleanup(*threads_key)
 
 if __name__ == "__main__":
     unittest.main()