aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib-python/2.7/test/test_socketserver.py')
-rw-r--r--lib-python/2.7/test/test_socketserver.py24
1 files changed, 20 insertions, 4 deletions
diff --git a/lib-python/2.7/test/test_socketserver.py b/lib-python/2.7/test/test_socketserver.py
index d645d208dc..847859d06b 100644
--- a/lib-python/2.7/test/test_socketserver.py
+++ b/lib-python/2.7/test/test_socketserver.py
@@ -69,17 +69,32 @@ 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."""
def setUp(self):
+ self.addCleanup(signal_alarm, 0)
signal_alarm(60) # Kill deadlocks after 60 seconds.
self.port_seed = 0
self.test_files = []
def tearDown(self):
- signal_alarm(0) # Didn't deadlock.
+ self.doCleanups()
reap_children()
for fn in self.test_files:
@@ -118,7 +133,7 @@ class SocketServerTest(unittest.TestCase):
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 +173,7 @@ class SocketServerTest(unittest.TestCase):
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 +329,7 @@ class SocketServerTest(unittest.TestCase):
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 +363,7 @@ class MiscTestCase(unittest.TestCase):
s.close()
server.handle_request()
self.assertEqual(server.shutdown_called, 1)
- server.server_close()
+ close_server(server)
def test_main():