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