summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2011-07-15 20:29:44 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2011-07-15 20:29:44 (GMT)
commit707f228b1eb8d2829797524e0aa93922a238ff66 (patch)
tree5625a5797998b324fdd927613d7abdc470b59685
parentc081c0c6a0c917de72b7d7944c5316174717d56d (diff)
downloadcpython-707f228b1eb8d2829797524e0aa93922a238ff66.zip
cpython-707f228b1eb8d2829797524e0aa93922a238ff66.tar.gz
cpython-707f228b1eb8d2829797524e0aa93922a238ff66.tar.bz2
Try harder to reap dangling threads in test.support.reap_threads().
-rw-r--r--Lib/test/support.py19
-rw-r--r--Misc/NEWS2
2 files changed, 15 insertions, 6 deletions
diff --git a/Lib/test/support.py b/Lib/test/support.py
index e2d7ae0..2827e8b 100644
--- a/Lib/test/support.py
+++ b/Lib/test/support.py
@@ -24,9 +24,15 @@ import sysconfig
import logging.handlers
try:
- import _thread
+ import _thread, threading
except ImportError:
_thread = None
+ threading = None
+try:
+ import multiprocessing.process
+except ImportError:
+ multiprocessing = None
+
__all__ = [
"Error", "TestFailed", "ResourceDenied", "import_module",
@@ -1275,19 +1281,20 @@ def modules_cleanup(oldmodules):
def threading_setup():
if _thread:
- return _thread._count(),
+ return _thread._count(), threading._dangling.copy()
else:
- return 1,
+ return 1, ()
-def threading_cleanup(nb_threads):
+def threading_cleanup(*original_values):
if not _thread:
return
_MAX_COUNT = 10
for count in range(_MAX_COUNT):
- n = _thread._count()
- if n == nb_threads:
+ values = _thread._count(), threading._dangling
+ if values == original_values:
break
time.sleep(0.1)
+ gc_collect()
# XXX print a warning in case of failure?
def reap_threads(func):
diff --git a/Misc/NEWS b/Misc/NEWS
index 00bce49..02b59dc 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -67,6 +67,8 @@ C-API
Tests
-----
+- Try harder to reap dangling threads in test.support.reap_threads().
+
- Issue #12573: Add resource checks for dangling Thread and Process objects.
- Issue #12549: Correct test_platform to not fail when OS X returns 'x86_64'