--- a/Lib/threading.py 2010-10-28 22:58:02.000000000 +0200 +++ b/Lib/threading.py 2011-03-29 22:45:30.095664945 +0200 @@ -309,33 +309,31 @@ def acquire(self, blocking=1): rc = False - self.__cond.acquire() - while self.__value == 0: - if not blocking: - break - if __debug__: - self._note("%s.acquire(%s): blocked waiting, value=%s", - self, blocking, self.__value) - self.__cond.wait() - else: - self.__value = self.__value - 1 - if __debug__: - self._note("%s.acquire: success, value=%s", - self, self.__value) - rc = True - self.__cond.release() + with self.__cond: + while self.__value == 0: + if not blocking: + break + if __debug__: + self._note("%s.acquire(%s): blocked waiting, value=%s", + self, blocking, self.__value) + self.__cond.wait() + else: + self.__value = self.__value - 1 + if __debug__: + self._note("%s.acquire: success, value=%s", + self, self.__value) + rc = True return rc __enter__ = acquire def release(self): - self.__cond.acquire() - self.__value = self.__value + 1 - if __debug__: - self._note("%s.release: success, value=%s", - self, self.__value) - self.__cond.notify() - self.__cond.release() + with self.__cond: + self.__value = self.__value + 1 + if __debug__: + self._note("%s.release: success, value=%s", + self, self.__value) + self.__cond.notify() def __exit__(self, t, v, tb): self.release() @@ -374,27 +372,18 @@ is_set = isSet def set(self): - self.__cond.acquire() - try: + with self.__cond: self.__flag = True self.__cond.notify_all() - finally: - self.__cond.release() def clear(self): - self.__cond.acquire() - try: + with self.__cond: self.__flag = False - finally: - self.__cond.release() def wait(self, timeout=None): - self.__cond.acquire() - try: + with self.__cond: if not self.__flag: self.__cond.wait(timeout) - finally: - self.__cond.release() # Helper to generate new thread names _counter = 0