diff --git a/eventlet/greenpool.py b/eventlet/greenpool.py index 7862cb2..f460bfa 100644 --- a/eventlet/greenpool.py +++ b/eventlet/greenpool.py @@ -119,7 +119,8 @@ class GreenPool(object): def waitall(self): """Waits until all greenthreads in the pool are finished working.""" - self.no_coros_running.wait() + if self.running(): + self.no_coros_running.wait() def _spawn_done(self, coro): self.sem.release() @@ -228,4 +229,4 @@ class GreenMap(GreenPile): try: return self.waiters.get().wait() finally: - self.counter -= 1 \ No newline at end of file + self.counter -= 1 diff --git a/tests/greenpool_test.py b/tests/greenpool_test.py index 176680a..c492ebe 100644 --- a/tests/greenpool_test.py +++ b/tests/greenpool_test.py @@ -297,6 +297,11 @@ class GreenPool(tests.LimitedTestCase): p = greenpool.GreenPool(4) result_list = list(p.starmap(passthru, [(x,) for x in xrange(10)])) self.assertEquals(result_list, range(10)) + + def test_waitall_on_nothing(self): + p = greenpool.GreenPool() + p.waitall() + class GreenPile(tests.LimitedTestCase): def test_pile(self): @@ -454,4 +459,4 @@ class Stress(tests.LimitedTestCase): subtest(50, 75, 100) for isize in (10, 20, 30, 40, 50): for psize in (5, 25, 35, 50): - subtest(isize, psize, psize) \ No newline at end of file + subtest(isize, psize, psize)