]> granicus.if.org Git - python/commitdiff
make waiting for the server to start robust
authorBenjamin Peterson <benjamin@python.org>
Sat, 6 Feb 2010 22:08:15 +0000 (22:08 +0000)
committerBenjamin Peterson <benjamin@python.org>
Sat, 6 Feb 2010 22:08:15 +0000 (22:08 +0000)
Lib/logging/config.py
Lib/test/test_logging.py

index d7f7481fe80c04bdb69714198b5286a8dd1d958b..1145e711903ce416ff56678121ceb759d0468b0f 100644 (file)
@@ -843,17 +843,25 @@ def listen(port=DEFAULT_LOGGING_CONFIG_PORT):
                 abort = self.abort
                 logging._releaseLock()
 
-    def serve(rcvr, hdlr, port):
-        server = rcvr(port=port, handler=hdlr)
-        global _listener
-        logging._acquireLock()
-        _listener = server
-        logging._releaseLock()
-        server.serve_until_stopped()
+    class Server(threading.Thread):
+
+        def __init__(self, rcvr, hdlr, port):
+            super(Server, self).__init__()
+            self.rcvr = rcvr
+            self.hdlr = hdlr
+            self.port = port
+            self.ready = threading.Event()
+
+        def run(self):
+            server = self.rcvr(port=self.port, handler=self.hdlr)
+            self.ready.set()
+            global _listener
+            logging._acquireLock()
+            _listener = server
+            logging._releaseLock()
+            server.serve_until_stopped()
 
-    return threading.Thread(target=serve,
-                            args=(ConfigSocketReceiver,
-                                  ConfigStreamHandler, port))
+    return Server(ConfigSocketReceiver, ConfigStreamHandler, port)
 
 def stopListening():
     """
index 2a5283cadfb60ca0efda7fe064595721ff73801d..b9825cd5a4bf5684901e1263ee3425ed81ababbd 100644 (file)
@@ -1574,7 +1574,7 @@ class ConfigDictTest(BaseTest):
         port = find_unused_port()
         t = logging.config.listen(port)
         t.start()
-        time.sleep(0.5) # give server thread some time to get ready
+        t.ready.wait()
         try:
             sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
             sock.settimeout(2.0)