Fix thread name updating in Linux. "thread list" should report correct names always now.
Created new LinuxThread class inherited from POSIXThread and removed linux / freebsd ifdefs
Removed several un-needed set thread name calls
CR (and multiple suggestions): mkopec
llvm-svn: 187545
diff --git a/lldb/source/Plugins/Process/POSIX/POSIXThread.cpp b/lldb/source/Plugins/Process/POSIX/POSIXThread.cpp
index a5cccee..93c2966 100644
--- a/lldb/source/Plugins/Process/POSIX/POSIXThread.cpp
+++ b/lldb/source/Plugins/Process/POSIX/POSIXThread.cpp
@@ -45,6 +45,7 @@
: Thread(process, tid),
m_frame_ap (),
m_breakpoint (),
+ m_thread_name_valid (false),
m_thread_name ()
{
Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_THREAD));
@@ -111,7 +112,8 @@
void
POSIXThread::SetName (const char *name)
{
- if (name && name[0])
+ m_thread_name_valid = (name && name[0]);
+ if (m_thread_name_valid)
m_thread_name.assign (name);
else
m_thread_name.clear();
@@ -120,6 +122,12 @@
const char *
POSIXThread::GetName ()
{
+ if (!m_thread_name_valid)
+ {
+ SetName(Host::GetThreadName(GetProcess()->GetID(), GetID()).c_str());
+ m_thread_name_valid = true;
+ }
+
if (m_thread_name.empty())
return NULL;
return m_thread_name.c_str();
@@ -460,22 +468,6 @@
void
POSIXThread::TraceNotify(const ProcessMessage &message)
{
-#ifndef __FreeBSD__
- RegisterContextPOSIX* reg_ctx = GetRegisterContextPOSIX();
- if (reg_ctx)
- {
- uint32_t num_hw_wps = reg_ctx->NumSupportedHardwareWatchpoints();
- uint32_t wp_idx;
- for (wp_idx = 0; wp_idx < num_hw_wps; wp_idx++)
- {
- if (reg_ctx->IsWatchpointHit(wp_idx))
- {
- WatchNotify(message);
- return;
- }
- }
- }
-#endif
SetStopInfo (StopInfo::CreateStopReasonToTrace(*this));
}
diff --git a/lldb/source/Plugins/Process/POSIX/POSIXThread.h b/lldb/source/Plugins/Process/POSIX/POSIXThread.h
index 59b02a7..d051d23 100644
--- a/lldb/source/Plugins/Process/POSIX/POSIXThread.h
+++ b/lldb/source/Plugins/Process/POSIX/POSIXThread.h
@@ -91,7 +91,7 @@
uint32_t FindVacantWatchpointIndex();
-private:
+protected:
RegisterContextPOSIX *
GetRegisterContextPOSIX ()
{
@@ -107,6 +107,7 @@
lldb::BreakpointSiteSP m_breakpoint;
+ bool m_thread_name_valid;
std::string m_thread_name;
ProcessMonitor &
@@ -117,7 +118,7 @@
void BreakNotify(const ProcessMessage &message);
void WatchNotify(const ProcessMessage &message);
- void TraceNotify(const ProcessMessage &message);
+ virtual void TraceNotify(const ProcessMessage &message);
void LimboNotify(const ProcessMessage &message);
void SignalNotify(const ProcessMessage &message);
void SignalDeliveredNotify(const ProcessMessage &message);
diff --git a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp
index 1cba5f1..545e792 100644
--- a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp
+++ b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp
@@ -479,6 +479,12 @@
return added_to_set;
}
+POSIXThread *
+ProcessPOSIX::CreateNewPOSIXThread(lldb_private::Process &process, lldb::tid_t tid)
+{
+ return new POSIXThread(process, tid);
+}
+
void
ProcessPOSIX::RefreshStateAfterStop()
{
@@ -508,10 +514,7 @@
log->Printf ("ProcessPOSIX::%s() adding thread, tid = %" PRIi64, __FUNCTION__, message.GetChildTID());
lldb::tid_t child_tid = message.GetChildTID();
ThreadSP thread_sp;
- thread_sp.reset(new POSIXThread(*this, child_tid));
-
- POSIXThread *thread = static_cast<POSIXThread*>(thread_sp.get());
- thread->SetName(Host::GetThreadName(GetID(), child_tid).c_str());
+ thread_sp.reset(CreateNewPOSIXThread(*this, child_tid));
Mutex::Locker lock(m_thread_list.GetMutex());
@@ -821,7 +824,7 @@
assert(m_monitor);
ThreadSP thread_sp (old_thread_list.FindThreadByID (GetID(), false));
if (!thread_sp) {
- thread_sp.reset(new POSIXThread(*this, GetID()));
+ thread_sp.reset(CreateNewPOSIXThread(*this, GetID()));
}
if (log && log->GetMask().Test(POSIX_LOG_VERBOSE))
diff --git a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.h b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.h
index fd029ef..48b19ba 100644
--- a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.h
+++ b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.h
@@ -22,6 +22,7 @@
#include "ProcessMessage.h"
class ProcessMonitor;
+class POSIXThread;
class ProcessPOSIX :
public lldb_private::Process
@@ -166,6 +167,9 @@
bool
AddThreadForInitialStopIfNeeded(lldb::tid_t stop_tid);
+ virtual POSIXThread *
+ CreateNewPOSIXThread(lldb_private::Process &process, lldb::tid_t tid);
+
protected:
/// Target byte order.
lldb::ByteOrder m_byte_order;