repo: ngircd action: commit revision: path_from: revision_from: ef3dbf96eb977c5296e092c6a48f8a3ca51598e2: path_to: revision_to:
commit ef3dbf96eb977c5296e092c6a48f8a3ca51598e2 Author: Florian WestphalDate: 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. diff --git a/src/ngircd/conn.c b/src/ngircd/conn.c
--- 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
--- a/src/ngircd/irc-oper.c +++ b/src/ngircd/irc-oper.c @@ -19,6 +19,7 @@ #include#include #include +#include #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
--- 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;
@@ -430,56 +429,6 @@ Fill_Version( void )
} /* Fill_Version */
-/**
- * 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.
*/
diff --git a/src/ngircd/ngircd.h b/src/ngircd/ngircd.h
--- 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
--- a/src/ngircd/sighandlers.c +++ b/src/ngircd/sighandlers.c @@ -25,6 +25,10 @@ #include#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);
-----END OF PAGE-----