X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Fsighandlers.c;h=efb41bcd8465147ff68fff0f70afcac1452cdba9;hb=bcefdef1eaed14d3156b7fb5b9ad6d3b7078efcf;hp=688a8f02dcf1871605ca47442f17b1ab93bbeb66;hpb=355828e64f6fa07eb96bc6b27eef964b529d8778;p=ngircd-alex.git diff --git a/src/ngircd/sighandlers.c b/src/ngircd/sighandlers.c index 688a8f02..efb41bcd 100644 --- a/src/ngircd/sighandlers.c +++ b/src/ngircd/sighandlers.c @@ -36,15 +36,21 @@ static int signalpipe[2]; +static const int signals_catch[] = { + SIGINT, SIGQUIT, SIGTERM, SIGHUP, SIGCHLD, SIGUSR1, SIGUSR2 +}; + #ifdef DEBUG static void Dump_State(void) { - Log(LOG_DEBUG, "--- Internal server state: ---"); + Log(LOG_DEBUG, "--- Internal server state: %s ---", + Client_ID(Client_ThisServer())); Log(LOG_DEBUG, "time()=%ld", time(NULL)); Conf_DebugDump(); + Conn_DebugDump(); Client_DebugDump(); Log(LOG_DEBUG, "--- End of state dump ---"); } /* Dump_State */ @@ -52,7 +58,8 @@ Dump_State(void) #endif -static void Signal_Block(int sig) +static void +Signal_Block(int sig) { #ifdef HAVE_SIGPROCMASK sigset_t set; @@ -67,7 +74,8 @@ static void Signal_Block(int sig) } -static void Signal_Unblock(int sig) +static void +Signal_Unblock(int sig) { #ifdef HAVE_SIGPROCMASK sigset_t set; @@ -82,11 +90,12 @@ static void Signal_Unblock(int sig) #endif } + /** * Reload the server configuration file. */ static void -NGIRCd_Rehash( void ) +Rehash(void) { char old_name[CLIENT_ID_LEN]; unsigned old_nicklen; @@ -128,8 +137,7 @@ NGIRCd_Rehash( void ) Conn_SyncServerStruct( ); Log( LOG_NOTICE|LOG_snotice, "Re-reading of configuration done." ); -} /* NGIRCd_Rehash */ - +} /* Rehash */ /** @@ -140,7 +148,8 @@ NGIRCd_Rehash( void ) * It blocks the signal and queues it for later execution by Signal_Handler_BH. * @param Signal Number of the signal to handle. */ -static void Signal_Handler(int Signal) +static void +Signal_Handler(int Signal) { switch (Signal) { case SIGTERM: @@ -149,8 +158,6 @@ static void Signal_Handler(int Signal) /* shut down sever */ NGIRCd_SignalQuit = true; return; - case SIGHUP: - break; case SIGCHLD: /* child-process exited, avoid zombies */ while (waitpid( -1, NULL, WNOHANG) > 0) @@ -201,17 +208,21 @@ static void Signal_Handler(int Signal) * thus its not necessary to only use functions that are signal safe. * @param Signal Number of the signal that was queued. */ -static void Signal_Handler_BH(int Signal) +static void +Signal_Handler_BH(int Signal) { switch (Signal) { case SIGHUP: /* re-read configuration */ - NGIRCd_Rehash(); + Rehash(); break; #ifdef DEBUG case SIGUSR2: - if (NGIRCd_Debug) + if (NGIRCd_Debug) { + Log(LOG_INFO|LOG_snotice, + "Got SIGUSR2, dumping internal state ..."); Dump_State(); + } break; default: Log(LOG_DEBUG, "Got signal %d! Ignored.", Signal); @@ -220,13 +231,15 @@ static void Signal_Handler_BH(int Signal) Signal_Unblock(Signal); } -static void Sig_callback(int fd, short UNUSED what) + +static void +Signal_Callback(int fd, short UNUSED what) { int sig, ret; (void) what; do { - ret = read(fd, &sig, sizeof(sig)); + ret = (int)read(fd, &sig, sizeof(sig)); if (ret == sizeof(int)) Signal_Handler_BH(sig); } while (ret == sizeof(int)); @@ -244,18 +257,20 @@ static void Sig_callback(int fd, short UNUSED what) } -static const int signals_catch[] = { SIGINT, SIGQUIT, SIGTERM, SIGHUP, SIGCHLD, SIGUSR1, SIGUSR2 }; /** * Initialize the signal handlers, catch * those signals we are interested in and sets SIGPIPE to be ignored. * @return true if initialization was sucessful. */ -bool Signals_Init(void) +bool +Signals_Init(void) { size_t i; #ifdef HAVE_SIGACTION struct sigaction saction; #endif + if (signalpipe[0] > 0 || signalpipe[1] > 0) + return true; if (pipe(signalpipe)) return false; @@ -288,9 +303,8 @@ bool Signals_Init(void) signal(SIGPIPE, SIG_IGN); #endif - return io_event_create(signalpipe[0], IO_WANTREAD, - Sig_callback); -} /* Initialize_Signal_Handler */ + return io_event_create(signalpipe[0], IO_WANTREAD, Signal_Callback); +} /* Signals_Init */ /** @@ -300,7 +314,8 @@ bool Signals_Init(void) * child prodcess, especially when we are about to call * 3rd party code (e.g. PAM). */ -void Signals_Exit(void) +void +Signals_Exit(void) { size_t i; #ifdef HAVE_SIGACTION @@ -314,7 +329,7 @@ void Signals_Exit(void) sigaction(SIGPIPE, &saction, NULL); #else for (i=0; i < C_ARRAY_SIZE(signals_catch) ; i++) - sigaction(signals_catch[i], &saction, NULL); + signal(signals_catch[i], SIG_DFL); signal(SIGPIPE, SIG_DFL); #endif close(signalpipe[1]);