• Elvis Pranskevichus's avatar
    bpo-34872: Fix self-cancellation in C implementation of asyncio.Task (GH-9679) · 0c797a6a
    Elvis Pranskevichus authored
    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.
    0c797a6a
test_tasks.py 103 KB