Skip to content

Commit 10c3cf7

Browse files
[3.9] bpo-45212: Fix dangling threads in skipped tests in test_socket (GH-28361) (GH-28408)
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 7dacb70)
1 parent 98fef20 commit 10c3cf7

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
@@ -324,9 +324,7 @@ def _testFoo(self):
324324
def __init__(self):
325325
# Swap the true setup function
326326
self.__setUp = self.setUp
327-
self.__tearDown = self.tearDown
328327
self.setUp = self._setUp
329-
self.tearDown = self._tearDown
330328

331329
def serverExplicitReady(self):
332330
"""This method allows the server to explicitly indicate that
@@ -338,13 +336,19 @@ def serverExplicitReady(self):
338336
def _setUp(self):
339337
self.wait_threads = support.wait_threads_exit()
340338
self.wait_threads.__enter__()
339+
self.addCleanup(self.wait_threads.__exit__, None, None, None)
341340

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

347+
def raise_queued_exception():
348+
if self.queue.qsize():
349+
raise self.queue.get()
350+
self.addCleanup(raise_queued_exception)
351+
348352
# Do some munging to start the client test.
349353
methodname = self.id()
350354
i = methodname.rfind('.')
@@ -361,15 +365,7 @@ def _setUp(self):
361365
finally:
362366
self.server_ready.set()
363367
self.client_ready.wait()
364-
365-
def _tearDown(self):
366-
self.__tearDown()
367-
self.done.wait()
368-
self.wait_threads.__exit__(None, None, None)
369-
370-
if self.queue.qsize():
371-
exc = self.queue.get()
372-
raise exc
368+
self.addCleanup(self.done.wait)
373369

374370
def clientRun(self, test_func):
375371
self.server_ready.wait()
@@ -6172,6 +6168,7 @@ def _testWithTimeoutTriggeredSend(self):
61726168
def testWithTimeoutTriggeredSend(self):
61736169
conn = self.accept_conn()
61746170
conn.recv(88192)
6171+
time.sleep(1)
61756172

61766173
# errors
61776174

0 commit comments

Comments
 (0)