summaryrefslogtreecommitdiffstats
path: root/Lib/asyncio/tasks.py
diff options
context:
space:
mode:
authorKumar Aditya <59607654+kumaraditya303@users.noreply.github.com>2022-01-28 22:24:35 (GMT)
committerGitHub <noreply@github.com>2022-01-28 22:24:35 (GMT)
commit24cc6411adbfe5555ecd8901f1ea50caa414c908 (patch)
tree06358eb8f6d993efb986ddd590120e61d818e21d /Lib/asyncio/tasks.py
parent36f538c8092eeb3d5b8bc9df0ae7cc348f08a865 (diff)
downloadcpython-24cc6411adbfe5555ecd8901f1ea50caa414c908.zip
cpython-24cc6411adbfe5555ecd8901f1ea50caa414c908.tar.gz
cpython-24cc6411adbfe5555ecd8901f1ea50caa414c908.tar.bz2
bpo-26552: Fixed case where failing `asyncio.ensure_future` did not close the coroutine (#30288)
Diffstat (limited to 'Lib/asyncio/tasks.py')
-rw-r--r--Lib/asyncio/tasks.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py
index 445a9f5..2bee5c0 100644
--- a/Lib/asyncio/tasks.py
+++ b/Lib/asyncio/tasks.py
@@ -621,17 +621,23 @@ def _ensure_future(coro_or_future, *, loop=None):
raise ValueError('The future belongs to a different loop than '
'the one specified as the loop argument')
return coro_or_future
-
+ called_wrap_awaitable = False
if not coroutines.iscoroutine(coro_or_future):
if inspect.isawaitable(coro_or_future):
coro_or_future = _wrap_awaitable(coro_or_future)
+ called_wrap_awaitable = True
else:
raise TypeError('An asyncio.Future, a coroutine or an awaitable '
'is required')
if loop is None:
loop = events._get_event_loop(stacklevel=4)
- return loop.create_task(coro_or_future)
+ try:
+ return loop.create_task(coro_or_future)
+ except RuntimeError:
+ if not called_wrap_awaitable:
+ coro_or_future.close()
+ raise
@types.coroutine