diff --git a/ghc/rts/Select.c b/ghc/rts/Select.c index 28a0370cb2e33003936762e782ddf4169ed01370..0b8d0d6d0bf37b33bb52511838747ef895f11bfe 100644 --- a/ghc/rts/Select.c +++ b/ghc/rts/Select.c @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: Select.c,v 1.2 1999/09/13 08:28:45 sof Exp $ + * $Id: Select.c,v 1.3 1999/10/04 16:14:34 simonmar Exp $ * * (c) The GHC Team 1995-1999 * @@ -15,6 +15,7 @@ #include "RtsUtils.h" #include "RtsFlags.h" #include "Itimer.h" +#include "Signals.h" # if defined(HAVE_SYS_TYPES_H) # include <sys/types.h> @@ -114,6 +115,15 @@ awaitEvent(rtsBool wait) fprintf(stderr, "awaitEvent: select failed\n"); stg_exit(EXIT_FAILURE); } + /* We got a signal; could be one of ours. If so, we need + * to start up the signal handler straight away, otherwise + * we could block for a long time before the signal is + * serviced. + */ + if (signals_pending()) { + start_signal_handlers(); + return; + } } if (numFound != 0) {