mirror of https://github.com/python/cpython
Issue #11714: Use 'with' statements to assure a Semaphore releases a
condition variable. Original patch by Thomas Rachel.
This commit is contained in:
commit
b00b596c05
|
@ -253,31 +253,29 @@ class Semaphore:
|
||||||
raise ValueError("can't specify timeout for non-blocking acquire")
|
raise ValueError("can't specify timeout for non-blocking acquire")
|
||||||
rc = False
|
rc = False
|
||||||
endtime = None
|
endtime = None
|
||||||
self._cond.acquire()
|
with self._cond:
|
||||||
while self._value == 0:
|
while self._value == 0:
|
||||||
if not blocking:
|
if not blocking:
|
||||||
break
|
break
|
||||||
if timeout is not None:
|
if timeout is not None:
|
||||||
if endtime is None:
|
if endtime is None:
|
||||||
endtime = _time() + timeout
|
endtime = _time() + timeout
|
||||||
else:
|
else:
|
||||||
timeout = endtime - _time()
|
timeout = endtime - _time()
|
||||||
if timeout <= 0:
|
if timeout <= 0:
|
||||||
break
|
break
|
||||||
self._cond.wait(timeout)
|
self._cond.wait(timeout)
|
||||||
else:
|
else:
|
||||||
self._value -= 1
|
self._value -= 1
|
||||||
rc = True
|
rc = True
|
||||||
self._cond.release()
|
|
||||||
return rc
|
return rc
|
||||||
|
|
||||||
__enter__ = acquire
|
__enter__ = acquire
|
||||||
|
|
||||||
def release(self):
|
def release(self):
|
||||||
self._cond.acquire()
|
with self._cond:
|
||||||
self._value += 1
|
self._value += 1
|
||||||
self._cond.notify()
|
self._cond.notify()
|
||||||
self._cond.release()
|
|
||||||
|
|
||||||
def __exit__(self, t, v, tb):
|
def __exit__(self, t, v, tb):
|
||||||
self.release()
|
self.release()
|
||||||
|
|
|
@ -993,6 +993,7 @@ Fernando Pérez
|
||||||
Pierre Quentel
|
Pierre Quentel
|
||||||
Brian Quinlan
|
Brian Quinlan
|
||||||
Anders Qvist
|
Anders Qvist
|
||||||
|
Thomas Rachel
|
||||||
Ram Rachum
|
Ram Rachum
|
||||||
Jérôme Radix
|
Jérôme Radix
|
||||||
Burton Radons
|
Burton Radons
|
||||||
|
|
|
@ -49,6 +49,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #11714: Use 'with' statements to assure a Semaphore releases a
|
||||||
|
condition variable. Original patch by Thomas Rachel.
|
||||||
|
|
||||||
- Issue #16624: `subprocess.check_output` now accepts an `input` argument,
|
- Issue #16624: `subprocess.check_output` now accepts an `input` argument,
|
||||||
allowing the subprocess's stdin to be provided as a (byte) string.
|
allowing the subprocess's stdin to be provided as a (byte) string.
|
||||||
Patch by Zack Weinberg.
|
Patch by Zack Weinberg.
|
||||||
|
|
Loading…
Reference in New Issue