summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmConnection.cxx6
-rw-r--r--Source/cmServer.cxx6
-rw-r--r--Source/cmServer.h9
3 files changed, 21 insertions, 0 deletions
diff --git a/Source/cmConnection.cxx b/Source/cmConnection.cxx
index c0d1b82..f482412 100644
--- a/Source/cmConnection.cxx
+++ b/Source/cmConnection.cxx
@@ -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) {
diff --git a/Source/cmServer.cxx b/Source/cmServer.cxx
index b1b4020..30d0f51 100644
--- a/Source/cmServer.cxx
+++ b/Source/cmServer.cxx
@@ -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);
diff --git a/Source/cmServer.h b/Source/cmServer.h
index d8f73c1..15fd2ba 100644
--- a/Source/cmServer.h
+++ b/Source/cmServer.h
@@ -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;