X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/90207a152538c00b6c75b9774b528470dfb42717..a37d34f3b470e3fb4013e01d207488e3ddb78798:/src/syssignal.h diff --git a/src/syssignal.h b/src/syssignal.h index a2522f2442..d7399c6cb8 100644 --- a/src/syssignal.h +++ b/src/syssignal.h @@ -1,6 +1,6 @@ /* syssignal.h - System-dependent definitions for signals. -Copyright (C) 1993, 1999, 2001-2012 Free Software Foundation, Inc. +Copyright (C) 1993, 1999, 2001-2013 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -17,7 +17,10 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ -extern void init_signals (void); +#include +#include + +extern void init_signals (bool); #ifdef HAVE_PTHREAD #include @@ -26,132 +29,33 @@ extern void init_signals (void); #define FORWARD_SIGNAL_TO_MAIN_THREAD #endif -/* Don't #include . That header should always be #included - before "config.h", because some configuration files (like s/hpux.h) - indicate that SIGIO doesn't work by #undef-ing SIGIO. If this file - #includes , then that will re-#define SIGIO and confuse - things. */ -/* XXX This is not correct anymore, there is a BROKEN_SIGIO macro. */ - -#define SIGMASKTYPE sigset_t - -#define SIGEMPTYMASK (empty_mask) -extern sigset_t empty_mask; - -/* POSIX pretty much destroys any possibility of writing sigmask as a - macro in standard C. We always define our own version because the - predefined macro in Glibc 2.1 is only provided for compatibility for old - programs that use int as signal mask type. */ -#undef sigmask -#ifdef __GNUC__ -#define sigmask(SIG) \ - ({ \ - sigset_t _mask; \ - sigemptyset (&_mask); \ - sigaddset (&_mask, SIG); \ - _mask; \ - }) -#else /* ! defined (__GNUC__) */ -extern sigset_t sys_sigmask (); -#define sigmask(SIG) (sys_sigmask (SIG)) -#endif /* ! defined (__GNUC__) */ - -#undef sigpause -#define sigpause(MASK) sigsuspend (&(MASK)) - -#define sigblock(SIG) sys_sigblock (SIG) -#define sigunblock(SIG) sys_sigunblock (SIG) -#ifndef sigsetmask -#define sigsetmask(SIG) sys_sigsetmask (SIG) +#if defined HAVE_TIMER_SETTIME && defined SIGEV_SIGNAL +# define HAVE_ITIMERSPEC #endif -#undef signal -#define signal(SIG,ACT) sys_signal(SIG,ACT) - -/* Whether this is what all systems want or not, this is what - appears to be assumed in the source, for example data.c:arith_error. */ -typedef void (*signal_handler_t) (int); -signal_handler_t sys_signal (int signal_number, signal_handler_t action); -sigset_t sys_sigblock (sigset_t new_mask); -sigset_t sys_sigunblock (sigset_t new_mask); -sigset_t sys_sigsetmask (sigset_t new_mask); -#if ! (defined TIOCNOTTY || defined USG5 || defined CYGWIN) -void croak (char *) NO_RETURN; +#if (defined SIGPROF && !defined PROFILING \ + && (defined HAVE_SETITIMER || defined HAVE_ITIMERSPEC)) +# define PROFILER_CPU_SUPPORT #endif -#define sys_sigdel(MASK,SIG) sigdelset (&MASK,SIG) - -#define sigfree() sigsetmask (SIGEMPTYMASK) +extern sigset_t empty_mask; -#if defined (SIGIO) && defined (BROKEN_SIGIO) -# undef SIGIO -#endif -/* Last user: m/ibmrs6000.h */ -#if defined (SIGPOLL) && defined (BROKEN_SIGPOLL) -#undef SIGPOLL -#endif -/* Last user: m/ibmrs6000.h */ -#if defined (SIGAIO) && defined (BROKEN_SIGAIO) -#undef SIGAIO -#endif -/* Last user: m/ibmrs6000.h */ -#if defined (SIGPTY) && defined (BROKEN_SIGPTY) -#undef SIGPTY -#endif +typedef void (*signal_handler_t) (int); +extern void emacs_sigaction_init (struct sigaction *, signal_handler_t); +char const *safe_strsignal (int) ATTRIBUTE_CONST; #if NSIG < NSIG_MINIMUM -# ifdef NSIG -# undef NSIG -# endif +# undef NSIG # define NSIG NSIG_MINIMUM #endif -/* On bsd, [man says] kill does not accept a negative number to kill a pgrp. - Must do that using the killpg call. */ -#ifdef BSD_SYSTEM -#define EMACS_KILLPG(gid, signo) (killpg ( (gid), (signo))) -#else -#ifdef WINDOWSNT -#define EMACS_KILLPG(gid, signo) (kill (gid, signo)) -#else -#define EMACS_KILLPG(gid, signo) (kill (-(gid), (signo))) +#ifndef emacs_raise +# define emacs_raise(sig) raise (sig) #endif -#endif - -/* Define SIGCHLD as an alias for SIGCLD. There are many conditionals - testing SIGCHLD. */ -#ifdef SIGCLD -#ifndef SIGCHLD -#define SIGCHLD SIGCLD -#endif /* SIGCHLD */ -#endif /* ! defined (SIGCLD) */ #ifndef HAVE_STRSIGNAL -/* strsignal is in sysdep.c */ -char *strsignal (int); +# define strsignal(sig) safe_strsignal (sig) #endif -#ifdef FORWARD_SIGNAL_TO_MAIN_THREAD -extern pthread_t main_thread; -#define SIGNAL_THREAD_CHECK(signo) \ - do { \ - if (!pthread_equal (pthread_self (), main_thread)) \ - { \ - /* POSIX says any thread can receive the signal. On GNU/Linux \ - that is not true, but for other systems (FreeBSD at least) \ - it is. So direct the signal to the correct thread and block \ - it from this thread. */ \ - sigset_t new_mask; \ - \ - sigemptyset (&new_mask); \ - sigaddset (&new_mask, signo); \ - pthread_sigmask (SIG_BLOCK, &new_mask, 0); \ - pthread_kill (main_thread, signo); \ - return; \ - } \ - } while (0) - -#else /* not FORWARD_SIGNAL_TO_MAIN_THREAD */ -#define SIGNAL_THREAD_CHECK(signo) -#endif /* not FORWARD_SIGNAL_TO_MAIN_THREAD */ +void deliver_process_signal (int, signal_handler_t);