31#if defined (HAVE_CONFIG_H)
41#if defined (__WIN32__) && ! defined (__CYGWIN__)
52#if defined (HAVE_KILL)
54#elif defined (HAVE_RAISE)
55 octave_unused_parameter (pid);
59 octave_unused_parameter (pid);
60 octave_unused_parameter (
signum);
75#if defined (HAVE_KILL)
89 if (!
strcmp (signame,
"SIGINT"))
96 else if (!
strcmp (signame,
"SIGBREAK"))
103 else if (!
strcmp (signame,
"SIGABRT"))
110 else if (!
strcmp (signame,
"SIGALRM"))
117 else if (!
strcmp (signame,
"SIGBUS"))
124 else if (!
strcmp (signame,
"SIGCHLD"))
131 else if (!
strcmp (signame,
"SIGCLD"))
138 else if (!
strcmp (signame,
"SIGCONT"))
145 else if (!
strcmp (signame,
"SIGEMT"))
152 else if (!
strcmp (signame,
"SIGFPE"))
159 else if (!
strcmp (signame,
"SIGHUP"))
166 else if (!
strcmp (signame,
"SIGILL"))
173 else if (!
strcmp (signame,
"SIGINFO"))
180 else if (!
strcmp (signame,
"SIGIOT"))
187 else if (!
strcmp (signame,
"SIGKILL"))
194 else if (!
strcmp (signame,
"SIGLOST"))
201 else if (!
strcmp (signame,
"SIGPIPE"))
208 else if (!
strcmp (signame,
"SIGPOLL"))
215 else if (!
strcmp (signame,
"SIGPROF"))
222 else if (!
strcmp (signame,
"SIGPWR"))
229 else if (!
strcmp (signame,
"SIGQUIT"))
236 else if (!
strcmp (signame,
"SIGSEGV"))
243 else if (!
strcmp (signame,
"SIGSTOP"))
250 else if (!
strcmp (signame,
"SIGSYS"))
257 else if (!
strcmp (signame,
"SIGTERM"))
264 else if (!
strcmp (signame,
"SIGTRAP"))
271 else if (!
strcmp (signame,
"SIGTSTP"))
278 else if (!
strcmp (signame,
"SIGTTIN"))
285 else if (!
strcmp (signame,
"SIGTTOU"))
292 else if (!
strcmp (signame,
"SIGURG"))
299 else if (!
strcmp (signame,
"SIGUSR1"))
306 else if (!
strcmp (signame,
"SIGUSR2"))
313 else if (!
strcmp (signame,
"SIGVTALRM"))
315#if defined (SIGVTALRM)
320 else if (!
strcmp (signame,
"SIGIO"))
327 else if (!
strcmp (signame,
"SIGWINCH"))
329#if defined (SIGWINCH)
334 else if (!
strcmp (signame,
"SIGXCPU"))
341 else if (!
strcmp (signame,
"SIGXFSZ"))
354 bool restart_syscalls)
356 struct sigaction act, oact;
358 act.sa_handler = handler;
364# if defined (SA_INTERRUPT)
365 act.sa_flags |= SA_INTERRUPT;
369#if defined (SA_RESTART)
370# if defined (SIGALRM)
374 if (restart_syscalls)
375 act.sa_flags |= SA_RESTART;
378 sigemptyset (&act.sa_mask);
379 sigemptyset (&oact.sa_mask);
381 sigaction (sig, &act, &oact);
383 return oact.sa_handler;
389 bool restart_syscalls)
425#if defined (SIGCHLD) || defined (SIGCLD)
431 sigemptyset (&(context->
ovar));
432 sigemptyset (&(context->
nvar));
434 sigaddset (&(context->
nvar), SIGCHLD);
437 sigaddset (&(context->
nvar), SIGCLD);
439 sigprocmask (SIG_BLOCK, &(context->
nvar), &(context->
ovar));
458 sigprocmask (SIG_SETMASK, &(context->
ovar), 0);
467#if ! defined (__WIN32__) || defined (__CYGWIN__)
476 sigset_t signal_mask;
478 sigemptyset (&signal_mask);
480 sigaddset (&signal_mask, sig);
482 pthread_sigmask (how, &signal_mask, 0);
486 octave_unused_parameter (how);
487 octave_unused_parameter (sig);
497#if defined (SIGBREAK)
507#if defined (SIGBREAK)
558 return malloc (
sizeof (sigset_t));
570 sigprocmask (0, 0, mask);
576 sigprocmask (SIG_SETMASK, (sigset_t *) mask, 0);
579#if ! defined (__WIN32__)
580static const sigset_t *
583 static bool initialized =
false;
584 static sigset_t sigmask;
588 sigemptyset (&sigmask);
596 sigaddset (&sigmask, SIGINT);
599#if defined (SIGBREAK)
600 sigaddset (&sigmask, SIGBREAK);
606 sigaddset (&sigmask, SIGHUP);
610 sigaddset (&sigmask, SIGQUIT);
614 sigaddset (&sigmask, SIGTERM);
620 sigaddset (&sigmask, SIGALRM);
623#if defined (SIGVTALRM)
624 sigaddset (&sigmask, SIGVTALRM);
630 sigaddset (&sigmask, SIGLOST);
634 sigaddset (&sigmask, SIGPIPE);
640 sigaddset (&sigmask, SIGCHLD);
644 sigaddset (&sigmask, SIGCLD);
650 sigaddset (&sigmask, SIGXCPU);
654 sigaddset (&sigmask, SIGXFSZ);
667#if ! defined (__WIN32__) || defined (__CYGWIN__)
675#if ! defined (__WIN32__) || defined (__CYGWIN__)
686#if ! defined (__WIN32__)
700 if (sigwait (async_signals, &sig_caught))
707 (*handler) (sig_caught);
715#if ! defined (__WIN32__)
716 pthread_t sighandler_thread_id;
718 if (pthread_create (&sighandler_thread_id, 0,
signal_watcher, handler))
726 octave_unused_parameter (handler);
730#if ! defined (__WIN32__)
737 for (sig = 1; sig < NSIG; sig++)
739 if (sigismember (sigset, sig))
742 fprintf (of,
"%ld: %s%d (%s)\n", (
long int) pthread_self (),
743 prefix, sig, strsignal (sig));
748 fprintf (of,
"%ld: %s<empty signal set>\n", (
long int) pthread_self (),
758 fprintf (of,
"%s", msg);
760 if (pthread_sigmask (SIG_BLOCK, NULL, &sigmask) == -1)
772#if ! defined (__WIN32__)
774 msg =
"signal mask\n";
778 octave_unused_parameter (msg);
780 fputs (
"no signal mask on Windows systems\n", stderr);
OCTAVE_API bool strcmp(const T &str_a, const T &str_b)
True if strings are the same.
int kill(pid_t pid, int sig)
static const sigset_t * octave_async_signals(void)
void octave_save_signal_mask(void)
void * octave_block_child(void)
void octave_block_interrupt_signal(void)
void octave_create_interrupt_watcher_thread(octave_sig_handler *handler)
static void print_sigset(FILE *of, const char *prefix, const sigset_t *sigset)
int octave_num_signals(void)
void octave_block_signal_by_name(const char *signame)
void octave_unblock_signal_by_name(const char *signame)
void octave_show_sigmask(const char *msg)
void octave_set_signal_mask(void *mask)
static void * signal_watcher(void *arg)
void octave_free_signal_mask(void *mask)
void octave_unblock_child(void *context_arg)
bool octave_get_sig_number(const char *signame, int *signum)
void octave_get_signal_mask(void *mask)
char * octave_strsignal_wrapper(int signum)
static void block_or_unblock_signal_by_name(int how, const char *signame)
int octave_kill_wrapper(pid_t pid, int signum)
octave_sig_handler * octave_set_default_signal_handler_by_name(const char *signame)
static void block_or_unblock_signal(int how, int sig)
void octave_unblock_async_signals(void)
static sigset_t octave_signal_mask
octave_sig_handler * octave_set_signal_handler_by_name(const char *signame, octave_sig_handler *handler, bool restart_syscalls)
void octave_restore_signal_mask(void)
void octave_unblock_interrupt_signal(void)
void octave_block_async_signals(void)
octave_sig_handler * octave_set_signal_handler_internal(int sig, octave_sig_handler *handler, bool restart_syscalls)
bool octave_have_kill(void)
octave_sig_handler * octave_set_default_signal_handler(int sig)
int octave_raise_wrapper(int signum)
static int print_sigmask(FILE *of, const char *msg)
void * octave_alloc_signal_mask(void)
void octave_sig_handler(int)