From: Michael Stapelberg Date: Sun, 21 Jun 2009 12:15:14 +0000 (+0200) Subject: Bugfix: Correctly handle SIGPIPE to avoid unnecessary zombie processes X-Git-Tag: 1.2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=098f7bac23e6e63e1ef0bfc12e7581ffd93ea89c;p=i3%2Fi3status Bugfix: Correctly handle SIGPIPE to avoid unnecessary zombie processes Negative return value of printf() is not used when write() returns a negative value, instead, SIGPIPE is sent. --- diff --git a/i3status.c b/i3status.c index fd781cb..bec4c81 100644 --- a/i3status.c +++ b/i3status.c @@ -54,6 +54,7 @@ #include #include #include +#include #include "queue.h" @@ -693,6 +694,16 @@ static int load_configuration(const char *configfile) { return result; } +/* + * Exit upon SIGPIPE because when we have nowhere to write to, gathering + * system information is pointless. + * + */ +void sigpipe(int signum) { + fprintf(stderr, "Received SIGPIPE, exiting\n"); + exit(1); +} + int main(int argc, char *argv[]) { char part[512], pathbuf[512]; @@ -706,6 +717,11 @@ int main(int argc, char *argv[]) { {0, 0, 0, 0} }; + struct sigaction action; + memset(&action, 0, sizeof(struct sigaction)); + action.sa_handler = sigpipe; + sigaction(SIGPIPE, &action, NULL); + SIMPLEQ_INIT(&batteries); while ((o = getopt_long(argc, argv, "c:h", long_options, &option_index)) != -1)