diff options
author | Elvis Pranskevichus <elvis@magic.io> | 2018-10-03 14:30:31 (GMT) |
---|---|---|
committer | Yury Selivanov <yury@magic.io> | 2018-10-03 14:30:31 (GMT) |
commit | 0c797a6aca1c293e530e18c5e9fa02c670a9a4ed (patch) | |
tree | 0a7627593801b009925f9909715b8cacabf6c91e /Misc | |
parent | 96c593279400693226d5a560c420ae0fcf1731b9 (diff) | |
download | cpython-0c797a6aca1c293e530e18c5e9fa02c670a9a4ed.zip cpython-0c797a6aca1c293e530e18c5e9fa02c670a9a4ed.tar.gz cpython-0c797a6aca1c293e530e18c5e9fa02c670a9a4ed.tar.bz2 |
bpo-34872: Fix self-cancellation in C implementation of asyncio.Task (GH-9679)
The C implementation of asyncio.Task currently fails to perform the
cancellation cleanup correctly in the following scenario.
async def task1():
async def task2():
await task3 # task3 is never cancelled
asyncio.current_task().cancel()
await asyncio.create_task(task2())
The actuall error is a hardcoded call to `future_cancel()` instead of
calling the `cancel()` method of a future-like object.
Thanks to Vladimir Matveev for noticing the code discrepancy and to
Yury Selivanov for coming up with a pathological scenario.
Diffstat (limited to 'Misc')
-rw-r--r-- | Misc/NEWS.d/next/Library/2018-10-02-19-36-34.bpo-34872.yWZRhI.rst | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/Misc/NEWS.d/next/Library/2018-10-02-19-36-34.bpo-34872.yWZRhI.rst b/Misc/NEWS.d/next/Library/2018-10-02-19-36-34.bpo-34872.yWZRhI.rst new file mode 100644 index 0000000..cd02710 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-10-02-19-36-34.bpo-34872.yWZRhI.rst @@ -0,0 +1 @@ +Fix self-cancellation in C implementation of asyncio.Task |