From ddb6c4091faece384b83bf33e09b0cefb675044d Mon Sep 17 00:00:00 2001 From: moritz Date: Sat, 1 Dec 2007 16:02:55 +0000 Subject: [PATCH] Ignore SIGPIPE, which turned out to be the cause for silent deaths of long- running ezstream processes. git-svn-id: https://svn.xiph.org/trunk/ezstream@14255 0101bb08-14d6-0310-b084-bc0e0c8e3800 --- NEWS | 8 ++++++++ src/ezstream.c | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) 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) {