Skip to content

Commit c58d2de

Browse files
committed
Fix cleanup fds
1 parent fbb2668 commit c58d2de

File tree

1 file changed

+18
-17
lines changed

1 file changed

+18
-17
lines changed

Lib/test/test_socket.py

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7037,25 +7037,22 @@ def test_dual_stack_client_v6(self):
70377037
@requireAttrs(socket, "recv_fds")
70387038
@requireAttrs(socket, "AF_UNIX")
70397039
class SendRecvFdsTests(unittest.TestCase):
7040+
def _cleanup_fds(self, fds):
7041+
def close_fds(fds):
7042+
for fd in fds:
7043+
os.close(fd)
7044+
self.addCleanup(close_fds, fds)
7045+
70407046
def _test_pipe(self, rfd, wfd, msg):
70417047
assert len(msg) < 512
70427048
os.write(wfd, msg)
70437049
data = os.read(rfd, 512)
70447050
self.assertEqual(data, msg)
70457051

70467052
def testSendAndRecvFds(self):
7047-
def close_pipes(pipes):
7048-
for fd1, fd2 in pipes:
7049-
os.close(fd1)
7050-
os.close(fd2)
7051-
7052-
def close_fds(fds):
7053-
for fd in fds:
7054-
os.close(fd)
7055-
70567053
# send 10 file descriptors
70577054
pipes = [os.pipe() for _ in range(10)]
7058-
self.addCleanup(close_pipes, pipes)
7055+
self._cleanup_fds(fd for pair in pipes for fd in pair)
70597056
fds = [rfd for rfd, wfd in pipes]
70607057

70617058
# use a UNIX socket pair to exchange file descriptors locally
@@ -7064,7 +7061,7 @@ def close_fds(fds):
70647061
socket.send_fds(sock1, [MSG], fds)
70657062
# request more data and file descriptors than expected
70667063
msg, fds2, flags, addr = socket.recv_fds(sock2, len(MSG) * 2, len(fds) * 2)
7067-
self.addCleanup(close_fds, fds2)
7064+
self._cleanup_fds(fds2)
70687065

70697066
self.assertEqual(msg, MSG)
70707067
self.assertEqual(len(fds2), len(fds))
@@ -7091,14 +7088,13 @@ def test_send_recv_fds_with_addrs(self):
70917088

70927089
socket.send_fds(sock1, [MSG], [rfd], address=sock2_addr)
70937090
msg, fds, flags, addr = socket.recv_fds(sock2, len(MSG), 1)
7094-
new_rfd = fds[0]
7095-
self.addCleanup(os.close, new_rfd)
7091+
self._cleanup_fds(fds)
70967092

70977093
self.assertEqual(msg, MSG)
70987094
self.assertEqual(len(fds), 1)
70997095
self.assertEqual(addr, sock1_addr)
71007096

7101-
self._test_pipe(new_rfd, wfd, MSG)
7097+
self._test_pipe(fds[0], wfd, MSG)
71027098

71037099
@requireAttrs(socket, "MSG_PEEK")
71047100
def test_recv_fds_peek(self):
@@ -7115,16 +7111,20 @@ def test_recv_fds_peek(self):
71157111
peek_len = len(MSG) // 2
71167112
msg, fds, flags, addr = socket.recv_fds(sock2, peek_len, 1,
71177113
socket.MSG_PEEK)
7118-
self.addCleanup(os.close, fds[0])
7114+
self._cleanup_fds(fds)
7115+
71197116
self.assertEqual(len(msg), peek_len)
71207117
self.assertEqual(msg, MSG[:peek_len])
71217118
self.assertEqual(flags & socket.MSG_TRUNC, socket.MSG_TRUNC)
7119+
self.assertEqual(len(fds), 1)
71227120
self._test_pipe(fds[0], wfd, MSG)
71237121

71247122
# will raise BlockingIOError if MSG_PEEK didn't work
71257123
msg, fds, flags, addr = socket.recv_fds(sock2, len(MSG), 1)
7126-
self.addCleanup(os.close, fds[0])
7124+
self._cleanup_fds(fds)
7125+
71277126
self.assertEqual(msg, MSG)
7127+
self.assertEqual(len(fds), 1)
71287128
self._test_pipe(fds[0], wfd, MSG)
71297129

71307130
@requireAttrs(socket, "MSG_DONTWAIT")
@@ -7142,9 +7142,10 @@ def test_send_fds_dontwait(self):
71427142
socket.send_fds(sock1, [MSG], [rfd], socket.MSG_DONTWAIT)
71437143

71447144
msg, fds, flags, addr = socket.recv_fds(sock2, len(MSG), 1)
7145-
self.addCleanup(os.close, fds[0])
7145+
self._cleanup_fds(fds)
71467146

71477147
self.assertEqual(msg, MSG)
7148+
self.assertEqual(len(fds), 1)
71487149
self._test_pipe(fds[0], wfd, MSG)
71497150

71507151

0 commit comments

Comments
 (0)