diff options
author | Brian Quinlan <brian@sweetapp.com> | 2014-02-01 00:49:04 (GMT) |
---|---|---|
committer | Brian Quinlan <brian@sweetapp.com> | 2014-02-01 00:49:04 (GMT) |
commit | 2b754f49a57c4f625b73e703456bd5ff04496416 (patch) | |
tree | c8ce61f78835316de57e2439318a0f2679ab6d6a /Lib/concurrent/futures | |
parent | 0ba5f0d3866a2bfa42cba3d809fc1c5d90faaf10 (diff) | |
download | cpython-2b754f49a57c4f625b73e703456bd5ff04496416.zip cpython-2b754f49a57c4f625b73e703456bd5ff04496416.tar.gz cpython-2b754f49a57c4f625b73e703456bd5ff04496416.tar.bz2 |
Issue #20319: concurrent.futures.wait() can block forever even if Futures have completed
Diffstat (limited to 'Lib/concurrent/futures')
-rw-r--r-- | Lib/concurrent/futures/_base.py | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/Lib/concurrent/futures/_base.py b/Lib/concurrent/futures/_base.py index c3b1f01..acd05d0 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) |