From e3c6528772ea5c582ddf1e2fa237a76ea538c0d4 Mon Sep 17 00:00:00 2001 From: donovan Date: Fri, 30 May 2008 13:14:19 -0700 Subject: [PATCH] Fix a bug --- eventlet/coros.py | 18 ++++++++++++------ eventlet/coros_test.py | 10 ++++++++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/eventlet/coros.py b/eventlet/coros.py index 04aad61..245c658 100644 --- a/eventlet/coros.py +++ b/eventlet/coros.py @@ -295,6 +295,7 @@ class CoroutinePool(pools.Pool): if self._next_event is None: self._tracked_events.append(result) else: + ne = self._next_event self._next_event = None ne.send(result) @@ -375,12 +376,17 @@ class CoroutinePool(pools.Pool): """ assert self._tracked_events is not None, ( "Must pass track_events=True to the constructor to use CoroutinePool.wait()") - if self._next_event is None: - result = self._tracked_events.pop(0) - if not self._tracked_events: - self._next_event = event() - return result - return self._next_event.wait() + if self._next_event is not None: + return self._next_event.wait() + + if not self._tracked_events: + self._next_event = event() + return self._next_event.wait() + + result = self._tracked_events.pop(0) + if not self._tracked_events: + self._next_event = event() + return result def killall(self): for g in self._greenlets: diff --git a/eventlet/coros_test.py b/eventlet/coros_test.py index fa08761..0055580 100644 --- a/eventlet/coros_test.py +++ b/eventlet/coros_test.py @@ -212,10 +212,16 @@ class TestCoroutinePool(tests.TestCase): pool = coros.CoroutinePool(track_events=True) for x in range(6): pool.execute(lambda n: n, x) - t = api.exc_after(10, RuntimeError) for y in range(6): pool.wait() - t.cancel() + + def test_track_slow_event(self): + pool = coros.CoroutinePool(track_events=True) + def slow(): + api.sleep(0.1) + return 'ok' + pool.execute(slow) + self.assertEquals(pool.wait(), 'ok') class IncrActor(coros.Actor):