Skip to content

Cancellation leaks out of asyncio.TaskGroup on 3.12 when using eager tasks #128588

Description

@graingert

Bug report

Bug description:

importsysimportasyncioifsys.platform=="win32":
EventLoop=asyncio.ProactorEventLoopelse:
EventLoop=asyncio.SelectorEventLoopasyncdefdemo():
classMyError(Exception):
passasyncdefthrow_error():
raiseMyErrortry:
asyncwithasyncio.TaskGroup() astg:
tg.create_task(throw_error())
except* MyError:
passdefloop_factory():
loop=EventLoop()
loop.set_task_factory(asyncio.eager_task_factory)
returnloopasyncio.run(demo(), loop_factory=loop_factory)

results in:

Traceback (most recent call last):
File "/home/graingert/projects/anyio/demo.py", line 29, in <module>
asyncio.run(demo(), loop_factory=loop_factory)
File "/usr/lib/python3.12/asyncio/runners.py", line 194, in runreturn runner.run(main)
^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/asyncio/runners.py", line 118, in runreturnself._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/asyncio/base_events.py", line 687, in run_until_completereturn future.result()
^^^^^^^^^^^^^^^
asyncio.exceptions.CancelledError

CPython versions tested on:

3.12

Operating systems tested on:

Linux

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.12only security fixestopic-asynciotype-bugAn unexpected behavior, bug, or error

    Projects

    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions