bpo-36613: call remove_done_callback if exception (GH-12800)
Call remove_done_callback() in finally block.
https://bugs.python.org/issue36613
diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py
index d850837..007a459 100644
--- a/Lib/asyncio/tasks.py
+++ b/Lib/asyncio/tasks.py
@@ -495,10 +495,11 @@
finally:
if timeout_handle is not None:
timeout_handle.cancel()
+ for f in fs:
+ f.remove_done_callback(_on_completion)
done, pending = set(), set()
for f in fs:
- f.remove_done_callback(_on_completion)
if f.done():
done.add(f)
else: