diff -r dbad4564cd12 Lib/concurrent/futures/_base.py --- a/Lib/concurrent/futures/_base.py Mon Jan 27 12:18:49 2014 +0100 +++ b/Lib/concurrent/futures/_base.py Mon Jan 27 07:43:41 2014 -0500 @@ -225,7 +225,8 @@ 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 @@ 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)