Merge 3.5
This commit is contained in:
commit
8bb6fa85e1
|
@ -251,7 +251,13 @@ class Task(futures.Future):
|
|||
else:
|
||||
if isinstance(result, futures.Future):
|
||||
# Yielded Future must come from Future.__iter__().
|
||||
if result._blocking:
|
||||
if result._loop is not self._loop:
|
||||
self._loop.call_soon(
|
||||
self._step,
|
||||
RuntimeError(
|
||||
'Task {!r} got Future {!r} attached to a '
|
||||
'different loop'.format(self, result)))
|
||||
elif result._blocking:
|
||||
result._blocking = False
|
||||
result.add_done_callback(self._wakeup)
|
||||
self._fut_waiter = result
|
||||
|
|
|
@ -76,6 +76,21 @@ class TaskTests(test_utils.TestCase):
|
|||
def setUp(self):
|
||||
self.loop = self.new_test_loop()
|
||||
|
||||
def test_other_loop_future(self):
|
||||
other_loop = asyncio.new_event_loop()
|
||||
fut = asyncio.Future(loop=other_loop)
|
||||
|
||||
@asyncio.coroutine
|
||||
def run(fut):
|
||||
yield from fut
|
||||
|
||||
try:
|
||||
with self.assertRaisesRegex(RuntimeError,
|
||||
r'Task .* got Future .* attached'):
|
||||
self.loop.run_until_complete(run(fut))
|
||||
finally:
|
||||
other_loop.close()
|
||||
|
||||
def test_task_class(self):
|
||||
@asyncio.coroutine
|
||||
def notmuch():
|
||||
|
|
Loading…
Reference in New Issue