Issue #20319: concurrent.futures.wait() can block forever even if Futures have completed

Applied 403f8cf425
This commit is contained in:
leojay 2015-07-27 01:21:05 -07:00
parent 35e77648b7
commit a6b180a71f
1 changed files with 4 additions and 2 deletions

View File

@ -227,7 +227,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')
@ -274,7 +275,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)