X-Git-Url: https://www.tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fprocess.c;h=3b147909b8067ddc5dd5e514b24e7cd93ffab43e;hb=25b467638a23ad03524719329027225ae1da75bc;hp=d588a3fd830f50e8d7510d5fb9cd9eb4493f7dd3;hpb=886a6f61a1f4cc48a77b42d10f34f9126377d904;p=tinc diff --git a/src/process.c b/src/process.c index d588a3fd..3b147909 100644 --- a/src/process.c +++ b/src/process.c @@ -1,7 +1,7 @@ /* process.c -- process management functions Copyright (C) 1999-2005 Ivo Timmermans, - 2000-2009 Guus Sliepen + 2000-2011 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -40,10 +40,6 @@ extern char *identname; extern char **g_argv; extern bool use_logfile; -#ifndef HAVE_MINGW -sigset_t emptysigset; -#endif - static void memory_full(int size) { logger(LOG_ERR, "Memory exhausted (couldn't allocate %d bytes), exitting.", size); exit(1); @@ -255,8 +251,6 @@ bool detach(void) { logger(LOG_NOTICE, "tincd %s (%s %s) starting, debug level %d", VERSION, __DATE__, __TIME__, debug_level); - xalloc_fail_func = memory_full; - return true; } @@ -342,38 +336,6 @@ bool execute_script(const char *name, char **envp) { */ #ifndef HAVE_MINGW -static RETSIGTYPE fatal_signal_square(int a) { - logger(LOG_ERR, "Got another fatal signal %d (%s): not restarting.", a, - strsignal(a)); - exit(1); -} - -static RETSIGTYPE fatal_signal_handler(int a) { - struct sigaction act; - logger(LOG_ERR, "Got fatal signal %d (%s)", a, strsignal(a)); - - if(do_detach) { - logger(LOG_NOTICE, "Trying to re-execute in 5 seconds..."); - - act.sa_handler = fatal_signal_square; - act.sa_mask = emptysigset; - act.sa_flags = 0; - sigaction(SIGSEGV, &act, NULL); - - close_network_connections(); - sleep(5); - exit_control(); - execvp(g_argv[0], g_argv); - } else { - logger(LOG_NOTICE, "Not restarting."); - exit(1); - } -} - -static RETSIGTYPE unexpected_signal_handler(int a) { - logger(LOG_WARNING, "Got unexpected signal %d (%s)", a, strsignal(a)); -} - static RETSIGTYPE ignore_signal_handler(int a) { ifdebug(SCARY_THINGS) logger(LOG_DEBUG, "Ignored signal %d (%s)", a, strsignal(a)); } @@ -382,9 +344,6 @@ static struct { int signal; void (*handler)(int); } sighandlers[] = { - {SIGSEGV, fatal_signal_handler}, - {SIGBUS, fatal_signal_handler}, - {SIGILL, fatal_signal_handler}, {SIGPIPE, ignore_signal_handler}, {SIGCHLD, ignore_signal_handler}, {0, NULL} @@ -394,29 +353,10 @@ static struct { void setup_signals(void) { #ifndef HAVE_MINGW int i; - struct sigaction act; - - sigemptyset(&emptysigset); - act.sa_handler = NULL; - act.sa_mask = emptysigset; - act.sa_flags = 0; - - /* Set a default signal handler for every signal, errors will be - ignored. */ - for(i = 1; i < NSIG; i++) { - if(!do_detach) - act.sa_handler = SIG_DFL; - else - act.sa_handler = unexpected_signal_handler; - sigaction(i, &act, NULL); - } + struct sigaction act = {NULL}; - /* If we didn't detach, allow coredumps */ - if(!do_detach) - sighandlers[0].handler = SIG_DFL; + sigemptyset(&act.sa_mask); - /* Then, for each known signal that we want to catch, assign a - handler to the signal, with error checking this time. */ for(i = 0; sighandlers[i].signal; i++) { act.sa_handler = sighandlers[i].handler; if(sigaction(sighandlers[i].signal, &act, NULL) < 0)