[PATCH 2 of 3] lock releasing in core hg now uses lock.release instead of the gc
Ronny Pfannschmidt
Ronny.Pfannschmidt at gmx.de
Fri Apr 17 08:36:16 CDT 2009
# HG changeset patch
# User Ronny Pfannschmidt <Ronny.Pfannschmidt at gmx.de>
# Date 1239975325 -7200
# Node ID bf282c4ce9ddc5d06e9f35dc2ba4a7f85a17833b
# Parent 568b3916a873f531c47a3f3bc1485f120993c0c4
lock releasing in core hg now uses lock.release instead of the gc
diff -r 568b3916a873 -r bf282c4ce9dd mercurial/commands.py
--- a/mercurial/commands.py Fri Apr 17 15:34:13 2009 +0200
+++ b/mercurial/commands.py Fri Apr 17 15:35:25 2009 +0200
@@ -678,7 +678,7 @@
try:
return cmdutil.copy(ui, repo, pats, opts)
finally:
- del wlock
+ wlock.release()
def debugancestor(ui, repo, *args):
"""find the ancestor revision of two revisions in a given index"""
@@ -741,7 +741,7 @@
try:
repo.dirstate.rebuild(ctx.node(), ctx.manifest())
finally:
- del wlock
+ wlock.release()
def debugcheckstate(ui, repo):
"""validate the correctness of the current dirstate"""
@@ -810,7 +810,7 @@
try:
repo.dirstate.setparents(repo.lookup(rev1), repo.lookup(rev2))
finally:
- del wlock
+ wlock.release()
def debugstate(ui, repo, nodates=None):
"""show the contents of the current dirstate"""
@@ -1737,7 +1737,10 @@
finally:
os.unlink(tmpname)
finally:
- del lock, wlock
+ if lock is not None:
+ lock.release()
+ if wlock is not None:
+ wlock.release()
def incoming(ui, repo, source="default", **opts):
"""show new changesets found in source
@@ -2349,7 +2352,7 @@
try:
return cmdutil.copy(ui, repo, pats, opts, rename=True)
finally:
- del wlock
+ wlock.release()
def resolve(ui, repo, *pats, **opts):
"""retry file merges from a merge or update
@@ -2621,7 +2624,7 @@
normal(f)
finally:
- del wlock
+ wlock.release()
def rollback(ui, repo):
"""roll back the last transaction
@@ -2921,7 +2924,8 @@
gen = changegroup.readbundle(f, fname)
modheads = repo.addchangegroup(gen, 'unbundle', 'bundle:' + fname)
finally:
- del lock
+ if lock is not None:
+ lock.release()
return postincoming(ui, repo, modheads, opts.get('update'), None)
diff -r 568b3916a873 -r bf282c4ce9dd mercurial/hbisect.py
--- a/mercurial/hbisect.py Fri Apr 17 15:34:13 2009 +0200
+++ b/mercurial/hbisect.py Fri Apr 17 15:35:25 2009 +0200
@@ -140,5 +140,5 @@
f.write("%s %s\n" % (kind, hex(node)))
f.rename()
finally:
- del wlock
+ wlock.release()
diff -r 568b3916a873 -r bf282c4ce9dd mercurial/hg.py
--- a/mercurial/hg.py Fri Apr 17 15:34:13 2009 +0200
+++ b/mercurial/hg.py Fri Apr 17 15:35:25 2009 +0200
@@ -142,7 +142,7 @@
self.dir_ = dir_
def close(self):
self.dir_ = None
- def __del__(self):
+ def cleanup(self):
if self.dir_:
self.rmtree(self.dir_, True)
@@ -249,7 +249,12 @@
return src_repo, dest_repo
finally:
- del src_lock, dest_lock, dir_cleanup
+ if src_lock is not None:
+ src_lock.release()
+ if dest_lock is not None:
+ dest_lock.release()
+ if dir_cleanup is not None:
+ dir_cleanup.cleanup()
def _showstats(repo, stats):
stats = ((stats[0], _("updated")),
diff -r 568b3916a873 -r bf282c4ce9dd mercurial/hgweb/protocol.py
--- a/mercurial/hgweb/protocol.py Fri Apr 17 15:34:13 2009 +0200
+++ b/mercurial/hgweb/protocol.py Fri Apr 17 15:35:25 2009 +0200
@@ -163,7 +163,7 @@
req.respond(HTTP_OK, HGTYPE)
return '%d\n%s' % (ret, val),
finally:
- del lock
+ lock.release()
except ValueError, inst:
raise ErrorResponse(HTTP_OK, inst)
except (OSError, IOError), inst:
diff -r 568b3916a873 -r bf282c4ce9dd mercurial/localrepo.py
--- a/mercurial/localrepo.py Fri Apr 17 15:34:13 2009 +0200
+++ b/mercurial/localrepo.py Fri Apr 17 15:35:25 2009 +0200
@@ -619,7 +619,7 @@
return tr
def recover(self):
- l = self.lock()
+ lock = self.lock()
try:
if os.path.exists(self.sjoin("journal")):
self.ui.status(_("rolling back interrupted transaction\n"))
@@ -630,7 +630,7 @@
self.ui.warn(_("no interrupted transaction available\n"))
return False
finally:
- del l
+ lock.release()
def rollback(self):
wlock = lock = None
@@ -653,7 +653,10 @@
else:
self.ui.warn(_("no rollback information available\n"))
finally:
- del lock, wlock
+ if lock is not None:
+ lock.release()
+ if wlock is not None:
+ wlock.release()
def invalidate(self):
for a in "changelog manifest".split():
@@ -693,6 +696,7 @@
return l
def wlock(self, wait=True):
+
if self._wlockref and self._wlockref():
l = self._wlockref()
l.lock()
@@ -834,7 +838,10 @@
return r
finally:
- del lock, wlock
+ if lock is not None:
+ lock.release()
+ if wlock is not None:
+ wlock.release()
def commitctx(self, ctx):
"""Add a new revision to current repository.
@@ -850,7 +857,10 @@
empty_ok=True, use_dirstate=False,
update_dirstate=False)
finally:
- del lock, wlock
+ if lock is not None:
+ lock.release()
+ if wlock is not None:
+ wlock.release()
def _commitctx(self, wctx, force=False, force_editor=False, empty_ok=False,
use_dirstate=True, update_dirstate=True):
@@ -1071,7 +1081,8 @@
except error.LockError:
pass
finally:
- del wlock
+ if wlock is not None:
+ wlock.release()
if not parentworking:
mf1 = mfmatches(ctx1)
@@ -1137,7 +1148,7 @@
self.dirstate.add(f)
return rejected
finally:
- del wlock
+ wlock.release()
def forget(self, list):
wlock = self.wlock()
@@ -1148,7 +1159,7 @@
else:
self.dirstate.forget(f)
finally:
- del wlock
+ wlock.release()
def remove(self, list, unlink=False):
wlock = None
@@ -1171,7 +1182,8 @@
else:
self.dirstate.remove(f)
finally:
- del wlock
+ if wlock is not None:
+ wlock.release()
def undelete(self, list):
wlock = None
@@ -1188,10 +1200,10 @@
self.wwrite(f, t, m.flags(f))
self.dirstate.normal(f)
finally:
- del wlock
+ if wlock is not None:
+ wlock.release()
def copy(self, source, dest):
- wlock = None
try:
p = self.wjoin(dest)
if not (os.path.exists(p) or os.path.islink(p)):
@@ -1205,7 +1217,8 @@
self.dirstate.add(dest)
self.dirstate.copy(source, dest)
finally:
- del wlock
+ if wlock is not None:
+ wlock.release()
def heads(self, start=None, closed=True):
heads = self.changelog.heads(start)
@@ -1499,7 +1512,7 @@
cg = remote.changegroupsubset(fetch, heads, 'pull')
return self.addchangegroup(cg, 'pull', remote.url())
finally:
- del lock
+ lock.release()
def push(self, remote, force=False, revs=None):
# there are two ways to push to remote repo:
@@ -1580,7 +1593,7 @@
return remote.addchangegroup(cg, 'push', self.url())
return ret[1]
finally:
- del lock
+ lock.release()
def push_unbundle(self, remote, force, revs):
# local repo finds heads on server, finds out what revs it
diff -r 568b3916a873 -r bf282c4ce9dd mercurial/merge.py
--- a/mercurial/merge.py Fri Apr 17 15:34:13 2009 +0200
+++ b/mercurial/merge.py Fri Apr 17 15:35:25 2009 +0200
@@ -504,4 +504,4 @@
return stats
finally:
- del wlock
+ wlock.release()
diff -r 568b3916a873 -r bf282c4ce9dd mercurial/sshserver.py
--- a/mercurial/sshserver.py Fri Apr 17 15:34:13 2009 +0200
+++ b/mercurial/sshserver.py Fri Apr 17 15:35:25 2009 +0200
@@ -37,7 +37,11 @@
self.fout.flush()
def serve_forever(self):
- while self.serve_one(): pass
+ try:
+ while self.serve_one(): pass
+ finally:
+ if self.lock is not None:
+ self.lock.release()
sys.exit(0)
def serve_one(self):
diff -r 568b3916a873 -r bf282c4ce9dd mercurial/streamclone.py
--- a/mercurial/streamclone.py Fri Apr 17 15:34:13 2009 +0200
+++ b/mercurial/streamclone.py Fri Apr 17 15:35:25 2009 +0200
@@ -41,16 +41,15 @@
entries = []
total_bytes = 0
try:
- l = None
+ # get consistent snapshot of repo, lock during scan
+ lock = repo.lock()
try:
repo.ui.debug(_('scanning\n'))
- # get consistent snapshot of repo, lock during scan
- l = repo.lock()
for name, ename, size in repo.store.walk():
entries.append((name, size))
total_bytes += size
finally:
- del l
+ lock.release()
except error.LockError:
raise StreamException(2)
diff -r 568b3916a873 -r bf282c4ce9dd mercurial/verify.py
--- a/mercurial/verify.py Fri Apr 17 15:34:13 2009 +0200
+++ b/mercurial/verify.py Fri Apr 17 15:35:25 2009 +0200
@@ -14,7 +14,7 @@
try:
return _verify(repo)
finally:
- del lock
+ lock.release()
def _verify(repo):
mflinkrevs = {}
More information about the Mercurial-devel
mailing list