summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/inspircd.h9
-rw-r--r--src/commands/cmd_rehash.cpp6
-rw-r--r--src/inspircd.cpp1
-rw-r--r--src/server.cpp9
4 files changed, 7 insertions, 18 deletions
diff --git a/include/inspircd.h b/include/inspircd.h
index 2e4b02fac..f43141c38 100644
--- a/include/inspircd.h
+++ b/include/inspircd.h
@@ -245,7 +245,6 @@ DEFINE_HANDLER1(IsNickHandler, bool, const std::string&);
DEFINE_HANDLER2(GenRandomHandler, void, char*, size_t);
DEFINE_HANDLER1(IsIdentHandler, bool, const std::string&);
DEFINE_HANDLER1(IsChannelHandler, bool, const std::string&);
-DEFINE_HANDLER1(RehashHandler, void, const std::string&);
DEFINE_HANDLER3(OnCheckExemptionHandler, ModResult, User*, Channel*, const std::string&);
/** The main class of the irc server.
@@ -296,7 +295,6 @@ class CoreExport InspIRCd
IsIdentHandler HandleIsIdent;
OnCheckExemptionHandler HandleOnCheckExemption;
IsChannelHandler HandleIsChannel;
- RehashHandler HandleRehash;
GenRandomHandler HandleGenRandom;
/** Globally accessible fake user record. This is used to force mode changes etc across s2s, etc.. bit ugly, but.. better than how this was done in 1.1
@@ -483,10 +481,6 @@ class CoreExport InspIRCd
*/
static bool IsSID(const std::string& sid);
- /** Rehash the local server
- */
- caller1<void, const std::string&> Rehash;
-
/** Handles incoming signals after being set
* @param signal the signal recieved
*/
@@ -583,8 +577,9 @@ class CoreExport InspIRCd
static void ProcessColors(file_cache& input);
/** Rehash the local server
+ * @param uuid The uuid of the user who started the rehash, can be empty
*/
- void RehashServer();
+ void Rehash(const std::string& uuid = "");
/** Check if the given nickmask matches too many users, send errors to the given user
* @param nick A nickmask to match against
diff --git a/src/commands/cmd_rehash.cpp b/src/commands/cmd_rehash.cpp
index 3dc454036..441ddbd2a 100644
--- a/src/commands/cmd_rehash.cpp
+++ b/src/commands/cmd_rehash.cpp
@@ -88,11 +88,7 @@ CmdResult CommandRehash::Handle (const std::vector<std::string>& parameters, Use
/* Don't do anything with the logs here -- logs are restarted
* after the config thread has completed.
*/
- FOREACH_MOD(OnGarbageCollect, ());
-
-
- ServerInstance->ConfigThread = new ConfigReaderThread(user->uuid);
- ServerInstance->Threads->Start(ServerInstance->ConfigThread);
+ ServerInstance->Rehash();
}
else
{
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index 2171e2a9f..8336a4847 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -234,7 +234,6 @@ InspIRCd::InspIRCd(int argc, char** argv) :
OperQuit("operquit", NULL),
GenRandom(&HandleGenRandom),
IsChannel(&HandleIsChannel),
- Rehash(&HandleRehash),
IsNick(&HandleIsNick),
IsIdent(&HandleIsIdent),
OnCheckExemption(&HandleOnCheckExemption)
diff --git a/src/server.cpp b/src/server.cpp
index 97b4058c0..4f58c881d 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -31,7 +31,8 @@ void InspIRCd::SignalHandler(int signal)
#else
if (signal == SIGHUP)
{
- Rehash("Caught SIGHUP");
+ ServerInstance->SNO->WriteGlobalSno('a', "Rehashing due to SIGHUP");
+ Rehash();
}
else if (signal == SIGTERM)
#endif
@@ -55,13 +56,11 @@ void InspIRCd::Exit(int status)
exit (status);
}
-void RehashHandler::Call(const std::string &reason)
+void InspIRCd::Rehash(const std::string& uuid)
{
- ServerInstance->SNO->WriteToSnoMask('a', "Rehashing config file %s %s",ServerConfig::CleanFilename(ServerInstance->ConfigFileName.c_str()), reason.c_str());
- FOREACH_MOD(OnGarbageCollect, ());
if (!ServerInstance->ConfigThread)
{
- ServerInstance->ConfigThread = new ConfigReaderThread("");
+ ServerInstance->ConfigThread = new ConfigReaderThread(uuid);
ServerInstance->Threads->Start(ServerInstance->ConfigThread);
}
}