mirror of
https://github.com/python/cpython.git
synced 2025-08-22 09:45:06 +00:00
GH-95289: Always call uncancel() when parent cancellation is requested (#95602)
Co-authored-by: Guido van Rossum <guido@python.org>
This commit is contained in:
parent
42b102bbf9
commit
2fef27589e
3 changed files with 42 additions and 9 deletions
|
@ -54,21 +54,22 @@ class TaskGroup:
|
|||
|
||||
async def __aexit__(self, et, exc, tb):
|
||||
self._exiting = True
|
||||
propagate_cancellation_error = None
|
||||
|
||||
if (exc is not None and
|
||||
self._is_base_error(exc) and
|
||||
self._base_error is None):
|
||||
self._base_error = exc
|
||||
|
||||
if et is not None:
|
||||
if et is exceptions.CancelledError:
|
||||
if self._parent_cancel_requested and not self._parent_task.uncancel():
|
||||
# Do nothing, i.e. swallow the error.
|
||||
pass
|
||||
else:
|
||||
propagate_cancellation_error = exc
|
||||
propagate_cancellation_error = \
|
||||
exc if et is exceptions.CancelledError else None
|
||||
if self._parent_cancel_requested:
|
||||
# If this flag is set we *must* call uncancel().
|
||||
if self._parent_task.uncancel() == 0:
|
||||
# If there are no pending cancellations left,
|
||||
# don't propagate CancelledError.
|
||||
propagate_cancellation_error = None
|
||||
|
||||
if et is not None:
|
||||
if not self._aborting:
|
||||
# Our parent task is being cancelled:
|
||||
#
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue