[Python-checkins] cpython (3.2): Issue #13453: Fix a race condition in test_poplib.

charles-francois.natali python-checkins at python.org
Wed Dec 14 19:31:01 CET 2011


http://hg.python.org/cpython/rev/e497a3ed9beb
changeset:   73965:e497a3ed9beb
branch:      3.2
parent:      73962:49e82c885d6b
user:        Charles-François Natali <neologix at free.fr>
date:        Wed Dec 14 19:28:56 2011 +0100
summary:
  Issue #13453: Fix a race condition in test_poplib.

files:
  Lib/test/test_poplib.py |  22 ++++++++++++----------
  1 files changed, 12 insertions(+), 10 deletions(-)


diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py
--- a/Lib/test/test_poplib.py
+++ b/Lib/test/test_poplib.py
@@ -309,32 +309,34 @@
     def setUp(self):
         self.evt = threading.Event()
         self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        self.sock.settimeout(3)
+        self.sock.settimeout(60)  # Safety net. Look issue 11812
         self.port = test_support.bind_port(self.sock)
-        threading.Thread(target=self.server, args=(self.evt,self.sock)).start()
-        time.sleep(.1)
+        self.thread = threading.Thread(target=self.server, args=(self.evt,self.sock))
+        self.thread.setDaemon(True)
+        self.thread.start()
+        self.evt.wait()
 
     def tearDown(self):
-        self.evt.wait()
+        self.thread.join()
+        del self.thread  # Clear out any dangling Thread objects.
 
     def server(self, evt, serv):
         serv.listen(5)
+        evt.set()
         try:
             conn, addr = serv.accept()
+            conn.send(b"+ Hola mundo\n")
+            conn.close()
         except socket.timeout:
             pass
-        else:
-            conn.send(b"+ Hola mundo\n")
-            conn.close()
         finally:
             serv.close()
-            evt.set()
 
     def testTimeoutDefault(self):
         self.assertTrue(socket.getdefaulttimeout() is None)
         socket.setdefaulttimeout(30)
         try:
-            pop = poplib.POP3("localhost", self.port)
+            pop = poplib.POP3(HOST, self.port)
         finally:
             socket.setdefaulttimeout(None)
         self.assertEqual(pop.sock.gettimeout(), 30)
@@ -351,7 +353,7 @@
         pop.sock.close()
 
     def testTimeoutValue(self):
-        pop = poplib.POP3("localhost", self.port, timeout=30)
+        pop = poplib.POP3(HOST, self.port, timeout=30)
         self.assertEqual(pop.sock.gettimeout(), 30)
         pop.sock.close()
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list