summaryrefslogtreecommitdiffstats
path: root/Lib/asyncio/tasks.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2022-02-28 23:15:56 (GMT)
committerGitHub <noreply@github.com>2022-02-28 23:15:56 (GMT)
commit7d611b4cabaf7925f5f94daddf711d54aeae2cf9 (patch)
tree4c8a48847d780e1a2632a15d8ae2b551bc224ad8 /Lib/asyncio/tasks.py
parent08deed1af56bec8668c6cb4d5cfd89e393e1fe5e (diff)
downloadcpython-7d611b4cabaf7925f5f94daddf711d54aeae2cf9.zip
cpython-7d611b4cabaf7925f5f94daddf711d54aeae2cf9.tar.gz
cpython-7d611b4cabaf7925f5f94daddf711d54aeae2cf9.tar.bz2
bpo-46771: Remove two controversial lines from Task.cancel() (GH-31623)
Also from the _asyncio C accelerator module, and adjust one test that the change caused to fail. For more discussion see the discussion starting here: https://github.com/python/cpython/pull/31394#issuecomment-1053545331 (Basically, @asvetlov proposed to return False from cancel() when there is already a pending cancellation, and I went along, even though it wasn't necessary for the task group implementation, and @agronholm has come up with a counterexample that fails because of this change. So now I'm changing it back to the old semantics (but still bumping the counter) until we can have a proper discussion about this.)
Diffstat (limited to 'Lib/asyncio/tasks.py')
-rw-r--r--Lib/asyncio/tasks.py7
1 files changed, 5 insertions, 2 deletions
diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py
index 38c2385..059143f 100644
--- a/Lib/asyncio/tasks.py
+++ b/Lib/asyncio/tasks.py
@@ -205,8 +205,11 @@ class Task(futures._PyFuture): # Inherit Python Task implementation
if self.done():
return False
self._num_cancels_requested += 1
- if self._num_cancels_requested > 1:
- return False
+ # These two lines are controversial. See discussion starting at
+ # https://github.com/python/cpython/pull/31394#issuecomment-1053545331
+ # Also remember that this is duplicated in _asynciomodule.c.
+ # if self._num_cancels_requested > 1:
+ # return False
if self._fut_waiter is not None:
if self._fut_waiter.cancel(msg=msg):
# Leave self._fut_waiter; it may be a Task that