summaryrefslogtreecommitdiff
path: root/src/inspircd.cpp
diff options
context:
space:
mode:
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-07-01 22:55:46 +0000
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>2009-07-01 22:55:46 +0000
commitc384697c88aa54b5a532cd2edce3c063c70d7868 (patch)
tree3fc454072b3956f241b091265f606bb9c6ca7f67 /src/inspircd.cpp
parent50eebfeac8ebe501b021ebf62b0b01464fd79a21 (diff)
Make rehash generate a new ServerInstance->Config object
This makes it possible to cancel a pending rehash, and fixes possible threading issues with rehash and other events. git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11424 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/inspircd.cpp')
-rw-r--r--src/inspircd.cpp22
1 files changed, 10 insertions, 12 deletions
diff --git a/src/inspircd.cpp b/src/inspircd.cpp
index 630216d6e..ca89e0ef3 100644
--- a/src/inspircd.cpp
+++ b/src/inspircd.cpp
@@ -352,7 +352,6 @@ InspIRCd::InspIRCd(int argc, char** argv)
// Avoid erroneous frees on early exit
WindowsIPC = 0;
#endif
- int found_ports = 0;
FailedPortList pl;
int do_version = 0, do_nofork = 0, do_debug = 0,
do_nolog = 0, do_root = 0, do_testsuite = 0; /* flag variables */
@@ -374,6 +373,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
this->XLines = 0;
this->Modes = 0;
this->Res = 0;
+ this->ConfigThread = NULL;
// Initialise TIME
this->TIME = time(NULL);
@@ -573,11 +573,8 @@ InspIRCd::InspIRCd(int argc, char** argv)
/* During startup we don't actually initialize this
* in the thread engine.
*/
- this->ConfigThread = new ConfigReaderThread(this, true, "");
- ConfigThread->Run();
- delete ConfigThread;
- this->ConfigThread = NULL;
- /* Switch over logfiles */
+ this->Config->Read();
+ this->Config->Apply(NULL, "");
Logs->OpenFileLogs();
/** Note: This is safe, the method checks for user == NULL */
@@ -618,7 +615,7 @@ InspIRCd::InspIRCd(int argc, char** argv)
this->XLines->ApplyLines();
CheckDie();
- int bounditems = BindPorts(true, found_ports, pl);
+ int bounditems = BindPorts(pl);
printf("\n");
@@ -628,9 +625,10 @@ InspIRCd::InspIRCd(int argc, char** argv)
this->BuildISupport();
InitializeDisabledCommands(Config->DisabledCommands, this);
- if (ports.size() != (unsigned int)found_ports)
+ if (!pl.empty())
{
- printf("\nWARNING: Not all your client ports could be bound --\nstarting anyway with %d of %d client ports bound.\n\n", bounditems, found_ports);
+ printf("\nWARNING: Not all your client ports could be bound --\nstarting anyway with %d of %d client ports bound.\n\n",
+ bounditems, bounditems + (int)pl.size());
printf("The following port(s) failed to bind:\n");
printf("Hint: Try using a public IP instead of blank or *\n\n");
int j = 1;
@@ -768,13 +766,12 @@ int InspIRCd::Run()
if (this->ConfigThread && this->ConfigThread->IsDone())
{
/* Rehash has completed */
+ this->Logs->Log("CONFIG",DEBUG,"Detected ConfigThread exiting, tidying up...");
/* Switch over logfiles */
Logs->CloseLogs();
Logs->OpenFileLogs();
- this->Logs->Log("CONFIG",DEBUG,"Detected ConfigThread exiting, tidying up...");
-
/*
* Apply the changed configuration from the rehash. This is not done within the
* configuration thread becasuse they may invoke functions that are not threadsafe.
@@ -782,12 +779,13 @@ int InspIRCd::Run()
* XXX: The order of these is IMPORTANT, do not reorder them without testing
* thoroughly!!!
*/
+ this->ConfigThread->Finish();
this->XLines->CheckELines();
this->XLines->ApplyLines();
this->Res->Rehash();
this->ResetMaxBans();
InitializeDisabledCommands(Config->DisabledCommands, this);
- User* user = !Config->RehashUserUID.empty() ? FindNick(Config->RehashUserUID) : NULL;
+ User* user = ConfigThread->TheUserUID.empty() ? FindNick(ConfigThread->TheUserUID) : NULL;
FOREACH_MOD_I(this, I_OnRehash, OnRehash(user));
this->BuildISupport();