Skip to content

[3.7] bpo-34872: Fix self-cancellation in C implementation of asyncio.Task (GH-9679)#9691

Merged
miss-islington merged 1 commit into
python:3.7from
elprans:backport-548ce9d-3.7
Oct 3, 2018
Merged

[3.7] bpo-34872: Fix self-cancellation in C implementation of asyncio.Task (GH-9679)#9691
miss-islington merged 1 commit into
python:3.7from
elprans:backport-548ce9d-3.7

Conversation

@elprans

@elprans elprans commented Oct 3, 2018

Copy link
Copy Markdown
Contributor

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..
(cherry picked from commit 548ce9d)

Co-authored-by: Elvis Pranskevichus elvis@magic.io

https://bugs.python.org/issue34872

….Task (pythonGH-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..
(cherry picked from commit 548ce9d)

Co-authored-by: Elvis Pranskevichus <elvis@magic.io>
@miss-islington

Copy link
Copy Markdown
Contributor

@elprans: Status check is done, and it's a success ✅ .

@miss-islington miss-islington merged commit a67bd53 into python:3.7 Oct 3, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants