Mercurial > hg
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