]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Fix for raising an exception;
authorunknown <mgenti@.(none)>
Wed, 24 Mar 2010 15:14:03 +0000 (10:14 -0500)
committerunknown <mgenti@.(none)>
Wed, 24 Mar 2010 15:14:03 +0000 (10:14 -0500)
Fix for waking loop;
Added test

tornado/ioloop.py
tornado/test/test_ioloop.py [new file with mode: 0644]
tornado/win32_support.py

index 6e3a6f1ca4d3f6ebbd094c076dd245bfa0c157ea..572b48c20e5af95456eba031ff68e83cdbdb3635 100644 (file)
@@ -110,8 +110,8 @@ class IOLoop(object):
             self._waker_reader = os.fdopen(r, "r", 0)
             self._waker_writer = os.fdopen(w, "w", 0)
         else:
-            pipe = win32_support.Pipe()
-            r = pipe.reader_fd
+            self._waker_reader = self._waker_writer = win32_support.Pipe()
+            r = self._waker_writer.reader_fd
         self.add_handler(r, self._read_waker, self.READ)
 
     @classmethod
diff --git a/tornado/test/test_ioloop.py b/tornado/test/test_ioloop.py
new file mode 100644 (file)
index 0000000..1dd56cc
--- /dev/null
@@ -0,0 +1,40 @@
+# So we can run this file standalone from the test directory
+import sys
+sys.path.insert(0, '..')
+
+import unittest
+import time
+
+import ioloop
+
+
+class TestIOLoop(unittest.TestCase):
+    def setUp(self):
+        self.loop = ioloop.IOLoop()
+
+    def tearDown(self):
+        pass
+
+    def _callback(self):
+        self.called = True
+        self.loop.stop()
+
+    def _schedule_callback(self):
+        self.loop.add_callback(self._callback)
+        # Scroll away the time so we can check if we woke up immediately
+        self._start_time = time.time()
+        self.called = False
+
+    def test_add_callback(self):
+        self.loop.add_timeout(time.time(), self._schedule_callback)
+        self.loop.start() # Set some long poll timeout so we can check wakeup
+        self.assertAlmostEqual(time.time(), self._start_time, places=2)
+        self.assertTrue(self.called)
+
+
+if __name__ == "__main__":
+    import logging
+
+    logging.basicConfig(level=logging.DEBUG, format='%(asctime)s:%(msecs)03d %(levelname)-8s %(name)-8s %(message)s', datefmt='%H:%M:%S')
+
+    unittest.main()
index 88cfc16013b8415ba811a62dd36fe68b6e69266b..ee55d7e26224866219f1bcac2553c6c42af8c2d7 100644 (file)
@@ -2,6 +2,7 @@ import ctypes
 import ctypes.wintypes
 import os
 import socket
+import errno
 
 
 # See: http://msdn.microsoft.com/en-us/library/ms738573(VS.85).aspx
@@ -94,7 +95,7 @@ class Pipe(object):
                 if count >= 10:  # I've never seen it go above 2
                     a.close()
                     self.writer.close()
-                    raise BindError("Cannot bind trigger!")
+                    raise socket.error("Cannot bind trigger!")
                 # Close `a` and try again.  Note:  I originally put a short
                 # sleep() here, but it didn't appear to help or hurt.
                 a.close()