diff options
| author | David Szotten <davidszotten@gmail.com> | 2014-04-05 17:12:58 +0100 |
|---|---|---|
| committer | Sergey Shepelev <temotor@gmail.com> | 2015-02-21 14:58:46 +0300 |
| commit | c43d498f01d47c402b20c1701d7b97da49b53195 (patch) | |
| tree | efd784daa25eea47cefe1fce40665a76913d0e23 | |
| parent | a6ce444265d36fb23361809d40da73caf4864487 (diff) | |
| download | eventlet-tm2.tar.gz | |
make sure we return results during killalltm2
since we are about to delete the _rspq
| -rw-r--r-- | eventlet/tpool.py | 10 | ||||
| -rw-r--r-- | tests/tpool_test.py | 18 |
2 files changed, 27 insertions, 1 deletions
diff --git a/eventlet/tpool.py b/eventlet/tpool.py index e7f0db1..8d73814 100644 --- a/eventlet/tpool.py +++ b/eventlet/tpool.py @@ -292,6 +292,16 @@ def killall(): for thr in _threads: thr.join() del _threads[:] + + # return any remaining results + while not _rspq.empty(): + try: + (e, rv) = _rspq.get(block=False) + e.send(rv) + e = rv = None + except Empty: + pass + if _coro is not None: greenthread.kill(_coro) _rsock.close() diff --git a/tests/tpool_test.py b/tests/tpool_test.py index 5af1a40..818bb45 100644 --- a/tests/tpool_test.py +++ b/tests/tpool_test.py @@ -20,7 +20,7 @@ import re import time import eventlet -from eventlet import tpool +from eventlet import tpool, debug, event from eventlet.support import six from tests import LimitedTestCase, skipped, skip_with_pyevent, main @@ -229,6 +229,22 @@ class TestTpool(LimitedTestCase): tpool.setup() @skip_with_pyevent + def test_killall_remaining_results(self): + semaphore = event.Event() + + def native_fun(): + time.sleep(.5) + + def gt_fun(): + semaphore.send(None) + tpool.execute(native_fun) + + gt = eventlet.spawn(gt_fun) + semaphore.wait() + tpool.killall() + gt.wait() + + @skip_with_pyevent def test_autowrap(self): x = tpool.Proxy({'a': 1, 'b': 2}, autowrap=(int,)) assert isinstance(x.get('a'), tpool.Proxy) |
