From b310c854fc771255ffc8bb57a3a76e8ce856ab7f Mon Sep 17 00:00:00 2001 From: simonmar Date: Tue, 22 Feb 2000 12:09:24 +0000 Subject: [PATCH] [project @ 2000-02-22 12:09:23 by simonmar] Ignore SIGPIPE, since our I/O library handles EPIPE properly and SIGPIPE tends to cause the Haskell program to exit silently and mysteriously. Found-by: furiously pressing the refresh button in a browser connected to my Haskell web server :-) --- ghc/rts/RtsStartup.c | 6 +++--- ghc/rts/Signals.c | 20 ++++++++++++-------- ghc/rts/Signals.h | 4 ++-- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/ghc/rts/RtsStartup.c b/ghc/rts/RtsStartup.c index 7439a78..7208ae0 100644 --- a/ghc/rts/RtsStartup.c +++ b/ghc/rts/RtsStartup.c @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: RtsStartup.c,v 1.29 2000/02/17 17:19:42 simonmar Exp $ + * $Id: RtsStartup.c,v 1.30 2000/02/22 12:09:24 simonmar Exp $ * * (c) The GHC Team, 1998-1999 * @@ -143,8 +143,8 @@ startupHaskell(int argc, char *argv[]) #if !defined(mingw32_TARGET_OS) && !defined(PAR) /* Initialise the user signal handler set */ initUserSignals(); - /* Set up handler to run on SIGINT */ - init_shutdown_handler(); + /* Set up handler to run on SIGINT, etc. */ + init_default_handlers(); #endif /* When the RTS and Prelude live in separate DLLs, diff --git a/ghc/rts/Signals.c b/ghc/rts/Signals.c index 9c6e058..36f223b 100644 --- a/ghc/rts/Signals.c +++ b/ghc/rts/Signals.c @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: Signals.c,v 1.12 2000/01/13 12:40:16 simonmar Exp $ + * $Id: Signals.c,v 1.13 2000/02/22 12:09:23 simonmar Exp $ * * (c) The GHC Team, 1998-1999 * @@ -273,9 +273,13 @@ shutdown_handler(int sig STG_UNUSED) * Haskell code may install their own SIGINT handler, which is * fine, provided they're so kind as to put back the old one * when they de-install. + * + * We ignore SIGPIPE, because our I/O library handles EPIPE properly, + * and a SIGPIPE tends to cause the program to exit silently and + * mysteriously. */ void -init_shutdown_handler() +init_default_handlers() { struct sigaction action,oact; @@ -287,13 +291,13 @@ init_shutdown_handler() action.sa_flags = 0; if (sigaction(SIGINT, &action, &oact) != 0) { /* Oh well, at least we tried. */ -#ifdef DEBUG - fprintf(stderr, "init_shutdown_handler: failed to reg SIGINT handler"); -#endif + prog_belch("failed to install SIGINT handler"); } -} - - + action.sa_handler = SIG_IGN; + if (sigaction(SIGPIPE, &action, &oact) != 0) { + prog_belch("failed to install SIGINT handler"); + } +} #endif /*! mingw32_TARGET_OS */ diff --git a/ghc/rts/Signals.h b/ghc/rts/Signals.h index 0127ce5..0f92018 100644 --- a/ghc/rts/Signals.h +++ b/ghc/rts/Signals.h @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: Signals.h,v 1.4 1999/09/22 11:53:33 sof Exp $ + * $Id: Signals.h,v 1.5 2000/02/22 12:09:24 simonmar Exp $ * * (c) The GHC Team, 1998-1999 * @@ -22,7 +22,7 @@ extern void unblockUserSignals(void); extern void start_signal_handlers(void); -extern void init_shutdown_handler(void); +extern void init_default_handlers(void); #else -- 1.7.10.4