[Python-checkins] CVS: python/dist/src/Lib threading.py,1.11,1.12
Tim Peters
tim_one@users.sourceforge.net
Mon, 02 Apr 2001 13:15:59 -0700
Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv11514/python/dist/src/Lib
Modified Files:
threading.py
Log Message:
SF bug [#410708] Condition.wait() and KeyboardInterrupt.
http://sourceforge.net/tracker/?func=detail&aid=410708&group_id=5470&atid=105470
Added try/finally around Condition.wait() guts, so that the lock state gets
restored at the end no matter what happens.
Index: threading.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/threading.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -r1.11 -r1.12
*** threading.py 2001/01/15 03:26:36 1.11
--- threading.py 2001/04/02 20:15:57 1.12
***************
*** 186,214 ****
self.__waiters.append(waiter)
saved_state = self._release_save()
! if timeout is None:
! waiter.acquire()
! if __debug__:
! self._note("%s.wait(): got it", self)
! else:
! endtime = _time() + timeout
! delay = 0.000001 # 1 usec
! while 1:
! gotit = waiter.acquire(0)
! if gotit or _time() >= endtime:
! break
! _sleep(delay)
! if delay < 1.0:
! delay = delay * 2.0
! if not gotit:
if __debug__:
! self._note("%s.wait(%s): timed out", self, timeout)
! try:
! self.__waiters.remove(waiter)
! except ValueError:
! pass
else:
! if __debug__:
! self._note("%s.wait(%s): got it", self, timeout)
! self._acquire_restore(saved_state)
def notify(self, n=1):
--- 186,216 ----
self.__waiters.append(waiter)
saved_state = self._release_save()
! try: # restore state no matter what (e.g., KeyboardInterrupt)
! if timeout is None:
! waiter.acquire()
if __debug__:
! self._note("%s.wait(): got it", self)
else:
! endtime = _time() + timeout
! delay = 0.000001 # 1 usec
! while 1:
! gotit = waiter.acquire(0)
! if gotit or _time() >= endtime:
! break
! _sleep(delay)
! if delay < 1.0:
! delay = delay * 2.0
! if not gotit:
! if __debug__:
! self._note("%s.wait(%s): timed out", self, timeout)
! try:
! self.__waiters.remove(waiter)
! except ValueError:
! pass
! else:
! if __debug__:
! self._note("%s.wait(%s): got it", self, timeout)
! finally:
! self._acquire_restore(saved_state)
def notify(self, n=1):