Skip to content

Commit 7dacb70

Browse files
bpo-45212: Fix dangling threads in skipped tests in test_socket (GH-28361)
tearDown() is not called if setUp() raises an exception (including SkipTest). addCleanup() should be used for guaranteed execution of the cleanup code.
1 parent 800bd01 commit 7dacb70

File tree

1 file changed

+8
-11
lines changed

1 file changed

+8
-11
lines changed

Lib/test/test_socket.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -326,9 +326,7 @@ def _testFoo(self):
326326
def __init__(self):
327327
# Swap the true setup function
328328
self.__setUp = self.setUp
329-
self.__tearDown = self.tearDown
330329
self.setUp = self._setUp
331-
self.tearDown = self._tearDown
332330

333331
def serverExplicitReady(self):
334332
"""This method allows the server to explicitly indicate that
@@ -340,13 +338,19 @@ def serverExplicitReady(self):
340338
def _setUp(self):
341339
self.wait_threads = threading_helper.wait_threads_exit()
342340
self.wait_threads.__enter__()
341+
self.addCleanup(self.wait_threads.__exit__, None, None, None)
343342

344343
self.server_ready = threading.Event()
345344
self.client_ready = threading.Event()
346345
self.done = threading.Event()
347346
self.queue = queue.Queue(1)
348347
self.server_crashed = False
349348

349+
def raise_queued_exception():
350+
if self.queue.qsize():
351+
raise self.queue.get()
352+
self.addCleanup(raise_queued_exception)
353+
350354
# Do some munging to start the client test.
351355
methodname = self.id()
352356
i = methodname.rfind('.')
@@ -363,15 +367,7 @@ def _setUp(self):
363367
finally:
364368
self.server_ready.set()
365369
self.client_ready.wait()
366-
367-
def _tearDown(self):
368-
self.__tearDown()
369-
self.done.wait()
370-
self.wait_threads.__exit__(None, None, None)
371-
372-
if self.queue.qsize():
373-
exc = self.queue.get()
374-
raise exc
370+
self.addCleanup(self.done.wait)
375371

376372
def clientRun(self, test_func):
377373
self.server_ready.wait()
@@ -6211,6 +6207,7 @@ def _testWithTimeoutTriggeredSend(self):
62116207
def testWithTimeoutTriggeredSend(self):
62126208
conn = self.accept_conn()
62136209
conn.recv(88192)
6210+
time.sleep(1)
62146211

62156212
# errors
62166213

0 commit comments

Comments
 (0)