Module: ngircd.git Branch: master Commit: ef3dbf96eb977c5296e092c6a48f8a3ca51598e2 URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=ef3db...
Author: Florian Westphal fw@strlen.de Date: Sat Sep 11 00:27:21 2010 +0200
remove NGIRCd_SignalRehash
now that the main signal handling is done from the dispatcher loop we can call NGIRCD_Rehash() directly.
the /REHASH handler can queue the Rehash() function for execution by sending a SIGHUP. It will be run when we return back to the dispatch loop.
---
src/ngircd/conn.c | 4 --- src/ngircd/irc-oper.c | 5 ++- src/ngircd/ngircd.c | 53 +--------------------------------------- src/ngircd/ngircd.h | 4 --- src/ngircd/sighandlers.c | 61 +++++++++++++++++++++++++++++++++++++++++++-- 5 files changed, 62 insertions(+), 65 deletions(-)
diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c index 03e2905..e4851a9 100644 --- a/src/ngircd/conn.c +++ b/src/ngircd/conn.c @@ -710,10 +710,6 @@ Conn_Handler(void) Rendezvous_Handler(); #endif
- /* Should the configuration be reloaded? */ - if (NGIRCd_SignalRehash) - NGIRCd_Rehash(); - /* Check configured servers and established links */ Check_Servers(); Check_Connections(); diff --git a/src/ngircd/irc-oper.c b/src/ngircd/irc-oper.c index a927b19..048c4f8 100644 --- a/src/ngircd/irc-oper.c +++ b/src/ngircd/irc-oper.c @@ -19,6 +19,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <signal.h>
#include "ngircd.h" #include "conn-func.h" @@ -146,8 +147,8 @@ IRC_REHASH( CLIENT *Client, REQUEST *Req ) if( Req->argc != 0 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command );
Log( LOG_NOTICE|LOG_snotice, "Got REHASH command from "%s" ...", Client_Mask( Client )); - NGIRCd_SignalRehash = true; - + raise(SIGHUP); + return CONNECTED; } /* IRC_REHASH */
diff --git a/src/ngircd/ngircd.c b/src/ngircd/ngircd.c index de0b490..2fd60ef 100644 --- a/src/ngircd/ngircd.c +++ b/src/ngircd/ngircd.c @@ -93,7 +93,7 @@ main( int argc, const char *argv[] )
umask( 0077 );
- NGIRCd_SignalQuit = NGIRCd_SignalRestart = NGIRCd_SignalRehash = false; + NGIRCd_SignalQuit = NGIRCd_SignalRestart = false; NGIRCd_Passive = false; #ifdef DEBUG NGIRCd_Debug = false; @@ -261,7 +261,6 @@ main( int argc, const char *argv[] ) NGIRCd_Start = time( NULL ); (void)strftime( NGIRCd_StartStr, 64, "%a %b %d %Y at %H:%M:%S (%Z)", localtime( &NGIRCd_Start ));
- NGIRCd_SignalRehash = false; NGIRCd_SignalRestart = false; NGIRCd_SignalQuit = false;
@@ -431,56 +430,6 @@ Fill_Version( void )
/** - * Reload the server configuration file. - */ -GLOBAL void -NGIRCd_Rehash( void ) -{ - char old_name[CLIENT_ID_LEN]; - unsigned old_nicklen; - - Log( LOG_NOTICE|LOG_snotice, "Re-reading configuration NOW!" ); - NGIRCd_SignalRehash = false; - - /* Remember old server name and nick name length */ - strlcpy( old_name, Conf_ServerName, sizeof old_name ); - old_nicklen = Conf_MaxNickLength; - - /* Re-read configuration ... */ - if (!Conf_Rehash( )) - return; - - /* Close down all listening sockets */ - Conn_ExitListeners( ); - - /* Recover old server name and nick name length: these values can't - * be changed during run-time */ - if (strcmp(old_name, Conf_ServerName) != 0 ) { - strlcpy(Conf_ServerName, old_name, sizeof Conf_ServerName); - Log(LOG_ERR, "Can't change "ServerName" on runtime! Ignored new name."); - } - if (old_nicklen != Conf_MaxNickLength) { - Conf_MaxNickLength = old_nicklen; - Log(LOG_ERR, "Can't change "MaxNickLength" on runtime! Ignored new value."); - } - - /* Create new pre-defined channels */ - Channel_InitPredefined( ); - - if (!ConnSSL_InitLibrary()) - Log(LOG_WARNING, "Re-Initializing SSL failed, using old keys"); - - /* Start listening on sockets */ - Conn_InitListeners( ); - - /* Sync configuration with established connections */ - Conn_SyncServerStruct( ); - - Log( LOG_NOTICE|LOG_snotice, "Re-reading of configuration done." ); -} /* NGIRCd_Rehash */ - - -/** * Display copyright and version information of ngIRCd on the console. */ static void diff --git a/src/ngircd/ngircd.h b/src/ngircd/ngircd.h index bd0aed0..bd699e5 100644 --- a/src/ngircd/ngircd.h +++ b/src/ngircd/ngircd.h @@ -41,7 +41,6 @@ GLOBAL bool NGIRCd_Passive; /* nicht zu anderen Servern connecten */
GLOBAL bool NGIRCd_SignalQuit; /* true: quit server*/ GLOBAL bool NGIRCd_SignalRestart; /* true: restart server */ -GLOBAL bool NGIRCd_SignalRehash; /* true: reload configuration */
GLOBAL char NGIRCd_DebugLevel[2]; /* Debug-Level fuer IRC_VERSION() */
@@ -50,9 +49,6 @@ GLOBAL char NGIRCd_ConfFile[FNAME_LEN]; /* Konfigurationsdatei */ GLOBAL char NGIRCd_ProtoID[COMMAND_LEN];/* Protokoll- und Server-Identifikation */
-GLOBAL void NGIRCd_Rehash PARAMS(( void )); - - #endif
diff --git a/src/ngircd/sighandlers.c b/src/ngircd/sighandlers.c index f3ce24f..d03692a 100644 --- a/src/ngircd/sighandlers.c +++ b/src/ngircd/sighandlers.c @@ -25,6 +25,10 @@ #include <sys/wait.h>
#include "imp.h" +#include "conn.h" +#include "conf-ssl.h" +#include "channel.h" +#include "conf.h" #include "io.h" #include "log.h" #include "ngircd.h" @@ -57,6 +61,55 @@ static void Signal_Unblock(int sig) #endif }
+/** + * Reload the server configuration file. + */ +static void +NGIRCd_Rehash( void ) +{ + char old_name[CLIENT_ID_LEN]; + unsigned old_nicklen; + + Log( LOG_NOTICE|LOG_snotice, "Re-reading configuration NOW!" ); + + /* Remember old server name and nick name length */ + strlcpy( old_name, Conf_ServerName, sizeof old_name ); + old_nicklen = Conf_MaxNickLength; + + /* Re-read configuration ... */ + if (!Conf_Rehash( )) + return; + + /* Close down all listening sockets */ + Conn_ExitListeners( ); + + /* Recover old server name and nick name length: these values can't + * be changed during run-time */ + if (strcmp(old_name, Conf_ServerName) != 0 ) { + strlcpy(Conf_ServerName, old_name, sizeof Conf_ServerName); + Log(LOG_ERR, "Can't change "ServerName" on runtime! Ignored new name."); + } + if (old_nicklen != Conf_MaxNickLength) { + Conf_MaxNickLength = old_nicklen; + Log(LOG_ERR, "Can't change "MaxNickLength" on runtime! Ignored new value."); + } + + /* Create new pre-defined channels */ + Channel_InitPredefined( ); + + if (!ConnSSL_InitLibrary()) + Log(LOG_WARNING, "Re-Initializing SSL failed, using old keys"); + + /* Start listening on sockets */ + Conn_InitListeners( ); + + /* Sync configuration with established connections */ + Conn_SyncServerStruct( ); + + Log( LOG_NOTICE|LOG_snotice, "Re-reading of configuration done." ); +} /* NGIRCd_Rehash */ + +
/** * Signal handler of ngIRCd. @@ -76,9 +129,7 @@ static void Signal_Handler(int Signal) NGIRCd_SignalQuit = true; return; case SIGHUP: - /* re-read configuration */ - NGIRCd_SignalRehash = true; - return; + break; case SIGCHLD: /* child-process exited, avoid zombies */ while (waitpid( -1, NULL, WNOHANG) > 0) @@ -108,6 +159,10 @@ static void Signal_Handler(int Signal) static void Signal_Handler_BH(int Signal) { switch (Signal) { + case SIGHUP: + /* re-read configuration */ + NGIRCd_Rehash(); + break; #ifdef DEBUG default: Log(LOG_DEBUG, "Got signal %d! Ignored.", Signal);
ngircd-commits@lists.barton.de