Reorganisation to fix problems related to the gct register variable
[ghc-hetmet.git] / rts / posix / Signals.c
index 4ae22cd..27f09b0 100644 (file)
@@ -41,7 +41,7 @@
  * to POSIX.1 to control whether or not to include SA_NOCLDSTOP when
  * installing a SIGCHLD handler. 
  */
-StgInt nocldstop = 0;
+HsInt nocldstop = 0;
 
 /* -----------------------------------------------------------------------------
  * The table of signal handlers
@@ -164,22 +164,6 @@ StgPtr *next_pending_handler = pending_handler_buf;
 #endif /* THREADED_RTS */
 
 /* -----------------------------------------------------------------------------
- * SIGCONT handler
- *
- * It seems that shells tend to put stdin back into blocking mode
- * following a suspend/resume of the process.  Here we arrange to put
- * it back into non-blocking mode.  We don't do anything to
- * stdout/stderr because these handles don't get put into non-blocking
- * mode at all - see the comments on stdout/stderr in PrelHandle.hsc.
- * -------------------------------------------------------------------------- */
-
-static void
-cont_handler(int sig STG_UNUSED)
-{
-    setNonBlockingFd(0);
-}
-
-/* -----------------------------------------------------------------------------
  * Low-level signal handler
  *
  * Places the requested handler on a stack of pending handlers to be
@@ -249,11 +233,6 @@ generic_handler(int sig)
     sigaddset(&signals, sig);
     sigprocmask(SIG_UNBLOCK, &signals, NULL);
 
-    // *always* do the SIGCONT handler, even if the user overrides it.
-    if (sig == SIGCONT) {
-       cont_handler(sig);
-    }
-
     context_switch = 1;
 }
 
@@ -413,19 +392,19 @@ startSignalHandlers(Capability *cap)
 
 #if !defined(THREADED_RTS)
 void
-markSignalHandlers (evac_fn evac)
+markSignalHandlers (evac_fn evac, void *user)
 {
     StgPtr *p;
 
     p = next_pending_handler;
     while (p != pending_handler_buf) {
        p--;
-       evac((StgClosure **)p);
+       evac(user, (StgClosure **)p);
     }
 }
 #else
 void
-markSignalHandlers (evac_fn evac STG_UNUSED)
+markSignalHandlers (evac_fn evac STG_UNUSED, void *user STG_UNUSED)
 {
 }
 #endif
@@ -514,14 +493,6 @@ initDefaultHandlers()
     siginterrupt(SIGINT, 1);   // isn't this the default? --SDM
 #endif
 
-    // install the SIGCONT handler
-    action.sa_handler = cont_handler;
-    sigemptyset(&action.sa_mask);
-    action.sa_flags = 0;
-    if (sigaction(SIGCONT, &action, &oact) != 0) {
-       sysErrorBelch("warning: failed to install SIGCONT handler");
-    }
-
     // install the SIGFPE handler
 
     // In addition to handling SIGINT, also handle SIGFPE by ignoring it.