[Lldb-commits] [lldb] r169810 - in /lldb/trunk: include/lldb/API/SBThread.h include/lldb/Target/Thread.h include/lldb/Target/ThreadList.h source/Commands/CommandObjectThread.cpp source/Target/ThreadList.cpp tools/driver/Driver.cpp
Jim Ingham
jingham at apple.com
Mon Dec 10 18:31:49 PST 2012
Author: jingham
Date: Mon Dec 10 20:31:48 2012
New Revision: 169810
URL: http://llvm.org/viewvc/llvm-project?rev=169810&view=rev
Log:
Broadcast an event when the selected thread is changed.
<rdar://problem/10976636>
Modified:
lldb/trunk/include/lldb/API/SBThread.h
lldb/trunk/include/lldb/Target/Thread.h
lldb/trunk/include/lldb/Target/ThreadList.h
lldb/trunk/source/Commands/CommandObjectThread.cpp
lldb/trunk/source/Target/ThreadList.cpp
lldb/trunk/tools/driver/Driver.cpp
Modified: lldb/trunk/include/lldb/API/SBThread.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/API/SBThread.h?rev=169810&r1=169809&r2=169810&view=diff
==============================================================================
--- lldb/trunk/include/lldb/API/SBThread.h (original)
+++ lldb/trunk/include/lldb/API/SBThread.h Mon Dec 10 20:31:48 2012
@@ -26,7 +26,8 @@
eBroadcastBitStackChanged = (1 << 0),
eBroadcastBitThreadSuspended = (1 << 1),
eBroadcastBitThreadResumed = (1 << 2),
- eBroadcastBitSelectedFrameChanged = (1 << 3)
+ eBroadcastBitSelectedFrameChanged = (1 << 3),
+ eBroadcastBitThreadSelected = (1 << 4)
};
static const char *
Modified: lldb/trunk/include/lldb/Target/Thread.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Thread.h?rev=169810&r1=169809&r2=169810&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/Thread.h (original)
+++ lldb/trunk/include/lldb/Target/Thread.h Mon Dec 10 20:31:48 2012
@@ -57,6 +57,7 @@
public Broadcaster
{
friend class ThreadEventData;
+friend class ThreadList;
public:
//------------------------------------------------------------------
@@ -67,7 +68,8 @@
eBroadcastBitStackChanged = (1 << 0),
eBroadcastBitThreadSuspended = (1 << 1),
eBroadcastBitThreadResumed = (1 << 2),
- eBroadcastBitSelectedFrameChanged = (1 << 3)
+ eBroadcastBitSelectedFrameChanged = (1 << 3),
+ eBroadcastBitThreadSelected = (1 << 4)
};
static ConstString &GetStaticBroadcasterClass ();
Modified: lldb/trunk/include/lldb/Target/ThreadList.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/ThreadList.h?rev=169810&r1=169809&r2=169810&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/ThreadList.h (original)
+++ lldb/trunk/include/lldb/Target/ThreadList.h Mon Dec 10 20:31:48 2012
@@ -51,10 +51,10 @@
GetSelectedThread ();
bool
- SetSelectedThreadByID (lldb::tid_t tid);
+ SetSelectedThreadByID (lldb::tid_t tid, bool notify = false);
bool
- SetSelectedThreadByIndexID (uint32_t index_id);
+ SetSelectedThreadByIndexID (uint32_t index_id, bool notify = false);
void
Clear();
@@ -131,6 +131,9 @@
protected:
+ void
+ NotifySelectedThreadChanged (lldb::tid_t tid);
+
typedef std::vector<lldb::ThreadSP> collection;
//------------------------------------------------------------------
// Classes that inherit from Process can see and modify these
Modified: lldb/trunk/source/Commands/CommandObjectThread.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Commands/CommandObjectThread.cpp?rev=169810&r1=169809&r2=169810&view=diff
==============================================================================
--- lldb/trunk/source/Commands/CommandObjectThread.cpp (original)
+++ lldb/trunk/source/Commands/CommandObjectThread.cpp Mon Dec 10 20:31:48 2012
@@ -1185,17 +1185,9 @@
return false;
}
- process->GetThreadList().SetSelectedThreadByID(new_thread->GetID());
+ process->GetThreadList().SetSelectedThreadByID(new_thread->GetID(), true);
result.SetStatus (eReturnStatusSuccessFinishNoResult);
- const uint32_t start_frame = 0;
- const uint32_t num_frames = 1;
- const uint32_t num_frames_with_source = 1;
- new_thread->GetStatus (result.GetOutputStream(),
- start_frame,
- num_frames,
- num_frames_with_source);
-
return result.Succeeded();
}
Modified: lldb/trunk/source/Target/ThreadList.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/ThreadList.cpp?rev=169810&r1=169809&r2=169810&view=diff
==============================================================================
--- lldb/trunk/source/Target/ThreadList.cpp (original)
+++ lldb/trunk/source/Target/ThreadList.cpp Mon Dec 10 20:31:48 2012
@@ -555,7 +555,7 @@
}
bool
-ThreadList::SetSelectedThreadByID (lldb::tid_t tid)
+ThreadList::SetSelectedThreadByID (lldb::tid_t tid, bool notify)
{
Mutex::Locker locker(m_threads_mutex);
ThreadSP selected_thread_sp(FindThreadByID(tid));
@@ -567,11 +567,14 @@
else
m_selected_tid = LLDB_INVALID_THREAD_ID;
+ if (notify)
+ NotifySelectedThreadChanged(m_selected_tid);
+
return m_selected_tid != LLDB_INVALID_THREAD_ID;
}
bool
-ThreadList::SetSelectedThreadByIndexID (uint32_t index_id)
+ThreadList::SetSelectedThreadByIndexID (uint32_t index_id, bool notify)
{
Mutex::Locker locker(m_threads_mutex);
ThreadSP selected_thread_sp (FindThreadByIndexID(index_id));
@@ -583,10 +586,22 @@
else
m_selected_tid = LLDB_INVALID_THREAD_ID;
+ if (notify)
+ NotifySelectedThreadChanged(m_selected_tid);
+
return m_selected_tid != LLDB_INVALID_THREAD_ID;
}
void
+ThreadList::NotifySelectedThreadChanged (lldb::tid_t tid)
+{
+ ThreadSP selected_thread_sp (FindThreadByID(tid));
+ if (selected_thread_sp->EventTypeHasListeners(Thread::eBroadcastBitThreadSelected))
+ selected_thread_sp->BroadcastEvent(Thread::eBroadcastBitThreadSelected,
+ new Thread::ThreadEventData(selected_thread_sp));
+}
+
+void
ThreadList::Update (ThreadList &rhs)
{
if (this != &rhs)
Modified: lldb/trunk/tools/driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/driver/Driver.cpp?rev=169810&r1=169809&r2=169810&view=diff
==============================================================================
--- lldb/trunk/tools/driver/Driver.cpp (original)
+++ lldb/trunk/tools/driver/Driver.cpp Mon Dec 10 20:31:48 2012
@@ -986,7 +986,8 @@
// reprint the thread status for that thread.
using namespace lldb;
const uint32_t event_type = event.GetType();
- if (event_type == SBThread::eBroadcastBitStackChanged)
+ if (event_type == SBThread::eBroadcastBitStackChanged
+ || event_type == SBThread::eBroadcastBitThreadSelected)
{
SBThread thread = SBThread::GetThreadFromEvent (event);
if (thread.IsValid())
@@ -1302,7 +1303,8 @@
SBTarget::eBroadcastBitBreakpointChanged);
listener.StartListeningForEventClass(m_debugger,
SBThread::GetBroadcasterClassName(),
- SBThread::eBroadcastBitStackChanged);
+ SBThread::eBroadcastBitStackChanged |
+ SBThread::eBroadcastBitThreadSelected);
listener.StartListeningForEvents (*m_io_channel_ap,
IOChannel::eBroadcastBitHasUserInput |
IOChannel::eBroadcastBitUserInterrupt |
More information about the lldb-commits
mailing list