<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, May 23, 2018 at 7:46 AM, Yuya Nishihara <span dir="ltr"><<a href="mailto:yuya@tcha.org" target="_blank">yuya@tcha.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Yuya Nishihara <<a href="mailto:yuya@tcha.org">yuya@tcha.org</a>><br>
# Date 1526646246 -32400<br>
#      Fri May 18 21:24:06 2018 +0900<br>
# Branch stable<br>
# Node ID d99bba4101af58e3e83dab60b644bb<wbr>687794e6d9<br>
# Parent  d46a38c07b1a2ba451e22e57aa22fd<wbr>1308f2046f<br>
lock: add internal config to not replace signal handlers while locking<br></blockquote><div><br></div><div>Queued for stable.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
signal.signal() is blocked in some WSGI environments, and a horrible warning<br>
is sent to the server log. So we need a way to disable it, and I think<br>
abusing ui.config is the simplest workaround.<br>
<br>
diff --git a/mercurial/configitems.py b/mercurial/configitems.py<br>
--- a/mercurial/configitems.py<br>
+++ b/mercurial/configitems.py<br>
@@ -1127,6 +1127,9 @@ coreconfigitem('ui', 'report_untrusted',<br>
 coreconfigitem('ui', 'rollback',<br>
     default=True,<br>
 )<br>
+coreconfigitem('ui', 'signal-safe-lock',<br>
+    default=True,<br>
+)<br>
 coreconfigitem('ui', 'slash',<br>
     default=False,<br>
 )<br>
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py<br>
--- a/mercurial/localrepo.py<br>
+++ b/mercurial/localrepo.py<br>
@@ -1693,12 +1693,15 @@ class localrepository(object):<br>
         if wait:<br>
             timeout = self.ui.configint("ui", "timeout")<br>
             warntimeout = self.ui.configint("ui", "timeout.warn")<br>
+        # internal config: ui.signal-safe-lock<br>
+        signalsafe = self.ui.configbool('ui', 'signal-safe-lock')<br>
<br>
         l = lockmod.trylock(self.ui, vfs, lockname, timeout, warntimeout,<br>
                             releasefn=releasefn,<br>
                             acquirefn=acquirefn, desc=desc,<br>
                             inheritchecker=inheritchecker,<br>
-                            parentlock=parentlock)<br>
+                            parentlock=parentlock,<br>
+                            signalsafe=signalsafe)<br>
         return l<br>
<br>
     def _afterlock(self, callback):<br>
diff --git a/mercurial/lock.py b/mercurial/lock.py<br>
--- a/mercurial/lock.py<br>
+++ b/mercurial/lock.py<br>
@@ -21,6 +21,7 @@ from . import (<br>
     encoding,<br>
     error,<br>
     pycompat,<br>
+    util,<br>
 )<br>
<br>
 from .utils import (<br>
@@ -177,7 +178,7 @@ class lock(object):<br>
<br>
     def __init__(self, vfs, fname, timeout=-1, releasefn=None, acquirefn=None,<br>
                  desc=None, inheritchecker=None, parentlock=None,<br>
-                 dolock=True):<br>
+                 signalsafe=True, dolock=True):<br>
         self.vfs = vfs<br>
         self.f = fname<br>
         self.held = 0<br>
@@ -189,6 +190,10 @@ class lock(object):<br>
         self.parentlock = parentlock<br>
         self._parentheld = False<br>
         self._inherited = False<br>
+        if signalsafe:<br>
+            self._maybedelayedinterrupt = _delayedinterrupt<br>
+        else:<br>
+            self._maybedelayedinterrupt = util.nullcontextmanager<br>
         self.postrelease  = []<br>
         self.pid = self._getpid()<br>
         if dolock:<br>
@@ -244,7 +249,7 @@ class lock(object):<br>
         while not self.held and retry:<br>
             retry -= 1<br>
             try:<br>
-                with _delayedinterrupt():<br>
+                with self._maybedelayedinterrupt():<br>
                     self.vfs.makelock(lockname, self.f)<br>
                     self.held = 1<br>
             except (OSError, IOError) as why:<br>
______________________________<wbr>_________________<br>
Mercurial-devel mailing list<br>
<a href="mailto:Mercurial-devel@mercurial-scm.org">Mercurial-devel@mercurial-scm.<wbr>org</a><br>
<a href="https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel" rel="noreferrer" target="_blank">https://www.mercurial-scm.org/<wbr>mailman/listinfo/mercurial-<wbr>devel</a><br>
</blockquote></div><br></div></div>