server: Added thread check to protect writedata

This commit is contained in:
Justin Berger 2017-07-22 09:29:18 -06:00 committed by Brad King
parent 124424e997
commit 0e4d503384
3 changed files with 21 additions and 0 deletions

View File

@ -69,6 +69,12 @@ bool cmEventBasedConnection::IsOpen() const
void cmEventBasedConnection::WriteData(const std::string& _data)
{
#ifndef NDEBUG
auto curr_thread_id = uv_thread_self();
assert(this->Server);
assert(uv_thread_equal(&curr_thread_id, &this->Server->ServeThreadId));
#endif
auto data = _data;
assert(this->WriteStream);
if (BufferStrategy) {

View File

@ -436,6 +436,12 @@ bool cmServerBase::StartServeThread()
bool cmServerBase::Serve(std::string* errorMessage)
{
#ifndef NDEBUG
uv_thread_t blank_thread_t = {};
assert(uv_thread_equal(&blank_thread_t, &ServeThreadId));
ServeThreadId = uv_thread_self();
#endif
errorMessage->clear();
uv_signal_init(&Loop, &this->SIGINTHandler);

View File

@ -67,6 +67,15 @@ protected:
bool ServeThreadRunning = false;
uv_thread_t ServeThread;
uv_async_t ShutdownSignal;
#ifndef NDEBUG
public:
// When the server starts it will mark down it's current thread ID,
// which is useful in other contexts to just assert that operations
// are performed on that same thread.
uv_thread_t ServeThreadId = {};
protected:
#endif
uv_loop_t Loop;