bpo-31593: test_socketserver waits child processes (#3786) · python/cpython@b4920d5

@@ -69,6 +69,20 @@ def simple_subprocess(testcase):

6969

testcase.assertEqual(72 << 8, status)

7070717172+

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

123137124138

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)

317332318333

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)

351366352367353368

def test_main():