From: Sai Asish Y Date: Wed, 13 May 2026 04:41:12 +0000 (-0700) Subject: fix: treat zero timeout as immediate in queues and locks X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=aac84855f3bf8bcd37243ef72e7ff647edd8c207;p=thirdparty%2Ftornado.git fix: treat zero timeout as immediate in queues and locks --- diff --git a/tornado/locks.py b/tornado/locks.py index 3b1c08da..d05c921f 100644 --- a/tornado/locks.py +++ b/tornado/locks.py @@ -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(): diff --git a/tornado/queues.py b/tornado/queues.py index 41766eef..89403d7a 100644 --- a/tornado/queues.py +++ b/tornado/queues.py @@ -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(): diff --git a/tornado/test/queues_test.py b/tornado/test/queues_test.py index efbb1c31..c29eea9c 100644 --- a/tornado/test/queues_test.py +++ b/tornado/test/queues_test.py @@ -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()