summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2013-04-22 22:51:43 +0300
committerSerhiy Storchaka <storchaka@gmail.com>2013-04-22 22:51:43 +0300
commit1685a2870886639377a90fbcd85b25af4aee3341 (patch)
tree40f92105ed6afcfdef0a7b5696e420587805c29f
parent44df9d8220fe78be50691ad4da4cbd6042e8111b (diff)
downloadcpython-1685a2870886639377a90fbcd85b25af4aee3341.tar.gz
Issue #11714: Use 'with' statements to assure a Semaphore releases a
condition variable. Original patch by Thomas Rachel.
-rw-r--r--Lib/threading.py38
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
3 files changed, 22 insertions, 20 deletions
diff --git a/Lib/threading.py b/Lib/threading.py
index 46df676f24..ab9302c153 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -248,31 +248,29 @@ class Semaphore:
raise ValueError("can't specify timeout for non-blocking acquire")
rc = False
endtime = None
- self._cond.acquire()
- while self._value == 0:
- if not blocking:
- break
- if timeout is not None:
- if endtime is None:
- endtime = _time() + timeout
- else:
- timeout = endtime - _time()
- if timeout <= 0:
- break
- self._cond.wait(timeout)
- else:
- self._value = self._value - 1
- rc = True
- self._cond.release()
+ with self._cond:
+ while self._value == 0:
+ if not blocking:
+ break
+ if timeout is not None:
+ if endtime is None:
+ endtime = _time() + timeout
+ else:
+ timeout = endtime - _time()
+ if timeout <= 0:
+ break
+ self._cond.wait(timeout)
+ else:
+ self._value = self._value - 1
+ rc = True
return rc
__enter__ = acquire
def release(self):
- self._cond.acquire()
- self._value = self._value + 1
- self._cond.notify()
- self._cond.release()
+ with self._cond:
+ self._value = self._value + 1
+ self._cond.notify()
def __exit__(self, t, v, tb):
self.release()
diff --git a/Misc/ACKS b/Misc/ACKS
index 9961aa560e..36adf7d04f 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -970,6 +970,7 @@ Fernando Pérez
Pierre Quentel
Brian Quinlan
Anders Qvist
+Thomas Rachel
Jérôme Radix
Burton Radons
Jeff Ramnani
diff --git a/Misc/NEWS b/Misc/NEWS
index e71b6ed016..60945c6da7 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -36,6 +36,9 @@ Core and Builtins
Library
-------
+- Issue #11714: Use 'with' statements to assure a Semaphore releases a
+ condition variable. Original patch by Thomas Rachel.
+
- Issue #17795: Reverted backwards-incompatible change in SysLogHandler with
Unix domain sockets.