]> granicus.if.org Git - python/commitdiff
bpo-31234: fork_wait tests now join threads (#3139) (#3187)
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 22 Aug 2017 16:03:03 +0000 (18:03 +0200)
committerGitHub <noreply@github.com>
Tue, 22 Aug 2017 16:03:03 +0000 (18:03 +0200)
fork_wait.py tests now joins threads, to not leak running threads in
the background.

(cherry picked from commit c99d41f9c0304fcf06550515c3db55f93a629e9e)

Lib/test/fork_wait.py

index 713039dd82687210fbf4d9d11c0717fbc41344bb..6af79ad5d4d62b3c134c67716c53fb78ffa879e5 100644 (file)
@@ -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)