diff --git a/hgext/convert/hg.py b/hgext/convert/hg.py
index dbf20df40eb1ca1780faf0fe326fa2f9a4c7a5f9_aGdleHQvY29udmVydC9oZy5weQ==..6ee71f78497c5647fe0b88d37edd9fdaedb812c0_aGdleHQvY29udmVydC9oZy5weQ== 100644
--- a/hgext/convert/hg.py
+++ b/hgext/convert/hg.py
@@ -56,8 +56,8 @@
 
     def after(self):
         self.ui.debug(_('run hg sink post-conversion action\n'))
-        self.lock = None
-        self.wlock = None
+        self.lock.release()
+        self.wlock.release()
 
     def revmapfile(self):
         return os.path.join(self.path, ".hg", "shamap")
diff --git a/hgext/fetch.py b/hgext/fetch.py
index dbf20df40eb1ca1780faf0fe326fa2f9a4c7a5f9_aGdleHQvZmV0Y2gucHk=..6ee71f78497c5647fe0b88d37edd9fdaedb812c0_aGdleHQvZmV0Y2gucHk= 100644
--- a/hgext/fetch.py
+++ b/hgext/fetch.py
@@ -9,6 +9,7 @@
 from mercurial.i18n import _
 from mercurial.node import nullid, short
 from mercurial import commands, cmdutil, hg, util, url
+from mercurial.lock import release
 
 def fetch(ui, repo, source='default', **opts):
     '''pull changes from a remote repository, merge new changes if needed.
@@ -132,7 +133,7 @@
                                            short(n)))
 
     finally:
-        del lock, wlock
+        release(lock, wlock)
 
 cmdtable = {
     'fetch':
diff --git a/hgext/keyword.py b/hgext/keyword.py
index dbf20df40eb1ca1780faf0fe326fa2f9a4c7a5f9_aGdleHQva2V5d29yZC5weQ==..6ee71f78497c5647fe0b88d37edd9fdaedb812c0_aGdleHQva2V5d29yZC5weQ== 100644
--- a/hgext/keyword.py
+++ b/hgext/keyword.py
@@ -83,6 +83,7 @@
 from mercurial import commands, cmdutil, dispatch, filelog, revlog, extensions
 from mercurial import patch, localrepo, templater, templatefilters, util
 from mercurial.hgweb import webcommands
+from mercurial.lock import release
 from mercurial.node import nullid, hex
 from mercurial.i18n import _
 import re, shutil, tempfile, time
@@ -273,8 +274,7 @@
         lock = repo.lock()
         kwt.overwrite(None, expand, status[6])
     finally:
-        del wlock, lock
-
+        release(lock, wlock)
 
 def demo(ui, repo, *args, **opts):
     '''print [keywordmaps] configuration and an expansion example
@@ -487,7 +487,7 @@
                     repo.hook('commit', node=n, parent1=_p1, parent2=_p2)
                 return n
             finally:
-                del wlock, lock
+                release(lock, wlock)
 
     # monkeypatches
     def kwpatchfile_init(orig, self, ui, fname, opener, missing=False):
diff --git a/hgext/mq.py b/hgext/mq.py
index dbf20df40eb1ca1780faf0fe326fa2f9a4c7a5f9_aGdleHQvbXEucHk=..6ee71f78497c5647fe0b88d37edd9fdaedb812c0_aGdleHQvbXEucHk= 100644
--- a/hgext/mq.py
+++ b/hgext/mq.py
@@ -31,6 +31,7 @@
 
 from mercurial.i18n import _
 from mercurial.node import bin, hex, short, nullid, nullrev
+from mercurial.lock import release
 from mercurial import commands, cmdutil, hg, patch, util
 from mercurial import repair, extensions, url, error
 import os, sys, re, errno
@@ -518,7 +519,8 @@
                     repo.dirstate.invalidate()
                 raise
         finally:
-            del tr, lock, wlock
+            del tr
+            release(lock, wlock)
             self.removeundo(repo)
 
     def _apply(self, repo, series, list=False, update_status=True,
@@ -766,6 +768,7 @@
                         for chunk in chunks:
                             p.write(chunk)
                     p.close()
+                    wlock.release()
                     wlock = None
                     r = self.qrepo()
                     if r: r.add([patchfn])
@@ -781,7 +784,7 @@
                 raise
             self.removeundo(repo)
         finally:
-            del wlock
+            release(wlock)
 
     def strip(self, repo, rev, update=True, backup="all", force=None):
         wlock = lock = None
@@ -801,7 +804,7 @@
             # the actual strip
             self.removeundo(repo)
         finally:
-            del lock, wlock
+            release(lock, wlock)
 
     def isapplied(self, patch):
         """returns (index, rev, patch)"""
@@ -968,7 +971,7 @@
                 self.ui.write(_("now at: %s\n") % top)
             return ret[0]
         finally:
-            del wlock
+            wlock.release()
 
     def pop(self, repo, patch=None, force=False, update=True, all=False):
         def getfile(f, rev, flags):
@@ -1070,7 +1073,7 @@
             else:
                 self.ui.write(_("patch queue now empty\n"))
         finally:
-            del wlock
+            wlock.release()
 
     def diff(self, repo, pats, opts):
         top = self.check_toppatch(repo)
@@ -1295,7 +1298,7 @@
                 self.pop(repo, force=True)
                 self.push(repo, force=True)
         finally:
-            del wlock
+            wlock.release()
             self.removeundo(repo)
 
     def init(self, repo, create=False):
@@ -2179,7 +2182,7 @@
                 r.copy(patch, name)
                 r.remove([patch], False)
         finally:
-            del wlock
+            wlock.release()
 
     q.save_dirty()
 
diff --git a/hgext/rebase.py b/hgext/rebase.py
index dbf20df40eb1ca1780faf0fe326fa2f9a4c7a5f9_aGdleHQvcmViYXNlLnB5..6ee71f78497c5647fe0b88d37edd9fdaedb812c0_aGdleHQvcmViYXNlLnB5 100644
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -18,6 +18,7 @@
 from mercurial import extensions, ancestor, copies, patch
 from mercurial.commands import templateopts
 from mercurial.node import nullrev
+from mercurial.lock import release
 from mercurial.i18n import _
 import os, errno
 
@@ -141,7 +142,7 @@
         if skipped:
             ui.note(_("%d revisions have been skipped\n") % len(skipped))
     finally:
-        del lock, wlock
+        release(lock, wlock)
 
 def concludenode(repo, rev, p1, p2, state, collapse, last=False, skipped={},
                  extrafn=None):
diff --git a/hgext/transplant.py b/hgext/transplant.py
index dbf20df40eb1ca1780faf0fe326fa2f9a4c7a5f9_aGdleHQvdHJhbnNwbGFudC5weQ==..6ee71f78497c5647fe0b88d37edd9fdaedb812c0_aGdleHQvdHJhbnNwbGFudC5weQ== 100644
--- a/hgext/transplant.py
+++ b/hgext/transplant.py
@@ -168,7 +168,8 @@
         finally:
             self.saveseries(revmap, merges)
             self.transplants.write()
-            del lock, wlock
+            lock.release()
+            wlock.release()
 
     def filter(self, filter, changelog, patchfile):
         '''arbitrarily rewrite changeset before applying it'''
@@ -293,7 +294,7 @@
 
             return n, node
         finally:
-            del wlock
+            wlock.release()
 
     def readseries(self):
         nodes = []