// 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 */
this->XLines = 0;
this->Modes = 0;
this->Res = 0;
+ this->ConfigThread = NULL;
// Initialise TIME
this->TIME = time(NULL);
/* Unknown parameter */
default:
/* Fall through to handle other weird values too */
- printf("Unknown parameter '%s'\n", argv[index]);
- printf("Usage: %s [--nofork] [--nolog] [--debug] [--logfile <filename>]\n\
- [--runasroot] [--version] [--config <config>] [--testsuite]\n", argv[0]);
+ printf("Unknown parameter '%s'\n", argv[optind-1]);
+ printf("Usage: %s [--nofork] [--nolog] [--debug] [--logfile <filename>]\n%*s[--runasroot] [--version] [--config <config>] [--testsuite]\n", argv[0], static_cast<int>(8+strlen(argv[0])), " ");
Exit(EXIT_STATUS_ARGV);
break;
}
WSAStartup(MAKEWORD(2,0), &wsadata);
ChangeWindowsSpecificPointers(this);
#endif
- strlcpy(Config->MyExecutable,argv[0],MAXBUF);
+ Config->MyExecutable = argv[0];
/* Set the finished argument values */
Config->nofork = do_nofork;
printf_c("\t\033[1;32mpeavey, aquanight, psychon, dz, danieldg\033[0m\n\n");
printf_c("Others:\t\t\t\033[1;32mSee /INFO Output\033[0m\n");
- Config->ClearStack();
-
this->Modes = new ModeParser(this);
if (!do_root)
/* 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 */
this->XLines->CheckELines();
this->XLines->ApplyLines();
- CheckDie();
- int bounditems = BindPorts(true, found_ports, pl);
+ int bounditems = BindPorts(pl);
printf("\n");
/* Just in case no modules were loaded - fix for bug #101 */
this->BuildISupport();
- InitializeDisabledCommands(Config->DisabledCommands, this);
+ Config->ApplyDisabledCommands(Config->DisabledCommands);
- 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;
if (this->ConfigThread && this->ConfigThread->IsDone())
{
/* Rehash has completed */
-
- /* 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.
- *
- * XXX: The order of these is IMPORTANT, do not reorder them without testing
- * thoroughly!!!
- */
- this->XLines->CheckELines();
- this->XLines->ApplyLines();
- this->Res->Rehash();
- this->ResetMaxBans();
- InitializeDisabledCommands(Config->DisabledCommands, this);
- User* user = !Config->RehashUserUID.empty() ? FindNick(Config->RehashUserUID) : NULL;
- FOREACH_MOD_I(this, I_OnRehash, OnRehash(user));
- this->BuildISupport();
+ this->ConfigThread->Finish();
+ ConfigThread->join();
delete ConfigThread;
ConfigThread = NULL;
}