summaryrefslogtreecommitdiffstats
path: root/Lib/asyncio
diff options
context:
space:
mode:
authorKumar Aditya <59607654+kumaraditya303@users.noreply.github.com>2022-01-29 06:57:18 (GMT)
committerGitHub <noreply@github.com>2022-01-29 06:57:18 (GMT)
commita5451c96a14ac0c3ee7cef7b5c52ab1d783ec613 (patch)
treeac6a1a6c725b3945dcb6ca3fe3f91fa6aebf4110 /Lib/asyncio
parent315a60acd14dd730b2081574c09ccc29e92ee687 (diff)
downloadcpython-a5451c96a14ac0c3ee7cef7b5c52ab1d783ec613.zip
cpython-a5451c96a14ac0c3ee7cef7b5c52ab1d783ec613.tar.gz
cpython-a5451c96a14ac0c3ee7cef7b5c52ab1d783ec613.tar.bz2
bpo-26552: Fixed case where failing `asyncio.ensure_future` did not close the coroutine (#30288) (#31003)
Diffstat (limited to 'Lib/asyncio')
-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