diff --git a/NEWS b/NEWS index 5fc5356..ed2a90f 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +Changes in 0.5.3 (SVN): + + * src/ezstream.c: + - [FIX] Prevent (very) long-running ezstream processes from dying without + error message by ignoring SIGPIPE where available. + + + Changes in 0.5.2, released on 2007-11-04: * src/ezstream.c: diff --git a/src/ezstream.c b/src/ezstream.c index caa986d..0ab64af 100644 --- a/src/ezstream.c +++ b/src/ezstream.c @@ -132,7 +132,11 @@ void usageHelp(void); int ez_shutdown(int); #ifdef HAVE_SIGNALS -void sig_handler(int); +void sig_handler(int); + +# ifndef SIG_IGN +# define SIG_IGN (void (*)(int))1 +# endif /* !SIG_IGN */ void sig_handler(int sig) @@ -1250,6 +1254,16 @@ main(int argc, char *argv[]) return (ez_shutdown(1)); } } + /* + * Ignore SIGPIPE, which has been seen to give a long-running ezstream + * process trouble. EOF and/or EPIPE are also easier to handle. + */ + act.sa_handler = SIG_IGN; + if (sigaction(SIGPIPE, &act, NULL) == -1) { + printf("%s: sigaction(): %s\n", + __progname, strerror(errno)); + return (ez_shutdown(1)); + } #endif /* HAVE_SIGNALS */ if (shout_open(shout) == SHOUTERR_SUCCESS) {