D7198: lock: refactor in preparation for next commit
valentin.gatienbaron (Valentin Gatien-Baron)
phabricator at mercurial-scm.org
Sat Nov 2 01:51:24 UTC 2019
valentin.gatienbaron created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D7198
AFFECTED FILES
mercurial/lock.py
CHANGE DETAILS
diff --git a/mercurial/lock.py b/mercurial/lock.py
--- a/mercurial/lock.py
+++ b/mercurial/lock.py
@@ -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
To: valentin.gatienbaron, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list