Skip to content

Conversation

@elprans
Copy link
Contributor

@elprans elprans commented Oct 3, 2018

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)

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)
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.

5 participants