summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/configreader.h4
-rw-r--r--src/commands/cmd_rehash.cpp21
-rw-r--r--src/inspircd.cpp14
3 files changed, 21 insertions, 18 deletions
diff --git a/include/configreader.h b/include/configreader.h
index f4563529a..3d889f943 100644
--- a/include/configreader.h
+++ b/include/configreader.h
@@ -242,6 +242,10 @@ class CoreExport ServerConfig : public Extensible
public:
+ User* RehashUser;
+
+ std::string RehashParameter;
+
std::ostringstream errstr;
ConfigDataHash newconfig;
diff --git a/src/commands/cmd_rehash.cpp b/src/commands/cmd_rehash.cpp
index 7fdb9862e..868a4aea2 100644
--- a/src/commands/cmd_rehash.cpp
+++ b/src/commands/cmd_rehash.cpp
@@ -41,6 +41,9 @@ CmdResult CommandRehash::Handle (const char* const* parameters, int pcnt, User *
FOREACH_MOD(I_OnGarbageCollect, OnGarbageCollect());
if (!ServerInstance->ConfigThread)
{
+ ServerInstance->Config->RehashUser = user;
+ ServerInstance->Config->RehashParameter = parameter;
+
ServerInstance->ConfigThread = new ConfigReaderThread(ServerInstance, false, user);
ServerInstance->Threads->Create(ServerInstance->ConfigThread);
}
@@ -50,26 +53,8 @@ CmdResult CommandRehash::Handle (const char* const* parameters, int pcnt, User *
user->WriteServ("*** NOTICE %s :*** Could not rehash: A rehash is already in progress.", user->nick);
return CMD_FAILURE;
}
- /* TODO:
- * ALL THIS STUFF HERE NEEDS TO BE HOOKED TO THE 'DEATH' OF THE REHASH THREAD
- * VIA SOME NOTIFICATION EVENT. WE CANT JUST CALL IT ALL HERE.
- * -- B
- */
- // Get XLine to do it's thing.
- /*ServerInstance->XLines->CheckELines();
- ServerInstance->XLines->ApplyLines();
- ServerInstance->Res->Rehash();
- ServerInstance->ResetMaxBans();*/
}
- /* TODO: Same as above for all this stuff, really */
- if (old_disabled != ServerInstance->Config->DisabledCommands)
- InitializeDisabledCommands(ServerInstance->Config->DisabledCommands, ServerInstance);
-
- FOREACH_MOD(I_OnRehash,OnRehash(user, parameter));
-
- ServerInstance->BuildISupport();
-
return CMD_SUCCESS;
}
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index aaad2746a..de725d0e1 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -636,6 +636,20 @@ int InspIRCd::Run()
static char window_title[100];
#endif
+ if (this->ConfigThread && this->ConfigThread->GetExitFlag())
+ {
+ /* Rehash has completed */
+ this->Logs->Log("CONFIG",DEBUG,"Detected ConfigThread exiting, tidying up...");
+ delete ConfigThread;
+ this->XLines->CheckELines();
+ this->XLines->ApplyLines();
+ this->Res->Rehash();
+ this->ResetMaxBans();
+ InitializeDisabledCommands(Config->DisabledCommands, this);
+ FOREACH_MOD_I(this, I_OnRehash, OnRehash(Config->RehashUser, Config->RehashParameter));
+ this->BuildISupport();
+ }
+
/* time() seems to be a pretty expensive syscall, so avoid calling it too much.
* Once per loop iteration is pleanty.
*/