mirror of
https://github.com/python/cpython
synced 2024-09-05 00:05:39 +00:00
gh-76106: Remove the cleanup lock in test_socket (GH-110539)
It does not already work (because it locks only addCleanup(), not doCleanups()), and it is no longer needed since the clean up procedure waits for all test threads to join.
This commit is contained in:
parent
5c6e85480a
commit
f27b830907
|
@ -215,26 +215,6 @@ def setUp(self):
|
|||
self.serv = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDPLITE)
|
||||
self.port = socket_helper.bind_port(self.serv)
|
||||
|
||||
class ThreadSafeCleanupTestCase:
|
||||
"""Subclass of unittest.TestCase with thread-safe cleanup methods.
|
||||
|
||||
This subclass protects the addCleanup() method with a recursive lock.
|
||||
|
||||
doCleanups() is called when the server completed, but the client can still
|
||||
be running in its thread especially if the server failed with a timeout.
|
||||
Don't put a lock on doCleanups() to prevent deadlock between addCleanup()
|
||||
called in the client and doCleanups() waiting for self.done.wait of
|
||||
ThreadableTest._setUp() (gh-110167)
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self._cleanup_lock = threading.RLock()
|
||||
|
||||
def addCleanup(self, *args, **kwargs):
|
||||
with self._cleanup_lock:
|
||||
return super().addCleanup(*args, **kwargs)
|
||||
|
||||
|
||||
class SocketCANTest(unittest.TestCase):
|
||||
|
||||
|
@ -628,8 +608,7 @@ def setUp(self):
|
|||
self.serv.listen()
|
||||
|
||||
|
||||
class ThreadedSocketTestMixin(ThreadSafeCleanupTestCase, SocketTestBase,
|
||||
ThreadableTest):
|
||||
class ThreadedSocketTestMixin(SocketTestBase, ThreadableTest):
|
||||
"""Mixin to add client socket and allow client/server tests.
|
||||
|
||||
Client socket is self.cli and its address is self.cli_addr. See
|
||||
|
@ -2815,7 +2794,7 @@ def _testRecvFromNegative(self):
|
|||
# here assumes that datagram delivery on the local machine will be
|
||||
# reliable.
|
||||
|
||||
class SendrecvmsgBase(ThreadSafeCleanupTestCase):
|
||||
class SendrecvmsgBase:
|
||||
# Base class for sendmsg()/recvmsg() tests.
|
||||
|
||||
# Time in seconds to wait before considering a test failed, or
|
||||
|
@ -4681,7 +4660,6 @@ def testInterruptedRecvmsgIntoTimeout(self):
|
|||
@unittest.skipUnless(hasattr(signal, "alarm") or hasattr(signal, "setitimer"),
|
||||
"Don't have signal.alarm or signal.setitimer")
|
||||
class InterruptedSendTimeoutTest(InterruptedTimeoutBase,
|
||||
ThreadSafeCleanupTestCase,
|
||||
SocketListeningTestMixin, TCPTestBase):
|
||||
# Test interrupting the interruptible send*() methods with signals
|
||||
# when a timeout is set.
|
||||
|
|
Loading…
Reference in a new issue