From 39600857613d85e035ab1f93ad8360d9eaf00fe0 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Fri, 15 Sep 2000 13:58:36 +0200 Subject: [PATCH] Handling SIGPIPE and re-establishing handler after intercepting a signal --- HISTORY | 1 + vdr.c | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/HISTORY b/HISTORY index 7c888758..35aa7aa4 100644 --- a/HISTORY +++ b/HISTORY @@ -172,3 +172,4 @@ Video Disk Recorder Revision History - Video files now have the 'group read' bit set. - Fixed handling errors in 'readstring()'. +- Handling SIGPIPE and re-establishing handler after intercepting a signal. diff --git a/vdr.c b/vdr.c index 4932bf23..26c3693a 100644 --- a/vdr.c +++ b/vdr.c @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/people/kls/vdr * - * $Id: vdr.c 1.30 2000/09/10 14:33:09 kls Exp $ + * $Id: vdr.c 1.31 2000/09/15 13:55:39 kls Exp $ */ #include @@ -46,9 +46,11 @@ static int Interrupted = 0; -void SignalHandler(int signum) +static void SignalHandler(int signum) { - Interrupted = signum; + if (signum != SIGPIPE) + Interrupted = signum; + signal(signum, SignalHandler); } int main(int argc, char *argv[]) @@ -174,6 +176,7 @@ int main(int argc, char *argv[]) if (signal(SIGHUP, SignalHandler) == SIG_IGN) signal(SIGHUP, SIG_IGN); if (signal(SIGINT, SignalHandler) == SIG_IGN) signal(SIGINT, SIG_IGN); if (signal(SIGTERM, SignalHandler) == SIG_IGN) signal(SIGTERM, SIG_IGN); + if (signal(SIGPIPE, SignalHandler) == SIG_IGN) signal(SIGPIPE, SIG_IGN); // Main program loop: