diff options
author | Jason Molenda <jmolenda@apple.com> | 2014-03-10 08:42:03 +0000 |
---|---|---|
committer | Jason Molenda <jmolenda@apple.com> | 2014-03-10 08:42:03 +0000 |
commit | e32cd191f0a57353ea767bf5c0dcf5ec4885b48c (patch) | |
tree | a2d2010a718b871ae5047ae4737d7e49c6c23f6b /lldb/source/Target | |
parent | 6c25ca87a0a8295963e40da716a3a516f4baa325 (diff) | |
download | bcm5719-llvm-e32cd191f0a57353ea767bf5c0dcf5ec4885b48c.tar.gz bcm5719-llvm-e32cd191f0a57353ea767bf5c0dcf5ec4885b48c.zip |
Correctly add the QueueID to a pending block's extended thread backtrace thread.
Seed the QueueItem objects with the item_refs and addresses when they are fetched
in one batch. If additional information is needed from the QueueItem, fetch it
lazily one pending item per function call.
<rdar://problem/16270007>, <rdar://problem/16032150>
llvm-svn: 203449
Diffstat (limited to 'lldb/source/Target')
-rw-r--r-- | lldb/source/Target/QueueItem.cpp | 84 |
1 files changed, 75 insertions, 9 deletions
diff --git a/lldb/source/Target/QueueItem.cpp b/lldb/source/Target/QueueItem.cpp index 40d824bcf46..002187b8d20 100644 --- a/lldb/source/Target/QueueItem.cpp +++ b/lldb/source/Target/QueueItem.cpp @@ -15,11 +15,13 @@ using namespace lldb; using namespace lldb_private; -QueueItem::QueueItem (QueueSP queue_sp, lldb::addr_t item_ref) : +QueueItem::QueueItem (QueueSP queue_sp, ProcessSP process_sp, lldb::addr_t item_ref, lldb_private::Address address) : m_queue_wp (), - m_kind (eQueueItemKindUnknown), - m_address (), + m_process_wp (), m_item_ref (item_ref), + m_address (address), + m_have_fetched_entire_item (false), + m_kind (eQueueItemKindUnknown), m_item_that_enqueued_this_ref (LLDB_INVALID_ADDRESS), m_enqueueing_thread_id (LLDB_INVALID_THREAD_ID), m_enqueueing_queue_id (LLDB_INVALID_QUEUE_ID), @@ -31,6 +33,7 @@ QueueItem::QueueItem (QueueSP queue_sp, lldb::addr_t item_ref) : m_target_queue_label() { m_queue_wp = queue_sp; + m_process_wp = process_sp; } QueueItem::~QueueItem () @@ -38,8 +41,9 @@ QueueItem::~QueueItem () } QueueItemKind -QueueItem::GetKind() const +QueueItem::GetKind() { + FetchEntireItem (); return m_kind; } @@ -64,6 +68,7 @@ QueueItem::SetAddress (Address addr) ThreadSP QueueItem::GetExtendedBacktraceThread (ConstString type) { + FetchEntireItem (); ThreadSP return_thread; QueueSP queue_sp = m_queue_wp.lock(); if (queue_sp) @@ -77,14 +82,75 @@ QueueItem::GetExtendedBacktraceThread (ConstString type) return return_thread; } +lldb::addr_t +QueueItem::GetItemThatEnqueuedThis () +{ + FetchEntireItem (); + return m_item_that_enqueued_this_ref; +} + +lldb::tid_t +QueueItem::GetEnqueueingThreadID () +{ + FetchEntireItem (); + return m_enqueueing_thread_id; +} + +lldb::queue_id_t +QueueItem::GetEnqueueingQueueID () +{ + FetchEntireItem (); + return m_enqueueing_queue_id; +} + +uint32_t +QueueItem::GetStopID () +{ + FetchEntireItem (); + return m_stop_id; +} + +std::vector<lldb::addr_t> & +QueueItem::GetEnqueueingBacktrace () +{ + FetchEntireItem (); + return m_backtrace; +} + +std::string +QueueItem::GetThreadLabel () +{ + FetchEntireItem (); + return m_thread_label; +} + +std::string +QueueItem::GetQueueLabel () +{ + FetchEntireItem (); + return m_queue_label; +} + + ProcessSP QueueItem::GetProcessSP() { - ProcessSP process_sp; - QueueSP queue_sp = m_queue_wp.lock (); - if (queue_sp) + return m_process_wp.lock (); +} + +void +QueueItem::FetchEntireItem() +{ + if (m_have_fetched_entire_item == true) + return; + ProcessSP process_sp = m_process_wp.lock(); + if (process_sp) { - process_sp = queue_sp->GetProcess(); + SystemRuntime *runtime = process_sp->GetSystemRuntime(); + if (runtime) + { + runtime->CompleteQueueItem (this, m_item_ref); + m_have_fetched_entire_item = true; + } } - return process_sp; } |