From: Brian Quinlan Date: Sat, 1 Feb 2014 00:49:04 +0000 (+1100) Subject: Issue #20319: concurrent.futures.wait() can block forever even if Futures have completed X-Git-Tag: v3.4.0rc1~146 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2b754f49a57c4f625b73e703456bd5ff04496416;p=thirdparty%2FPython%2Fcpython.git Issue #20319: concurrent.futures.wait() can block forever even if Futures have completed --- diff --git a/Lib/concurrent/futures/_base.py b/Lib/concurrent/futures/_base.py index c3b1f017e0e2..acd05d0b2aab 100644 --- a/Lib/concurrent/futures/_base.py +++ b/Lib/concurrent/futures/_base.py @@ -225,7 +225,8 @@ def as_completed(fs, timeout=None): finally: for f in fs: - f._waiters.remove(waiter) + with f._condition: + f._waiters.remove(waiter) DoneAndNotDoneFutures = collections.namedtuple( 'DoneAndNotDoneFutures', 'done not_done') @@ -272,7 +273,8 @@ def wait(fs, timeout=None, return_when=ALL_COMPLETED): waiter.event.wait(timeout) for f in fs: - f._waiters.remove(waiter) + with f._condition: + f._waiters.remove(waiter) done.update(waiter.finished_futures) return DoneAndNotDoneFutures(done, set(fs) - done) diff --git a/Misc/NEWS b/Misc/NEWS index d4fb7210b690..a62f74889404 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -69,6 +69,12 @@ Library - Issue #17481: inspect.getfullargspec() now uses inspect.signature() API. +- Issue #15304: concurrent.futures.wait() can block forever even if + Futures have completed. Patch by Glenn Langford. + +Fix warning message when `os.chdir()` fails inside + `test.support.temp_cwd()`. Patch by Chris Jerdonek. + IDLE ----