[Python-checkins] [3.10] bpo-45212: Fix dangling threads in skipped tests in test_socket (GH-28361) (GH-28409)

serhiy-storchaka webhook-mailer at python.org
Fri Sep 17 06:11:33 EDT 2021


https://github.com/python/cpython/commit/ce59ac93626004894c2b291ec599a36cfa9fb0be
commit: ce59ac93626004894c2b291ec599a36cfa9fb0be
branch: 3.10
author: Serhiy Storchaka <storchaka at gmail.com>
committer: serhiy-storchaka <storchaka at gmail.com>
date: 2021-09-17T13:11:28+03:00
summary:

[3.10] bpo-45212: Fix dangling threads in skipped tests in test_socket (GH-28361) (GH-28409)

tearDown() is not called if setUp() raises an exception
(including SkipTest). addCleanup() should be used for guaranteed
execution of the cleanup code.
(cherry picked from commit 7dacb70485a0910eb298c24b4d051720ca56fb91)

files:
M Lib/test/test_socket.py

diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 6e4772df251ed..f36d412669015 100755
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -326,9 +326,7 @@ def _testFoo(self):
     def __init__(self):
         # Swap the true setup function
         self.__setUp = self.setUp
-        self.__tearDown = self.tearDown
         self.setUp = self._setUp
-        self.tearDown = self._tearDown
 
     def serverExplicitReady(self):
         """This method allows the server to explicitly indicate that
@@ -340,6 +338,7 @@ def serverExplicitReady(self):
     def _setUp(self):
         self.wait_threads = threading_helper.wait_threads_exit()
         self.wait_threads.__enter__()
+        self.addCleanup(self.wait_threads.__exit__, None, None, None)
 
         self.server_ready = threading.Event()
         self.client_ready = threading.Event()
@@ -347,6 +346,11 @@ def _setUp(self):
         self.queue = queue.Queue(1)
         self.server_crashed = False
 
+        def raise_queued_exception():
+            if self.queue.qsize():
+                raise self.queue.get()
+        self.addCleanup(raise_queued_exception)
+
         # Do some munging to start the client test.
         methodname = self.id()
         i = methodname.rfind('.')
@@ -363,15 +367,7 @@ def _setUp(self):
         finally:
             self.server_ready.set()
         self.client_ready.wait()
-
-    def _tearDown(self):
-        self.__tearDown()
-        self.done.wait()
-        self.wait_threads.__exit__(None, None, None)
-
-        if self.queue.qsize():
-            exc = self.queue.get()
-            raise exc
+        self.addCleanup(self.done.wait)
 
     def clientRun(self, test_func):
         self.server_ready.wait()
@@ -6176,6 +6172,7 @@ def _testWithTimeoutTriggeredSend(self):
     def testWithTimeoutTriggeredSend(self):
         conn = self.accept_conn()
         conn.recv(88192)
+        time.sleep(1)
 
     # errors
 



More information about the Python-checkins mailing list