hgext/chgserver.py
changeset 29428 247ea0dfdb94
parent 29341 0d83ad967bf8
child 29433 33770d2b6cf9
--- 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')