[Python-checkins] bpo-31593: test_socketserver waits child processes (#3786)

Victor Stinner webhook-mailer at python.org
Wed Sep 27 06:03:02 EDT 2017


https://github.com/python/cpython/commit/b4920d562b74e909bfae71bf119350a01d1d5e5e
commit: b4920d562b74e909bfae71bf119350a01d1d5e5e
branch: 2.7
author: Victor Stinner <victor.stinner at gmail.com>
committer: GitHub <noreply at github.com>
date: 2017年09月27日T03:02:57-07:00
summary:
bpo-31593: test_socketserver waits child processes (#3786)
files:
M Lib/test/test_socketserver.py
diff --git a/Lib/test/test_socketserver.py b/Lib/test/test_socketserver.py
index d645d208dca..0087b9e24d7 100644
--- a/Lib/test/test_socketserver.py
+++ b/Lib/test/test_socketserver.py
@@ -69,6 +69,20 @@ def simple_subprocess(testcase):
 testcase.assertEqual(72 << 8, status)
 
 
+def close_server(server):
+ server.server_close()
+
+ if hasattr(server, 'active_children'):
+ # ForkingMixIn: Manually reap all child processes, since server_close()
+ # calls waitpid() in non-blocking mode using the WNOHANG flag.
+ for pid in server.active_children.copy():
+ try:
+ os.waitpid(pid, 0)
+ except ChildProcessError:
+ pass
+ server.active_children.clear()
+
+
 @unittest.skipUnless(threading, 'Threading required for this test.')
 class SocketServerTest(unittest.TestCase):
 """Test all socket servers."""
@@ -118,7 +132,7 @@ def make_server(self, addr, svrcls, hdlrbase):
 class MyServer(svrcls):
 def handle_error(self, request, client_address):
 self.close_request(request)
- self.server_close()
+ close_server(self)
 raise
 
 class MyHandler(hdlrbase):
@@ -158,7 +172,7 @@ def run_server(self, svrcls, hdlrbase, testfunc):
 if verbose: print "waiting for server"
 server.shutdown()
 t.join()
- server.server_close()
+ close_server(server)
 self.assertRaises(socket.error, server.socket.fileno)
 if verbose: print "done"
 
@@ -314,6 +328,7 @@ class MyHandler(SocketServer.StreamRequestHandler):
 s.shutdown()
 for t, s in threads:
 t.join()
+ close_server(s)
 
 def test_tcpserver_bind_leak(self):
 # Issue #22435: the server socket wouldn't be closed if bind()/listen()
@@ -347,7 +362,7 @@ def shutdown_request(self, request):
 s.close()
 server.handle_request()
 self.assertEqual(server.shutdown_called, 1)
- server.server_close()
+ close_server(server)
 
 
 def test_main():


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /