]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
More stuff
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Sun, 24 Feb 2008 18:52:31 +0000 (18:52 +0000)
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>
Sun, 24 Feb 2008 18:52:31 +0000 (18:52 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9026 e03df62e-2008-0410-955e-edbf42e46eb7

include/configreader.h
src/commands/cmd_rehash.cpp
src/inspircd.cpp

index f4563529ad9954146585ce70222116c91382f78f..3d889f9439f4724408a1bcb4b8eb4817db6e3d3d 100644 (file)
@@ -242,6 +242,10 @@ class CoreExport ServerConfig : public Extensible
 
  public:
 
+       User* RehashUser;
+
+       std::string RehashParameter;
+
        std::ostringstream errstr;
 
        ConfigDataHash newconfig;
index 7fdb9862ed9101c534549b35354b7f66e2d8e7f2..868a4aea22874c290424c96ab677238084b90b1b 100644 (file)
@@ -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;
 }
 
index aaad2746ada3a7206134ebaad5a5e6371e5f1556..de725d0e1601f14bfafd5325a3e4edebab1d69e5 100644 (file)
@@ -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.
                 */