[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