diff -r fae92299eb68 Lib/concurrent/futures/_base.py --- a/Lib/concurrent/futures/_base.py Sat Jan 25 13:27:53 2014 -0500 +++ b/Lib/concurrent/futures/_base.py Sun Jan 26 07:57:46 2014 -0500 @@ -222,8 +222,9 @@ pending.remove(future) finally: - for f in fs: - f._waiters.remove(waiter) + for f in sorted(fs, key=id): + with f._condition: + f._waiters.remove(waiter) DoneAndNotDoneFutures = collections.namedtuple( 'DoneAndNotDoneFutures', 'done not_done') @@ -269,8 +270,9 @@ waiter = _create_and_install_waiters(fs, return_when) waiter.event.wait(timeout) - for f in fs: - f._waiters.remove(waiter) + for f in sorted(fs, key=id): + with f._condition: + f._waiters.remove(waiter) done.update(waiter.finished_futures) return DoneAndNotDoneFutures(done, set(fs) - done)