diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/commands/cmd_rehash.cpp | 21 | ||||
-rw-r--r-- | src/inspircd.cpp | 14 |
2 files changed, 17 insertions, 18 deletions
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. */ |