zsh-workers
 help / color / mirror / code / Atom feed
From: Bart Schaefer <schaefer@brasslantern.com>
To: zsh-workers@zsh.org
Subject: SIGPIPE (Re: ZSH history not saved anymore)
Date: Sat, 27 Sep 2014 10:53:01 -0700	[thread overview]
Message-ID: <140927105301.ZM31550@torch.brasslantern.com> (raw)
In-Reply-To: <871tqxqyil.fsf@thinkpad-t440p.tsdh.org>

On Sep 27, 10:05am, Tassilo Horn wrote:
} Subject: Re: ZSH history not saved anymore
}
} > Obviously you can work around the problem by telling zsh to trap that
} > signal:
} >
} > TRAPPIPE() {
} >     exit
} > }
} 
} Yes, that works.  So I'll keep that in my ~/.zshrc for the time being.

I'm a bit hesitant to change this after all these years, but perhaps an
interactive shell should exit on SIGPIPE if the terminal is not still open?

I'm probably missing something having to do with subshells receiving the
PIPE signal.  There are regrettably many code paths covering all the ways
an interactive shell might fork.

diff --git a/Src/init.c b/Src/init.c
index 40f46a8..6d005dc 100644
--- a/Src/init.c
+++ b/Src/init.c
@@ -1134,6 +1134,7 @@ init_signals(void)
     winch_block();	/* See utils.c:preprompt() */
 #endif
     if (interact) {
+	install_handler(SIGPIPE);
 	install_handler(SIGALRM);
 	signal_ignore(SIGTERM);
     }
diff --git a/Src/signals.c b/Src/signals.c
index cb2b581..094b4b0 100644
--- a/Src/signals.c
+++ b/Src/signals.c
@@ -594,6 +594,17 @@ zhandler(int sig)
 	wait_for_processes();
         break;
  
+    case SIGPIPE:
+	if (!handletrap(SIGPIPE)) {
+	    if (!interact)
+		_exit(SIGPIPE);
+	    else if (!isatty(SHTTY)) {
+		stopmsg = 1;
+		zexit(SIGPIPE, 1);
+	    }
+	}
+	break;
+
     case SIGHUP:
         if (!handletrap(SIGHUP)) {
             stopmsg = 1;


       reply	other threads:[~2014-09-27 17:52 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <87mw9qdp7s.fsf@thinkpad-t440p.tsdh.org>
     [not found] ` <20140924200710.2f764272@pws-pc.ntlworld.com>
     [not found]   ` <8738bg2n1v.fsf@thinkpad-t440p.tsdh.org>
     [not found]     ` <140926000448.ZM30835@torch.brasslantern.com>
     [not found]       ` <878ul6lrw9.fsf@thinkpad-t440p.tsdh.org>
     [not found]         ` <CABx2=D9xdeJ0qDNayUG0astemFEtK13SLpA3j8UQT5EqHW_PmA@mail.gmail.com>
     [not found]           ` <87y4t66td0.fsf@thinkpad-t440p.tsdh.org>
     [not found]             ` <CABx2=D-chwqBDZLTk8OqeUDqxvnYUQFFKWbiw7h3ZgUGtSb_CQ@mail.gmail.com>
     [not found]               ` <871tqxqyil.fsf@thinkpad-t440p.tsdh.org>
2014-09-27 17:53                 ` Bart Schaefer [this message]
2014-09-27 20:40                   ` Peter Stephenson
2014-09-27 23:55                     ` Bart Schaefer
2014-09-28 18:04                       ` Bart Schaefer
2014-09-28 18:18                         ` Peter Stephenson
2014-09-28 20:16                           ` Bart Schaefer
2014-09-29  8:45                             ` Peter Stephenson
2014-09-29 15:29                               ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=140927105301.ZM31550@torch.brasslantern.com \
    --to=schaefer@brasslantern.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).