Capability *cap;
if (io_manager_pipe < 0) {
cap = rts_lock();
- rts_evalIO(cap,&base_GHCziConc_ensureIOManagerIsRunning_closure,NULL);
+ cap = rts_evalIO(cap,&base_GHCziConc_ensureIOManagerIsRunning_closure,NULL);
rts_unlock(cap);
}
}
stg_exit(EXIT_FAILURE);
}
+ MainCapability.context_switch = 1;
+
#endif /* THREADED_RTS */
// re-establish the signal handler, and carry on
sigemptyset(&signals);
sigaddset(&signals, sig);
sigprocmask(SIG_UNBLOCK, &signals, NULL);
-
- context_switch = 1;
}
/* -----------------------------------------------------------------------------
* doesn't seem to do so.
* -------------------------------------------------------------------------- */
void
-initDefaultHandlers()
+initDefaultHandlers(void)
{
struct sigaction action,oact;
#ifdef alpha_HOST_ARCH
ieee_set_fp_control(0);
#endif
+
+ // ignore SIGPIPE; see #1619
+ action.sa_handler = SIG_IGN;
+ sigemptyset(&action.sa_mask);
+ action.sa_flags = 0;
+ if (sigaction(SIGPIPE, &action, &oact) != 0) {
+ sysErrorBelch("warning: failed to install SIGPIPE handler");
+ }
+}
+
+void
+resetDefaultHandlers(void)
+{
+ struct sigaction action;
+
+ action.sa_handler = SIG_DFL;
+ sigemptyset(&action.sa_mask);
+ action.sa_flags = 0;
+
+ // restore SIGINT
+ if (sigaction(SIGINT, &action, NULL) != 0) {
+ sysErrorBelch("warning: failed to uninstall SIGINT handler");
+ }
+ // restore SIGPIPE
+ if (sigaction(SIGPIPE, &action, NULL) != 0) {
+ sysErrorBelch("warning: failed to uninstall SIGPIPE handler");
+ }
}
void