diff --git a/lldb/include/lldb/Target/ThreadCollection.h b/lldb/include/lldb/Target/ThreadCollection.h index 5b0267d76d42..e3965b57e7a6 100644 --- a/lldb/include/lldb/Target/ThreadCollection.h +++ b/lldb/include/lldb/Target/ThreadCollection.h @@ -48,11 +48,11 @@ public: return ThreadIterable(m_threads, GetMutex()); } - virtual std::recursive_mutex &GetMutex() { return m_mutex; } + virtual std::recursive_mutex &GetMutex() const { return m_mutex; } protected: collection m_threads; - std::recursive_mutex m_mutex; + mutable std::recursive_mutex m_mutex; }; } // namespace lldb_private diff --git a/lldb/include/lldb/Target/ThreadList.h b/lldb/include/lldb/Target/ThreadList.h index d0779d810163..9e3c940c3c2d 100644 --- a/lldb/include/lldb/Target/ThreadList.h +++ b/lldb/include/lldb/Target/ThreadList.h @@ -135,7 +135,7 @@ public: void SetStopID(uint32_t stop_id); - std::recursive_mutex &GetMutex() override; + std::recursive_mutex &GetMutex() const override; void Update(ThreadList &rhs); diff --git a/lldb/source/Target/ThreadList.cpp b/lldb/source/Target/ThreadList.cpp index 15388a5afa1e..1e474518aace 100644 --- a/lldb/source/Target/ThreadList.cpp +++ b/lldb/source/Target/ThreadList.cpp @@ -44,6 +44,7 @@ const ThreadList &ThreadList::operator=(const ThreadList &rhs) { // Lock both mutexes to make sure neither side changes anyone on us // while the assignment occurs std::lock_guard guard(GetMutex()); + std::lock_guard rhs_guard(rhs.GetMutex()); m_process = rhs.m_process; m_stop_id = rhs.m_stop_id; @@ -749,7 +750,7 @@ void ThreadList::Flush() { (*pos)->Flush(); } -std::recursive_mutex &ThreadList::GetMutex() { +std::recursive_mutex &ThreadList::GetMutex() const { return m_process->m_thread_mutex; }