summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Quinlan <brian@sweetapp.com>2014-02-01 00:49:04 (GMT)
committerBrian Quinlan <brian@sweetapp.com>2014-02-01 00:49:04 (GMT)
commit2b754f49a57c4f625b73e703456bd5ff04496416 (patch)
treec8ce61f78835316de57e2439318a0f2679ab6d6a
parent0ba5f0d3866a2bfa42cba3d809fc1c5d90faaf10 (diff)
downloadcpython-2b754f49a57c4f625b73e703456bd5ff04496416.zip
cpython-2b754f49a57c4f625b73e703456bd5ff04496416.tar.gz
cpython-2b754f49a57c4f625b73e703456bd5ff04496416.tar.bz2
Issue #20319: concurrent.futures.wait() can block forever even if Futures have completed
-rw-r--r--Lib/concurrent/futures/_base.py6
-rw-r--r--Misc/NEWS6
2 files changed, 10 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)
diff --git a/Misc/NEWS b/Misc/NEWS
index d4fb721..a62f748 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
----