diff --git a/lib/locking.py b/lib/locking.py index a5ce5fa443b1110642270ecda2c0fc8aa3995e14..f7a62d279cef892a4fd73b05101e99ebbf8e54b4 100644 --- a/lib/locking.py +++ b/lib/locking.py @@ -520,7 +520,7 @@ class SharedLock(object): """ return self.__pending[0] == cond - def __acquire_unlocked(self, shared=0, timeout=None): + def __acquire_unlocked(self, shared, timeout): """Acquire a shared lock. @param shared: whether to acquire in shared mode; by default an @@ -641,7 +641,10 @@ class SharedLock(object): acquired = self.__is_exclusive() if not acquired: - acquired = self.__acquire_unlocked(timeout) + acquired = self.__acquire_unlocked(0, timeout) + + assert self.__is_exclusive() and not self.__is_sharer(), \ + "Lock wasn't acquired in exclusive mode" if acquired: self.__deleted = True diff --git a/test/ganeti.locking_unittest.py b/test/ganeti.locking_unittest.py index 31c3c606d515ac2cfc5ad2c908708b73fbc976d0..79c48888ec7d059f3c5d555ffcd412ecf397f5e1 100755 --- a/test/ganeti.locking_unittest.py +++ b/test/ganeti.locking_unittest.py @@ -447,6 +447,9 @@ class TestSharedLock(_ThreadedTestCase): self.assertRaises(errors.LockError, self.sl.acquire, shared=1) self.assertRaises(errors.LockError, self.sl.delete) + def testDeleteTimeout(self): + self.sl.delete(timeout=60) + def testNoDeleteIfSharer(self): self.sl.acquire(shared=1) self.assertRaises(AssertionError, self.sl.delete)