queue: empty except was catching too much
https://github.com/eventlet/eventlet/issues/407
This commit is contained in:
@@ -116,7 +116,7 @@ class Waiter(object):
|
|||||||
if self.greenlet is not None:
|
if self.greenlet is not None:
|
||||||
try:
|
try:
|
||||||
self.greenlet.switch(value)
|
self.greenlet.switch(value)
|
||||||
except:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
def throw(self, *throw_args):
|
def throw(self, *throw_args):
|
||||||
@@ -128,7 +128,7 @@ class Waiter(object):
|
|||||||
if self.greenlet is not None:
|
if self.greenlet is not None:
|
||||||
try:
|
try:
|
||||||
self.greenlet.throw(*throw_args)
|
self.greenlet.throw(*throw_args)
|
||||||
except:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
# XXX should be renamed to get() ? and the whole class is called Receiver?
|
# XXX should be renamed to get() ? and the whole class is called Receiver?
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import eventlet
|
import eventlet
|
||||||
from eventlet import event, hubs, queue
|
from eventlet import event, hubs, queue
|
||||||
from tests import LimitedTestCase, main
|
import tests
|
||||||
|
|
||||||
|
|
||||||
def do_bail(q):
|
def do_bail(q):
|
||||||
@@ -12,7 +12,7 @@ def do_bail(q):
|
|||||||
return 'timed out'
|
return 'timed out'
|
||||||
|
|
||||||
|
|
||||||
class TestQueue(LimitedTestCase):
|
class TestQueue(tests.LimitedTestCase):
|
||||||
def test_send_first(self):
|
def test_send_first(self):
|
||||||
q = eventlet.Queue()
|
q = eventlet.Queue()
|
||||||
q.put('hi')
|
q.put('hi')
|
||||||
@@ -246,7 +246,7 @@ class TestQueue(LimitedTestCase):
|
|||||||
self.assertRaises(queue.Empty, c.get_nowait)
|
self.assertRaises(queue.Empty, c.get_nowait)
|
||||||
|
|
||||||
def test_task_done(self):
|
def test_task_done(self):
|
||||||
channel = queue.Queue(0)
|
channel = eventlet.Queue(0)
|
||||||
X = object()
|
X = object()
|
||||||
gt = eventlet.spawn(channel.put, X)
|
gt = eventlet.spawn(channel.put, X)
|
||||||
result = channel.get()
|
result = channel.get()
|
||||||
@@ -268,7 +268,7 @@ def store_result(result, func, *args):
|
|||||||
result.append(exc)
|
result.append(exc)
|
||||||
|
|
||||||
|
|
||||||
class TestNoWait(LimitedTestCase):
|
class TestNoWait(tests.LimitedTestCase):
|
||||||
def test_put_nowait_simple(self):
|
def test_put_nowait_simple(self):
|
||||||
hub = hubs.get_hub()
|
hub = hubs.get_hub()
|
||||||
result = []
|
result = []
|
||||||
@@ -284,7 +284,7 @@ class TestNoWait(LimitedTestCase):
|
|||||||
def test_get_nowait_simple(self):
|
def test_get_nowait_simple(self):
|
||||||
hub = hubs.get_hub()
|
hub = hubs.get_hub()
|
||||||
result = []
|
result = []
|
||||||
q = queue.Queue(1)
|
q = eventlet.Queue(1)
|
||||||
q.put(4)
|
q.put(4)
|
||||||
hub.schedule_call_global(0, store_result, result, q.get_nowait)
|
hub.schedule_call_global(0, store_result, result, q.get_nowait)
|
||||||
hub.schedule_call_global(0, store_result, result, q.get_nowait)
|
hub.schedule_call_global(0, store_result, result, q.get_nowait)
|
||||||
@@ -297,7 +297,7 @@ class TestNoWait(LimitedTestCase):
|
|||||||
def test_get_nowait_unlock(self):
|
def test_get_nowait_unlock(self):
|
||||||
hub = hubs.get_hub()
|
hub = hubs.get_hub()
|
||||||
result = []
|
result = []
|
||||||
q = queue.Queue(0)
|
q = eventlet.Queue(0)
|
||||||
p = eventlet.spawn(q.put, 5)
|
p = eventlet.spawn(q.put, 5)
|
||||||
assert q.empty(), q
|
assert q.empty(), q
|
||||||
assert q.full(), q
|
assert q.full(), q
|
||||||
@@ -318,7 +318,7 @@ class TestNoWait(LimitedTestCase):
|
|||||||
def test_put_nowait_unlock(self):
|
def test_put_nowait_unlock(self):
|
||||||
hub = hubs.get_hub()
|
hub = hubs.get_hub()
|
||||||
result = []
|
result = []
|
||||||
q = queue.Queue(0)
|
q = eventlet.Queue(0)
|
||||||
eventlet.spawn(q.get)
|
eventlet.spawn(q.get)
|
||||||
assert q.empty(), q
|
assert q.empty(), q
|
||||||
assert q.full(), q
|
assert q.full(), q
|
||||||
@@ -335,6 +335,17 @@ class TestNoWait(LimitedTestCase):
|
|||||||
assert q.full(), q
|
assert q.full(), q
|
||||||
assert q.empty(), q
|
assert q.empty(), q
|
||||||
|
|
||||||
|
def test_wait_except(self):
|
||||||
|
# https://github.com/eventlet/eventlet/issues/407
|
||||||
|
q = eventlet.Queue()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
def get():
|
||||||
main()
|
q.get()
|
||||||
|
raise KeyboardInterrupt
|
||||||
|
|
||||||
|
eventlet.spawn(get)
|
||||||
|
eventlet.sleep()
|
||||||
|
|
||||||
|
with tests.assert_raises(KeyboardInterrupt):
|
||||||
|
q.put(None)
|
||||||
|
eventlet.sleep()
|
||||||
|
Reference in New Issue
Block a user