]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
fix: treat zero timeout as immediate in queues and locks 3621/head
authorSai Asish Y <say.apm35@gmail.com>
Wed, 13 May 2026 04:41:12 +0000 (21:41 -0700)
committerSai Asish Y <say.apm35@gmail.com>
Wed, 13 May 2026 04:41:12 +0000 (21:41 -0700)
tornado/locks.py
tornado/queues.py
tornado/test/queues_test.py

index 3b1c08da96eb340d1475b24e1e34d30cff244333..d05c921ff933a659734a15dd434d0924961688ca 100644 (file)
@@ -122,7 +122,7 @@ class Condition(_TimeoutGarbageCollector):
         """
         waiter: Future[bool] = Future()
         self._waiters.append(waiter)
-        if timeout:
+        if timeout is not None:
 
             def on_timeout() -> None:
                 if not waiter.done():
@@ -421,7 +421,7 @@ class Semaphore(_TimeoutGarbageCollector):
             waiter.set_result(_ReleasingContextManager(self))
         else:
             self._waiters.append(waiter)
-            if timeout:
+            if timeout is not None:
 
                 def on_timeout() -> None:
                     if not waiter.done():
index 41766eef782131cd76fecb149f0d7e5437d1341f..89403d7a32444b904d269ec08a490701c5cb442a 100644 (file)
@@ -55,7 +55,7 @@ class QueueFull(Exception):
 
 
 def _set_timeout(future: Future, timeout: None | float | datetime.timedelta) -> None:
-    if timeout:
+    if timeout is not None:
 
         def on_timeout() -> None:
             if not future.done():
index efbb1c319befc4f4323240a4de1f18cb241fc068..c29eea9c06f0bc67a15661bdec061a7ecee896ab 100644 (file)
@@ -117,6 +117,14 @@ class QueueGetTest(AsyncTestCase):
         q.put_nowait(0)
         self.assertEqual(0, (yield get))
 
+    @gen_test
+    def test_get_zero_timeout(self):
+        q: queues.Queue[int] = queues.Queue()
+        with self.assertRaises(TimeoutError):
+            yield q.get(timeout=timedelta(seconds=0))
+        with self.assertRaises(TimeoutError):
+            yield q.get(timeout=0)
+
     @gen_test
     def test_get_timeout_preempted(self):
         q: queues.Queue[int] = queues.Queue()