summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-09-14 21:04:56 (GMT)
committerGitHub <noreply@github.com>2017-09-14 21:04:56 (GMT)
commit167cbde50a88ec2a7d26b2cb9891d5e32bdfbfb5 (patch)
tree4e70dcd51b61b22c276a34726db0a17b1ce154bc /Lib
parentff40ecda73178dfcad24e26240d684356ef20793 (diff)
downloadcpython-167cbde50a88ec2a7d26b2cb9891d5e32bdfbfb5.zip
cpython-167cbde50a88ec2a7d26b2cb9891d5e32bdfbfb5.tar.gz
cpython-167cbde50a88ec2a7d26b2cb9891d5e32bdfbfb5.tar.bz2
bpo-31234: Join threads in test_queue (#3586)
Call thread.join() to prevent the "dangling thread" warning.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_queue.py46
1 files changed, 25 insertions, 21 deletions
diff --git a/Lib/test/test_queue.py b/Lib/test/test_queue.py
index 718ed67..e501669 100644
--- a/Lib/test/test_queue.py
+++ b/Lib/test/test_queue.py
@@ -47,28 +47,27 @@ class _TriggerThread(threading.Thread):
class BlockingTestMixin:
- def tearDown(self):
- self.t = None
-
def do_blocking_test(self, block_func, block_args, trigger_func, trigger_args):
- self.t = _TriggerThread(trigger_func, trigger_args)
- self.t.start()
- self.result = block_func(*block_args)
- # If block_func returned before our thread made the call, we failed!
- if not self.t.startedEvent.is_set():
- self.fail("blocking function '%r' appeared not to block" %
- block_func)
- self.t.join(10) # make sure the thread terminates
- if self.t.is_alive():
- self.fail("trigger function '%r' appeared to not return" %
- trigger_func)
- return self.result
+ thread = _TriggerThread(trigger_func, trigger_args)
+ thread.start()
+ try:
+ self.result = block_func(*block_args)
+ # If block_func returned before our thread made the call, we failed!
+ if not thread.startedEvent.is_set():
+ self.fail("blocking function '%r' appeared not to block" %
+ block_func)
+ return self.result
+ finally:
+ thread.join(10) # make sure the thread terminates
+ if thread.is_alive():
+ self.fail("trigger function '%r' appeared to not return" %
+ trigger_func)
# Call this instead if block_func is supposed to raise an exception.
def do_exceptional_blocking_test(self,block_func, block_args, trigger_func,
trigger_args, expected_exception_class):
- self.t = _TriggerThread(trigger_func, trigger_args)
- self.t.start()
+ thread = _TriggerThread(trigger_func, trigger_args)
+ thread.start()
try:
try:
block_func(*block_args)
@@ -78,11 +77,11 @@ class BlockingTestMixin:
self.fail("expected exception of kind %r" %
expected_exception_class)
finally:
- self.t.join(10) # make sure the thread terminates
- if self.t.is_alive():
+ thread.join(10) # make sure the thread terminates
+ if thread.is_alive():
self.fail("trigger function '%r' appeared to not return" %
trigger_func)
- if not self.t.startedEvent.is_set():
+ if not thread.startedEvent.is_set():
self.fail("trigger thread ended but event never set")
@@ -160,8 +159,11 @@ class BaseQueueTestMixin(BlockingTestMixin):
def queue_join_test(self, q):
self.cum = 0
+ threads = []
for i in (0,1):
- threading.Thread(target=self.worker, args=(q,)).start()
+ thread = threading.Thread(target=self.worker, args=(q,))
+ thread.start()
+ threads.append(thread)
for i in range(100):
q.put(i)
q.join()
@@ -170,6 +172,8 @@ class BaseQueueTestMixin(BlockingTestMixin):
for i in (0,1):
q.put(-1) # instruct the threads to close
q.join() # verify that you can join twice
+ for thread in threads:
+ thread.join()
def test_queue_task_done(self):
# Test to make sure a queue task completed successfully.