summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Szotten <davidszotten@gmail.com>2014-04-05 17:12:58 +0100
committerSergey Shepelev <temotor@gmail.com>2015-02-21 14:58:46 +0300
commitc43d498f01d47c402b20c1701d7b97da49b53195 (patch)
treeefd784daa25eea47cefe1fce40665a76913d0e23
parenta6ce444265d36fb23361809d40da73caf4864487 (diff)
downloadeventlet-tm2.tar.gz
make sure we return results during killalltm2
since we are about to delete the _rspq
-rw-r--r--eventlet/tpool.py10
-rw-r--r--tests/tpool_test.py18
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)