]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-36613: call remove_done_callback if exception (GH-12800)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Fri, 3 May 2019 15:35:52 +0000 (08:35 -0700)
committerGitHub <noreply@github.com>
Fri, 3 May 2019 15:35:52 +0000 (08:35 -0700)
Call remove_done_callback() in finally block.

https://bugs.python.org/issue36613
(cherry picked from commit c1964e9e2177eabe821f3e4243be8b99e0d2d542)

Co-authored-by: gescheit <gescheit12@gmail.com>
Lib/asyncio/tasks.py
Misc/NEWS.d/next/Library/2019-04-12-13-52-15.bpo-36613.hqT1qn.rst [new file with mode: 0644]

index 416c346be2ecd17b8bc8e020a985b33f9ecca181..2af4f32a51a4a974766e281b606cedfa505c3ee6 100644 (file)
@@ -457,10 +457,11 @@ async def _wait(fs, timeout, return_when, loop):
     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:
diff --git a/Misc/NEWS.d/next/Library/2019-04-12-13-52-15.bpo-36613.hqT1qn.rst b/Misc/NEWS.d/next/Library/2019-04-12-13-52-15.bpo-36613.hqT1qn.rst
new file mode 100644 (file)
index 0000000..8828dcc
--- /dev/null
@@ -0,0 +1 @@
+Fix :mod:`asyncio` wait() not removing callback if exception
\ No newline at end of file