Skip to content

Commit b4920d5

Browse files
authored
bpo-31593: test_socketserver waits child processes (#3786)
1 parent 9bfa55b commit b4920d5

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

Lib/test/test_socketserver.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,20 @@ def simple_subprocess(testcase):
6969
testcase.assertEqual(72 << 8, status)
7070

7171

72+
def close_server(server):
73+
server.server_close()
74+
75+
if hasattr(server, 'active_children'):
76+
# ForkingMixIn: Manually reap all child processes, since server_close()
77+
# calls waitpid() in non-blocking mode using the WNOHANG flag.
78+
for pid in server.active_children.copy():
79+
try:
80+
os.waitpid(pid, 0)
81+
except ChildProcessError:
82+
pass
83+
server.active_children.clear()
84+
85+
7286
@unittest.skipUnless(threading, 'Threading required for this test.')
7387
class SocketServerTest(unittest.TestCase):
7488
"""Test all socket servers."""
@@ -118,7 +132,7 @@ def make_server(self, addr, svrcls, hdlrbase):
118132
class MyServer(svrcls):
119133
def handle_error(self, request, client_address):
120134
self.close_request(request)
121-
self.server_close()
135+
close_server(self)
122136
raise
123137

124138
class MyHandler(hdlrbase):
@@ -158,7 +172,7 @@ def run_server(self, svrcls, hdlrbase, testfunc):
158172
if verbose: print "waiting for server"
159173
server.shutdown()
160174
t.join()
161-
server.server_close()
175+
close_server(server)
162176
self.assertRaises(socket.error, server.socket.fileno)
163177
if verbose: print "done"
164178

@@ -314,6 +328,7 @@ class MyHandler(SocketServer.StreamRequestHandler):
314328
s.shutdown()
315329
for t, s in threads:
316330
t.join()
331+
close_server(s)
317332

318333
def test_tcpserver_bind_leak(self):
319334
# Issue #22435: the server socket wouldn't be closed if bind()/listen()
@@ -347,7 +362,7 @@ def shutdown_request(self, request):
347362
s.close()
348363
server.handle_request()
349364
self.assertEqual(server.shutdown_called, 1)
350-
server.server_close()
365+
close_server(server)
351366

352367

353368
def test_main():

0 commit comments

Comments
 (0)