]> git.sur5r.net Git - i3/i3/commitdiff
Reset SIGIPE handler before executing a command
authorPetr Písař <petr.pisar@atlas.cz>
Thu, 24 Apr 2014 18:35:17 +0000 (20:35 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Sat, 26 Apr 2014 10:09:45 +0000 (12:09 +0200)
This commit:

commit fb6d117c42ce3d9988ff44c079814b3840b1e37f
Author: Axel Wagner <mail@merovius.de>
Date:   Thu Dec 30 21:09:32 2010 +0100

    Port sighandler to tree-branch

blocks SIGPIPE. Unfortunatelly blocked signal set is preserved accross
execve()s, so any program executed by i3 inherited blocked SIGPIPE signal.
This leads to courious effects when pipe writer does not terminate after
exiting pipe reader.

Simple reproducer is to spawn a new xterm by a key shortcut and then run this
command there:

$ perl -e 'print $SIG{PIPE}, qq{\n}'
IGNORE

fixes #1237

src/startup.c

index 85e5dbc2e400b75651398cd2c0746677811b2ee6..a3e4d58e4fc7541d5db7b05cd0b9fee51a290175 100644 (file)
@@ -187,6 +187,7 @@ void start_application(const char *command, bool no_startup_id) {
         }
         unsetenv("LISTEN_PID");
         unsetenv("LISTEN_FDS");
+        signal(SIGPIPE, SIG_DFL);
         if (fork() == 0) {
             /* Setup the environment variable(s) */
             if (!no_startup_id)