X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Finspircd.cpp;h=11ea679e791d839306c3efc0d4f0a3c21973b152;hb=3df81381bcfee4531599ddb417a31e7efca2528e;hp=229d228cab937eef21da69a4737d08828fa0e01c;hpb=59a78436cc67193f67303e7692f177496800057c;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 229d228ca..11ea679e7 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -11,8 +11,6 @@ * --------------------------------------------------- */ -/* w00t was here. ;p */ - /* $Install: src/inspircd $(BINPATH) */ #include "inspircd.h" #include @@ -29,13 +27,6 @@ #define RUSAGE_SELF 0 #endif - /* CRT memory debugging */ - #ifdef DEBUG - #define _CRTDBG_MAP_ALLOC - #include - #include - #endif - #include // setuid #include // setgid #endif @@ -90,7 +81,7 @@ const char* ExitCodes[] = "CreateEvent failed" /* 19 */ }; -template void DeleteZero(T* n) +template static void DeleteZero(T* n) { if (n != NULL) { @@ -160,8 +151,6 @@ void InspIRCd::Cleanup() /* Close logging */ this->Logs->CloseLogs(); DeleteZero(this->Logs); - - delete RehashFinishMutex; } void InspIRCd::Restart(const std::string &reason) @@ -239,6 +228,8 @@ void InspIRCd::SetSignals() signal(SIGHUP, InspIRCd::SetSignal); signal(SIGPIPE, SIG_IGN); signal(SIGCHLD, SIG_IGN); + /* We want E2BIG not a signal! */ + signal(SIGXFSZ, SIG_IGN); #endif signal(SIGTERM, InspIRCd::SetSignal); } @@ -326,7 +317,7 @@ void InspIRCd::WritePID(const std::string &filename) InspIRCd::InspIRCd(int argc, char** argv) : GlobalCulls(this), - /* Functor initialisation. Note that the ordering here is very important. + /* Functor initialisation. Note that the ordering here is very important. * * THIS MUST MATCH ORDER OF DECLARATION OF THE HandleWhateverFunc classes * within class InspIRCd. @@ -358,7 +349,7 @@ InspIRCd::InspIRCd(int argc, char** argv) #ifdef WIN32 // Strict, frequent checking of memory on debug builds _CrtSetDbgFlag ( _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); - + // Avoid erroneous frees on early exit WindowsIPC = 0; #endif @@ -366,7 +357,7 @@ InspIRCd::InspIRCd(int argc, char** argv) FailedPortList pl; int do_version = 0, do_nofork = 0, do_debug = 0, do_nolog = 0, do_root = 0, do_testsuite = 0; /* flag variables */ - char c = 0; + int c = 0; // Initialize so that if we exit before proper initialization they're not deleted this->Logs = 0; @@ -398,19 +389,16 @@ InspIRCd::InspIRCd(int argc, char** argv) SE = SEF->Create(this); delete SEF; - ThreadEngineFactory* tef = new ThreadEngineFactory(); - this->Threads = tef->Create(this); - delete tef; - this->Mutexes = new MutexFactory(this); + this->Threads = new ThreadEngine(this); /* Default implementation does nothing */ this->PI = new ProtocolInterface(this); this->s_signal = 0; - + // Create base manager classes early, so nothing breaks this->Users = new UserManager(this); - + this->Users->unregistered_count = 0; this->Users->clientlist = new user_hash(); @@ -457,7 +445,8 @@ InspIRCd::InspIRCd(int argc, char** argv) { 0, 0, 0, 0 } }; - while ((c = getopt_long_only(argc, argv, ":f:", longopts, NULL)) != -1) + int index; + while ((c = getopt_long_only(argc, argv, ":f:", longopts, &index)) != -1) { switch (c) { @@ -472,8 +461,11 @@ InspIRCd::InspIRCd(int argc, char** argv) case 0: /* getopt_long_only() set an int variable, just keep going */ break; + case '?': + /* Unknown parameter */ default: - /* Unknown parameter! DANGER, INTRUDER.... err.... yeah. */ + /* Fall through to handle other weird values too */ + printf("Unknown parameter '%s'\n", argv[index]); printf("Usage: %s [--nofork] [--nolog] [--debug] [--logfile ]\n\ [--runasroot] [--version] [--config ] [--testsuite]\n", argv[0]); Exit(EXIT_STATUS_ARGV); @@ -523,7 +515,7 @@ InspIRCd::InspIRCd(int argc, char** argv) { #ifdef WIN32 /* Windows can (and defaults to) hide file extensions, so let's play a bit nice for windows users. */ - std::string txtconf = this->ConfigFilename; + std::string txtconf = this->ConfigFileName; txtconf.append(".txt"); if (ServerConfig::FileExists(txtconf.c_str())) @@ -543,7 +535,7 @@ InspIRCd::InspIRCd(int argc, char** argv) printf_c("(C) InspIRCd Development Team.\033[0m\n\n"); printf_c("Developers:\n"); printf_c("\t\033[1;32mBrain, FrostyCoolSlug, w00t, Om, Special\n"); - printf_c("\t\033[1;32mpippijn, peavey, aquanight, fez, psychon, dz\033[0m\n\n"); + 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(); @@ -632,7 +624,7 @@ InspIRCd::InspIRCd(int argc, char** argv) printf("\n"); this->Modules->LoadAll(); - + /* Just in case no modules were loaded - fix for bug #101 */ this->BuildISupport(); InitializeDisabledCommands(Config->DisabledCommands, this); @@ -650,7 +642,7 @@ InspIRCd::InspIRCd(int argc, char** argv) } printf("\nInspIRCd is now running as '%s'[%s] with %d max open sockets\n", Config->ServerName,Config->GetSID().c_str(), SE->GetMaxFds()); - + #ifndef WINDOWS if (!Config->nofork) { @@ -763,8 +755,6 @@ int InspIRCd::Run() Exit(0); } - RehashFinishMutex = Mutexes->CreateMutex(); - while (true) { #ifndef WIN32 @@ -776,8 +766,7 @@ int InspIRCd::Run() #endif /* Check if there is a config thread which has finished executing but has not yet been freed */ - RehashFinishMutex->Lock(); - if (this->ConfigThread && this->ConfigThread->GetExitFlag()) + if (this->ConfigThread && this->ConfigThread->IsDone()) { /* Rehash has completed */ @@ -812,7 +801,6 @@ int InspIRCd::Run() delete ConfigThread; ConfigThread = NULL; } - RehashFinishMutex->Unlock(); /* time() seems to be a pretty expensive syscall, so avoid calling it too much. * Once per loop iteration is pleanty. @@ -859,7 +847,7 @@ int InspIRCd::Run() this->stats->LastCPU = ru.ru_utime; } #else - WindowsIPC->Check(); + WindowsIPC->Check(); #endif }