diff --git a/eventlet/queue.py b/eventlet/queue.py index 1bf3aef..da6e9ce 100644 --- a/eventlet/queue.py +++ b/eventlet/queue.py @@ -140,7 +140,7 @@ class LightQueue(object): """ def __init__(self, maxsize=None): - if maxsize < 0: + if maxsize is None or maxsize < 0: #None is not comparable in 3.x self.maxsize = None else: self.maxsize = maxsize @@ -186,7 +186,7 @@ class LightQueue(object): """Resizes the queue's maximum size. If the size is increased, and there are putters waiting, they may be woken up.""" - if size > self.maxsize: + if self.maxsize is not None and (size is None or size > self.maxsize): # None is not comparable in 3.x # Maybe wake some stuff up self._schedule_unlock() self.maxsize = size @@ -210,7 +210,7 @@ class LightQueue(object): ``Queue(None)`` is never full. """ - return self.qsize() >= self.maxsize + return self.maxsize is not None and self.qsize() >= self.maxsize # None is not comparable in 3.x def put(self, item, block=True, timeout=None): """Put an item into the queue. @@ -335,7 +335,7 @@ class LightQueue(object): putter.switch(putter) else: self.putters.add(putter) - elif self.putters and (self.getters or self.qsize() < self.maxsize): + elif self.putters and (self.getters or self.maxsize is None or self.qsize() < self.maxsize): putter = self.putters.pop() putter.switch(putter) else: diff --git a/tests/queue_test.py b/tests/queue_test.py index 496a8cc..e4a1c69 100644 --- a/tests/queue_test.py +++ b/tests/queue_test.py @@ -95,6 +95,21 @@ class TestQueue(LimitedTestCase): eventlet.sleep(0) self.assertEquals(list(q.queue), range(5)) + def test_resize_to_Unlimited(self): + q = eventlet.Queue(0) + def sender(evt, q): + q.put('hi') + evt.send('done') + + evt = event.Event() + gt = eventlet.spawn(sender, evt, q) + eventlet.sleep() + self.assertFalse(evt.ready()) + q.resize(None) + eventlet.sleep() + self.assertTrue(evt.ready()) + gt.wait() + def test_multiple_waiters(self): # tests that multiple waiters get their results back q = eventlet.Queue()