From b6ca93039d045cc3a69aec773f334164690e08d6 Mon Sep 17 00:00:00 2001
From: simonmar <unknown>
Date: Fri, 25 Jun 1999 09:16:46 +0000
Subject: [PATCH] [project @ 1999-06-25 09:16:46 by simonmar] Set
 context_switch to 1 after scheduling a signal handler.  This will ensure the
 running thread is interrupted as soon as possible.

---
 ghc/rts/Signals.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/ghc/rts/Signals.c b/ghc/rts/Signals.c
index 219ce6752e61..0953c3c85c3e 100644
--- a/ghc/rts/Signals.c
+++ b/ghc/rts/Signals.c
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: Signals.c,v 1.5 1999/03/02 20:01:55 sof Exp $
+ * $Id: Signals.c,v 1.6 1999/06/25 09:16:46 simonmar Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -9,6 +9,7 @@
 
 #include "Rts.h"
 #include "SchedAPI.h"
+#include "Schedule.h"
 #include "Signals.h"
 #include "RtsUtils.h"
 #include "RtsFlags.h"
@@ -73,7 +74,7 @@ generic_handler(int sig)
        either.  However, we have to schedule a new thread somehow.
 
        It's probably ok to request a context switch and allow the
-       scheduler to  start the handler thread, but how to we
+       scheduler to  start the handler thread, but how do we
        communicate this to the scheduler?
 
        We need some kind of locking, but with low overhead (i.e. no
@@ -108,6 +109,8 @@ generic_handler(int sig)
     sigemptyset(&signals);
     sigaddset(&signals, sig);
     sigprocmask(SIG_UNBLOCK, &signals, NULL);
+
+    context_switch = 1;
 }
 
 /* -----------------------------------------------------------------------------
@@ -169,11 +172,13 @@ sig_install(StgInt sig, StgInt spi, StgStablePtr handler, sigset_t *mask)
 	sigdelset(&userSignals, sig);
         action.sa_handler = SIG_DFL;
     	break;
+
     case STG_SIG_HAN:
     	handlers[sig] = (I_)handler;
 	sigaddset(&userSignals, sig);
     	action.sa_handler = generic_handler;
     	break;
+
     default:
         barf("sig_install: bad spi");
     }
-- 
GitLab