tpool: make sure we return results during killall
since we are about to delete the _rspq
This commit is contained in:

committed by
Sergey Shepelev

parent
bab1116809
commit
52d42dd741
@@ -292,6 +292,16 @@ def killall():
|
|||||||
for thr in _threads:
|
for thr in _threads:
|
||||||
thr.join()
|
thr.join()
|
||||||
del _threads[:]
|
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:
|
if _coro is not None:
|
||||||
greenthread.kill(_coro)
|
greenthread.kill(_coro)
|
||||||
_rsock.close()
|
_rsock.close()
|
||||||
|
@@ -20,7 +20,7 @@ import re
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
import eventlet
|
import eventlet
|
||||||
from eventlet import tpool
|
from eventlet import tpool, debug, event
|
||||||
from eventlet.support import six
|
from eventlet.support import six
|
||||||
from tests import LimitedTestCase, skipped, skip_with_pyevent, main
|
from tests import LimitedTestCase, skipped, skip_with_pyevent, main
|
||||||
|
|
||||||
@@ -228,6 +228,22 @@ class TestTpool(LimitedTestCase):
|
|||||||
tpool.killall()
|
tpool.killall()
|
||||||
tpool.setup()
|
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
|
@skip_with_pyevent
|
||||||
def test_autowrap(self):
|
def test_autowrap(self):
|
||||||
x = tpool.Proxy({'a': 1, 'b': 2}, autowrap=(int,))
|
x = tpool.Proxy({'a': 1, 'b': 2}, autowrap=(int,))
|
||||||
|
Reference in New Issue
Block a user