/* signal handler setup. let's catch as many signals as possible. */ static void sig_setup(void) { sigset_t set; sigfillset(&set); sigdelset(&set, SIGABRT); sigdelset(&set, SIGILL); #ifdef SIGKILL sigdelset(&set, SIGKILL); #endif #ifdef SIGCONT sigdelset(&set, SIGCONT); #endif #ifdef SIGSTOP sigdelset(&set, SIGSTOP); #endif sigdelset(&set, SIGSEGV); #ifdef SIGBUS sigdelset(&set, SIGBUS); #endif /*SIGBUS*/ /* Exclude signals used by GC to stop and restart the world. */ #ifdef GC_THREADS int sig_suspend = GC_get_suspend_signal(); if (sig_suspend >= 0) sigdelset(&set, sig_suspend); int sig_restart = GC_get_thr_restart_signal(); if (sig_restart >= 0) sigdelset(&set, sig_restart); #endif /*GC_THREADS*/ Scm_SetMasterSigmask(&set); }
/* signal handler setup. let's catch as many signals as possible. */ static void sig_setup(void) { sigset_t set; sigfillset(&set); sigdelset(&set, SIGABRT); sigdelset(&set, SIGILL); #ifdef SIGKILL sigdelset(&set, SIGKILL); #endif #ifdef SIGCONT sigdelset(&set, SIGCONT); #endif #ifdef SIGSTOP sigdelset(&set, SIGSTOP); #endif sigdelset(&set, SIGSEGV); #ifdef SIGBUS sigdelset(&set, SIGBUS); #endif /*SIGBUS*/ #if defined(GC_LINUX_THREADS) /* some signals are used in the system */ sigdelset(&set, SIGPWR); /* used in gc */ sigdelset(&set, SIGXCPU); /* used in gc */ sigdelset(&set, SIGUSR1); /* used in linux threads */ sigdelset(&set, SIGUSR2); /* used in linux threads */ #endif /*GC_LINUX_THREADS*/ #if defined(GC_FREEBSD_THREADS) sigdelset(&set, SIGUSR1); /* used by GC to stop the world */ sigdelset(&set, SIGUSR2); /* used by GC to restart the world */ #endif /*GC_FREEBSD_THREADS*/ Scm_SetMasterSigmask(&set); }
/* signal handler setup. let's catch as many signals as possible. */ static void sig_setup(void) { sigset_t set; Scm_SigFillSetMostly(&set); Scm_SetMasterSigmask(&set); }