From 4315a113935902bbbb82047e3f43695b4d76fff2 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Wed, 17 Jun 2015 15:38:00 +0100 Subject: Fixed and improved restarting Restarts are now an actual, close-as-possible to application exit+reopen. --- src/OSSupport/NetworkSingleton.cpp | 53 ++++++++++++++++++++++---------------- src/OSSupport/NetworkSingleton.h | 11 ++++---- 2 files changed, 37 insertions(+), 27 deletions(-) (limited to 'src/OSSupport') diff --git a/src/OSSupport/NetworkSingleton.cpp b/src/OSSupport/NetworkSingleton.cpp index 417fab01e..c16f92c5a 100644 --- a/src/OSSupport/NetworkSingleton.cpp +++ b/src/OSSupport/NetworkSingleton.cpp @@ -18,8 +18,36 @@ -cNetworkSingleton::cNetworkSingleton(void): - m_HasTerminated(false) +cNetworkSingleton::cNetworkSingleton() : + m_HasTerminated(true) +{ +} + + + + + +cNetworkSingleton::~cNetworkSingleton() +{ + // Check that Terminate has been called already: + ASSERT(m_HasTerminated); +} + + + + + +cNetworkSingleton & cNetworkSingleton::Get(void) +{ + static cNetworkSingleton Instance; + return Instance; +} + + + + + +void cNetworkSingleton::Initialise(void) { // Windows: initialize networking: #ifdef _WIN32 @@ -64,26 +92,7 @@ cNetworkSingleton::cNetworkSingleton(void): // Create the event loop thread: m_EventLoopThread = std::thread(RunEventLoop, this); -} - - - - - -cNetworkSingleton::~cNetworkSingleton() -{ - // Check that Terminate has been called already: - ASSERT(m_HasTerminated); -} - - - - - -cNetworkSingleton & cNetworkSingleton::Get(void) -{ - static cNetworkSingleton Instance; - return Instance; + m_HasTerminated = false; } diff --git a/src/OSSupport/NetworkSingleton.h b/src/OSSupport/NetworkSingleton.h index 0536a1c82..c72df38ec 100644 --- a/src/OSSupport/NetworkSingleton.h +++ b/src/OSSupport/NetworkSingleton.h @@ -44,13 +44,18 @@ typedef std::vector cIPLookupPtrs; class cNetworkSingleton { public: + cNetworkSingleton(); ~cNetworkSingleton(); /** Returns the singleton instance of this class */ static cNetworkSingleton & Get(void); + /** Initialises all network-related threads. + To be called on first run or after app restart. */ + void Initialise(void); + /** Terminates all network-related threads. - To be used only on app shutdown. + To be used only on app shutdown or restart. MSVC runtime requires that the LibEvent networking be shut down before the main() function is exitted; this is the way to do it. */ void Terminate(void); @@ -122,10 +127,6 @@ protected: /** The thread in which the main LibEvent loop runs. */ std::thread m_EventLoopThread; - - /** Initializes the LibEvent internals. */ - cNetworkSingleton(void); - /** Converts LibEvent-generated log events into log messages in MCS log. */ static void LogCallback(int a_Severity, const char * a_Msg); -- cgit v1.2.3