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.
--- 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')