X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=blobdiff_plain;f=src%2Fmain.c;h=7e1839f1c9ca27127ef907388c861e19c4a3ac3d;hp=b86633e7e01536e4df08fa7fb657f429dca994fc;hb=db9df7a1356859ffb8dcca001317940c92a80045;hpb=efd527562b39acb00d2143e90c94a2069ab9793e diff --git a/src/main.c b/src/main.c index b86633e..7e1839f 100644 --- a/src/main.c +++ b/src/main.c @@ -16,6 +16,7 @@ */ #include "main.h" +#include "signal.h" #include "ClientSocket.h" #include "UserNode.h" #include "ChanNode.h" @@ -44,6 +45,8 @@ static int statistics_requested_lusers = 0; int statistics_enabled; TIMEQ_CALLBACK(main_statistics); TIMEQ_CALLBACK(main_checkauths); +static int process_argc; +static char **process_argv; #ifdef HAVE_THREADS int running_threads; pthread_mutex_t cache_sync; @@ -136,6 +139,15 @@ int getCurrentThreadID() { int main(int argc, char *argv[]) { main: + process_argv = argv; + process_argc = argc; + + signal(SIGABRT, sighandler); + signal(SIGFPE, sighandler); + signal(SIGILL, sighandler); + signal(SIGINT, sighandler); + signal(SIGSEGV, sighandler); + signal(SIGTERM, sighandler); start_time = time(0); @@ -225,20 +237,23 @@ main: #endif cleanup(); if(hard_restart) { - /* Append a NULL to the end of argv[]. */ - char **restart_argv = (char **)alloca((argc + 1) * sizeof(char *)); - memcpy(restart_argv, argv, argc * sizeof(char *)); - restart_argv[argc] = NULL; - - #ifdef WIN32 - execv(argv[0], (const char * const*)restart_argv); - #else - execv(argv[0], restart_argv); - #endif + restart_process(); } goto main; } +void restart_process() { + /* Append a NULL to the end of argv[]. */ + char **restart_argv = (char **)alloca((process_argc + 1) * sizeof(char *)); + memcpy(restart_argv, process_argv, process_argc * sizeof(char *)); + restart_argv[process_argc] = NULL; + #ifdef WIN32 + execv(process_argv[0], (const char * const*)restart_argv); + #else + execv(process_argv[0], restart_argv); + #endif +} + int stricmp (const char *s1, const char *s2) { if (s1 == NULL) return s2 == NULL ? 0 : -(*s2);