changeset 43708:cd822413b9aa

lock: refactor in preparation for next commit Differential Revision: https://phab.mercurial-scm.org/D7198
author Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
date Fri, 01 Nov 2019 19:59:07 -0400
parents da5ccc591cff
children 039fbd14d4e2
files mercurial/lock.py
diffstat 1 files changed, 13 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/lock.py	Fri Nov 15 11:30:33 2019 -0500
+++ b/mercurial/lock.py	Fri Nov 01 19:59:07 2019 -0400
@@ -330,27 +330,32 @@
                 return None
             raise
 
-    def _testlock(self, locker):
+    def _lockshouldbebroken(self, locker):
         if locker is None:
-            return None
+            return False
         try:
             host, pid = locker.split(b":", 1)
         except ValueError:
-            return locker
+            return False
         if host != lock._host:
-            return locker
+            return False
         try:
             pid = int(pid)
         except ValueError:
-            return locker
+            return False
         if procutil.testpid(pid):
+            return False
+        return True
+
+    def _testlock(self, locker):
+        if not self._lockshouldbebroken(locker):
             return locker
+
         # if locker dead, break lock.  must do this with another lock
         # held, or can race and break valid lock.
         try:
-            l = lock(self.vfs, self.f + b'.break', timeout=0)
-            self.vfs.unlink(self.f)
-            l.release()
+            with lock(self.vfs, self.f + b'.break', timeout=0):
+                self.vfs.unlink(self.f)
         except error.LockError:
             return locker