chgserver: do not ignore SIGPIPE if pager is used
authorJun Wu <quark@fb.com>
Fri, 24 Jun 2016 17:06:41 +0100
changeset 29428 247ea0dfdb94
parent 29427 33a6b750b5b9
child 29429 cf99de051385
chgserver: do not ignore SIGPIPE if pager is used We rely on SIGPIPE to exit when the pager exits. And Python ignores SIGPIPE by default. Explicitly set SIGPIPE handler to SIG_DFL (terminate) just like pager.py.
hgext/chgserver.py
--- a/hgext/chgserver.py	Fri Jun 24 11:12:41 2016 -0700
+++ b/hgext/chgserver.py	Fri Jun 24 17:06:41 2016 +0100
@@ -48,6 +48,7 @@
 import os
 import random
 import re
+import signal
 import struct
 import sys
 import threading
@@ -498,6 +499,11 @@
 
         pagercmd = _setuppagercmd(self.ui, options, cmd)
         if pagercmd:
+            # Python's SIGPIPE is SIG_IGN by default. change to SIG_DFL so
+            # we can exit if the pipe to the pager is closed
+            if util.safehasattr(signal, 'SIGPIPE') and \
+                    signal.getsignal(signal.SIGPIPE) == signal.SIG_IGN:
+                signal.signal(signal.SIGPIPE, signal.SIG_DFL)
             self.cresult.write(pagercmd)
         else:
             self.cresult.write('\0')