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)