@ -394,8 +394,30 @@ static BOOL WINAPI CtrlHandler(DWORD fdwCtrlType)
}
# endif
# ifdef __linux__
# define SIGNAL(sig, func) \
do { \
action . sa_handler = func ; \
sigaction ( sig , & action , NULL ) ; \
} while ( 0 )
# else
# define SIGNAL(sig, func) \
signal ( sig , func )
# endif
void term_init ( void )
{
# if defined __linux__
struct sigaction action = { 0 } ;
action . sa_handler = sigterm_handler ;
/* block other interrupts while processing this one */
sigfillset ( & action . sa_mask ) ;
/* restart interruptible functions (i.e. don't fail with EINTR) */
action . sa_flags = SA_RESTART ;
# endif
# if HAVE_TERMIOS_H
if ( ! run_as_daemon & & stdin_interaction ) {
struct termios tty ;
@ -414,14 +436,14 @@ void term_init(void)
tcsetattr ( 0 , TCSANOW , & tty ) ;
}
signal ( SIGQUIT , sigterm_handler ) ; /* Quit (POSIX). */
SIGNAL ( SIGQUIT , sigterm_handler ) ; /* Quit (POSIX). */
}
# endif
signal ( SIGINT , sigterm_handler ) ; /* Interrupt (ANSI). */
signal ( SIGTERM , sigterm_handler ) ; /* Termination (ANSI). */
SIGNAL ( SIGINT , sigterm_handler ) ; /* Interrupt (ANSI). */
SIGNAL ( SIGTERM , sigterm_handler ) ; /* Termination (ANSI). */
# ifdef SIGXCPU
signal ( SIGXCPU , sigterm_handler ) ;
SIGNAL ( SIGXCPU , sigterm_handler ) ;
# endif
# ifdef SIGPIPE
signal ( SIGPIPE , SIG_IGN ) ; /* Broken pipe (POSIX). */