diff -r 64bb01bce12c Lib/asyncio/locks.py --- a/Lib/asyncio/locks.py Sun Nov 30 20:39:04 2014 +0200 +++ b/Lib/asyncio/locks.py Mon Dec 01 11:51:33 2014 +0900 @@ -307,7 +307,13 @@ self._waiters.remove(fut) finally: - yield from self.acquire() + # Must reacquire lock even if wait is cancelled + while True: + try: + yield from self.acquire() + break + except futures.CancelledError: + pass @coroutine def wait_for(self, predicate):