mirror of https://github.com/python/cpython
Issue #11915: threading.RLock()._release_save() raises a RuntimeError if the
lock was not acquired.
This commit is contained in:
parent
a82aa55b5e
commit
c2824d41c3
|
@ -247,6 +247,7 @@ class RLockTests(BaseLockTests):
|
|||
# Cannot release an unacquired lock
|
||||
lock = self.locktype()
|
||||
self.assertRaises(RuntimeError, lock.release)
|
||||
self.assertRaises(RuntimeError, lock._release_save)
|
||||
lock.acquire()
|
||||
lock.acquire()
|
||||
lock.release()
|
||||
|
@ -254,6 +255,7 @@ class RLockTests(BaseLockTests):
|
|||
lock.release()
|
||||
lock.release()
|
||||
self.assertRaises(RuntimeError, lock.release)
|
||||
self.assertRaises(RuntimeError, lock._release_save)
|
||||
|
||||
def test_different_thread(self):
|
||||
# Cannot release from a different thread
|
||||
|
|
|
@ -157,6 +157,8 @@ class _RLock(_Verbose):
|
|||
def _release_save(self):
|
||||
if __debug__:
|
||||
self._note("%s._release_save()", self)
|
||||
if self._count == 0:
|
||||
raise RuntimeError("cannot release un-acquired lock")
|
||||
count = self._count
|
||||
self._count = 0
|
||||
owner = self._owner
|
||||
|
|
|
@ -113,6 +113,9 @@ Core and Builtins
|
|||
Library
|
||||
-------
|
||||
|
||||
- Issue #11915: threading.RLock()._release_save() raises a RuntimeError if the
|
||||
lock was not acquired.
|
||||
|
||||
- Issue #11258: Speed up ctypes.util.find_library() under Linux by a factor
|
||||
of 5 to 10. Initial patch by Jonas H.
|
||||
|
||||
|
|
|
@ -414,6 +414,12 @@ rlock_release_save(rlockobject *self)
|
|||
long owner;
|
||||
unsigned long count;
|
||||
|
||||
if (self->rlock_count == 0) {
|
||||
PyErr_SetString(PyExc_RuntimeError,
|
||||
"cannot release un-acquired lock");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
owner = self->rlock_owner;
|
||||
count = self->rlock_count;
|
||||
self->rlock_count = 0;
|
||||
|
|
Loading…
Reference in New Issue