Self tests (#3242)

* SelfTests: Added a cEvent stress-test.

* cNetwork: Fixed startup event hang.

The original code used to hang with a ~ 1:50000 chance, because on Linux the cEvent was destroyed before its "Set()" returned.
This commit is contained in:
Mattes D
2016-06-26 14:51:12 +01:00
committed by worktycho
parent 4e2c92d15f
commit 1462e4f70e
5 changed files with 114 additions and 6 deletions
+2 -5
View File
@@ -91,10 +91,8 @@ void cNetworkSingleton::Initialise(void)
// Create the event loop thread:
m_HasTerminated = false;
m_StartupEvent.reset(new cEvent);
m_EventLoopThread = std::thread(RunEventLoop, this);
m_StartupEvent->Wait(); // Wait for the LibEvent loop to actually start running (otherwise calling Terminate too soon would hang, see #3228)
m_StartupEvent.reset(); // Don't need the cEvent any more, release all its resources
m_StartupEvent.Wait(); // Wait for the LibEvent loop to actually start running (otherwise calling Terminate too soon would hang, see #3228)
}
@@ -169,8 +167,7 @@ void cNetworkSingleton::SignalizeStartup(evutil_socket_t a_Socket, short a_Event
{
auto self = reinterpret_cast<cNetworkSingleton *>(a_Self);
ASSERT(self != nullptr);
ASSERT(self->m_StartupEvent != nullptr);
self->m_StartupEvent->Set();
self->m_StartupEvent.Set();
}
+1 -1
View File
@@ -129,7 +129,7 @@ protected:
std::thread m_EventLoopThread;
/** Event that is signalled once the startup is finished and the LibEvent loop is running. */
UniquePtr<cEvent> m_StartupEvent;
cEvent m_StartupEvent;
/** Converts LibEvent-generated log events into log messages in MCS log. */