summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-08-18 21:12:26 (GMT)
committerGitHub <noreply@github.com>2017-08-18 21:12:26 (GMT)
commitc99d41f9c0304fcf06550515c3db55f93a629e9e (patch)
tree820bfeaa73f8ba276c34317e853e23599abce1d6
parentd73a960c575207539c3f9765cff26d4fff400b45 (diff)
downloadcpython-c99d41f9c0304fcf06550515c3db55f93a629e9e.zip
cpython-c99d41f9c0304fcf06550515c3db55f93a629e9e.tar.gz
cpython-c99d41f9c0304fcf06550515c3db55f93a629e9e.tar.bz2
bpo-31234: fork_wait tests now join threads (#3139)
fork_wait.py tests now joins threads, to not leak running threads in the background.
-rw-r--r--Lib/test/fork_wait.py25
1 files changed, 17 insertions, 8 deletions
diff --git a/Lib/test/fork_wait.py b/Lib/test/fork_wait.py
index 713039d..6af79ad 100644
--- a/Lib/test/fork_wait.py
+++ b/Lib/test/fork_wait.py
@@ -11,7 +11,8 @@ active threads survive in the child after a fork(); this is an error.
import os, sys, time, unittest
import test.support as support
-_thread = support.import_module('_thread')
+
+threading = support.import_module('threading')
LONGSLEEP = 2
SHORTSLEEP = 0.5
@@ -20,8 +21,19 @@ NUM_THREADS = 4
class ForkWait(unittest.TestCase):
def setUp(self):
+ self._threading_key = support.threading_setup()
self.alive = {}
self.stop = 0
+ self.threads = []
+
+ def tearDown(self):
+ # Stop threads
+ self.stop = 1
+ for thread in self.threads:
+ thread.join()
+ thread = None
+ self.threads.clear()
+ support.threading_cleanup(*self._threading_key)
def f(self, id):
while not self.stop:
@@ -43,10 +55,11 @@ class ForkWait(unittest.TestCase):
self.assertEqual(spid, cpid)
self.assertEqual(status, 0, "cause = %d, exit = %d" % (status&0xff, status>>8))
- @support.reap_threads
def test_wait(self):
for i in range(NUM_THREADS):
- _thread.start_new(self.f, (i,))
+ thread = threading.Thread(target=self.f, args=(i,))
+ thread.start()
+ self.threads.append(thread)
# busy-loop to wait for threads
deadline = time.monotonic() + 10.0
@@ -75,8 +88,4 @@ class ForkWait(unittest.TestCase):
os._exit(n)
else:
# Parent
- try:
- self.wait_impl(cpid)
- finally:
- # Tell threads to die
- self.stop = 1
+ self.wait_impl(cpid)