diff --git a/Queue.h b/Queue.h index 449ff806..316084a9 100644 --- a/Queue.h +++ b/Queue.h @@ -98,17 +98,18 @@ namespace util { public: - MsgQueue (): m_Thread (std::bind (&MsgQueue::Run, this)) {}; + MsgQueue (): m_Thread (std::bind (&MsgQueue::Run, this)) , running(1) {}; void Stop() { - m_Thread.detach(); + running = 0; + m_Thread.join(); } private: void Run () { Msg * msg = nullptr; - while ((msg = Queue::GetNext ()) != nullptr) + while ((msg = Queue::GetNext ()) != nullptr && running) { msg->Process (); delete msg; @@ -117,6 +118,7 @@ namespace util private: std::thread m_Thread; + int running; }; } } diff --git a/i2p.cpp b/i2p.cpp index 355c2003..97914b5e 100644 --- a/i2p.cpp +++ b/i2p.cpp @@ -27,6 +27,7 @@ // Global int running = 1; +int isDaemon; #ifndef _WIN32 void handle_signal(int sig) @@ -59,6 +60,7 @@ void handle_signal(int sig) int main( int argc, char* argv[] ) { i2p::util::config::OptionParser(argc,argv); + isDaemon = i2p::util::config::GetArg("-daemon", 0); #ifdef _WIN32 setlocale(LC_CTYPE, ""); SetConsoleCP(1251); @@ -71,8 +73,22 @@ int main( int argc, char* argv[] ) LogPrint("data directory: ", i2p::util::filesystem::GetDataDir().string()); i2p::util::filesystem::ReadConfigFile(i2p::util::config::mapArgs, i2p::util::config::mapMultiArgs); + int isLogging = i2p::util::config::GetArg("-log", 0); + if (isLogging == 1) + { + std::string logfile = i2p::util::filesystem::GetDataDir().string(); +#ifndef _WIN32 + logfile.append("/debug.log"); +#else + logfile.append("\\debug.log"); +#endif + freopen(logfile.c_str(),"a",stdout); + LogPrint("Logging to file enabled."); + } + + #ifndef _WIN32 - if (i2p::util::config::GetArg("-daemon", 0) == 1) + if (isDaemon == 1) { pid_t pid; pid = fork(); @@ -125,18 +141,6 @@ int main( int argc, char* argv[] ) sigaction(SIGINT,&sa,0); #endif - if (i2p::util::config::GetArg("-log", 0) == 1) - { - std::string logfile = i2p::util::filesystem::GetDataDir().string(); -#ifndef _WIN32 - logfile.append("/debug.log"); -#else - logfile.append("\\debug.log"); -#endif - LogPrint("Logging to file enabled."); - freopen(logfile.c_str(),"a",stdout); - } - //TODO: This is an ugly workaround. fix it. //TODO: Autodetect public IP. i2p::context.OverrideNTCPAddress(i2p::util::config::GetCharArg("-host", "127.0.0.1"), @@ -161,7 +165,7 @@ int main( int argc, char* argv[] ) i2p::data::netdb.Stop (); httpServer.Stop (); - if (i2p::util::config::GetArg("-log", 0) == 1) + if (isLogging == 1) { fclose (stdout); }