From patchwork Tue Feb 7 20:08:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: dispatch: treat SIGPIPE as a termination signal (BC) From: Simon Farnsworth X-Patchwork-Id: 18340 Message-Id: To: Cc: Augie Fackler Date: Tue, 7 Feb 2017 12:08:29 -0800 # HG changeset patch # User Simon Farnsworth # Date 1486498104 28800 # Tue Feb 07 12:08:24 2017 -0800 # Node ID e1150763706818fffa62c81a72a88574d20caea1 # Parent 1f51b4658f21bbb797e922d155c1046eddccf91d dispatch: treat SIGPIPE as a termination signal (BC) pager previously set SIGPIPE to immediately exit the process, ignoring any Python @atexit handlers, exception handling etc - just instant termination. Simply removing this as per changeset aaa751585325 meant that when you aborted a long running pager command, Mercurial would not quit; instead, we should add SIGPIPE to the list of termination signals in dispatch.py. This is a slight BC break, as previously, a process that was piping data into or out of Mercurial would not kill Mercurial if it died before closing its end of the pipe, whereas it will now cause Mercurial to exit. diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py --- a/mercurial/dispatch.py +++ b/mercurial/dispatch.py @@ -147,7 +147,7 @@ ui = req.ui try: - for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM': + for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM', 'SIGPIPE': num = getattr(signal, name, None) if num: signal.signal(num, catchterm)