return new CommandRehash(Instance);
}
-CmdResult CommandRehash::Handle (const char** parameters, int pcnt, User *user)
+CmdResult CommandRehash::Handle (const char* const* parameters, int pcnt, User *user)
{
user->WriteServ("382 %s %s :Rehashing",user->nick,ServerConfig::CleanFilename(ServerInstance->ConfigFileName));
std::string parameter;
ServerInstance->SNO->WriteToSnoMask('A', "%s is rehashing config file %s",user->nick,ServerConfig::CleanFilename(ServerInstance->ConfigFileName));
ServerInstance->Logs->CloseLogs();
if (!ServerInstance->OpenLog(ServerInstance->Config->argv, ServerInstance->Config->argc))
- user->WriteServ("*** NOTICE %s :ERROR: Could not open logfile %s: %s", user->nick, ServerInstance->Config->logpath.c_str(), strerror(errno));
+ user->WriteServ("NOTICE %s :*** ERROR: Could not open logfile %s: %s", user->nick, ServerInstance->Config->logpath.c_str(), strerror(errno));
ServerInstance->RehashUsersAndChans();
FOREACH_MOD(I_OnGarbageCollect, OnGarbageCollect());
- /*ServerInstance->Config->Read(false,user);*/
- // Get XLine to do it's thing.
- ServerInstance->XLines->CheckELines();
- ServerInstance->XLines->ApplyLines();
- ServerInstance->Res->Rehash();
- ServerInstance->ResetMaxBans();
+ if (!ServerInstance->ConfigThread)
+ {
+ ServerInstance->Config->RehashUser = user;
+ ServerInstance->Config->RehashParameter = parameter;
+
+ ServerInstance->ConfigThread = new ConfigReaderThread(ServerInstance, false, user);
+ ServerInstance->Threads->Create(ServerInstance->ConfigThread);
+ }
+ else
+ {
+ /* A rehash is already in progress! ahh shit. */
+ user->WriteServ("*** NOTICE %s :*** Could not rehash: A rehash is already in progress.", user->nick);
+ return CMD_FAILURE;
+ }
}
- if (old_disabled != ServerInstance->Config->DisabledCommands)
- InitializeDisabledCommands(ServerInstance->Config->DisabledCommands, ServerInstance);
-
- FOREACH_MOD(I_OnRehash,OnRehash(user, parameter));
-
- ServerInstance->BuildISupport();
return CMD_SUCCESS;
}