X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Finspircd.cpp;h=11ea679e791d839306c3efc0d4f0a3c21973b152;hb=3df81381bcfee4531599ddb417a31e7efca2528e;hp=e6b86359127ab60e75dad3af5d38b6f12a63997f;hpb=b6dbd6caab62bc2c0d11ce5a45d511611eb9c2ef;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/inspircd.cpp b/src/inspircd.cpp index e6b863591..11ea679e7 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -151,8 +151,6 @@ void InspIRCd::Cleanup() /* Close logging */ this->Logs->CloseLogs(); DeleteZero(this->Logs); - - delete RehashFinishMutex; } void InspIRCd::Restart(const std::string &reason) @@ -359,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; @@ -391,10 +389,7 @@ 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); @@ -450,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) { @@ -465,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); @@ -756,8 +755,6 @@ int InspIRCd::Run() Exit(0); } - RehashFinishMutex = Mutexes->CreateMutex(); - while (true) { #ifndef WIN32 @@ -769,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 */ @@ -805,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.