1 //===-- SBQueueItem.cpp -----------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "lldb/lldb-python.h" 11 #include "lldb/lldb-forward.h" 12 13 #include "lldb/API/SBAddress.h" 14 #include "lldb/API/SBQueueItem.h" 15 #include "lldb/API/SBThread.h" 16 #include "lldb/Core/Address.h" 17 #include "lldb/Target/Process.h" 18 #include "lldb/Target/QueueItem.h" 19 #include "lldb/Target/Thread.h" 20 21 using namespace lldb; 22 using namespace lldb_private; 23 24 //---------------------------------------------------------------------- 25 // Constructors 26 //---------------------------------------------------------------------- 27 SBQueueItem::SBQueueItem () : 28 m_queue_item_sp() 29 { 30 } 31 32 SBQueueItem::SBQueueItem (const QueueItemSP& queue_item_sp) : 33 m_queue_item_sp (queue_item_sp) 34 { 35 } 36 37 //---------------------------------------------------------------------- 38 // Destructor 39 //---------------------------------------------------------------------- 40 SBQueueItem::~SBQueueItem() 41 { 42 m_queue_item_sp.reset(); 43 } 44 45 bool 46 SBQueueItem::IsValid() const 47 { 48 return m_queue_item_sp.get() != NULL; 49 } 50 51 52 void 53 SBQueueItem::Clear () 54 { 55 m_queue_item_sp.reset(); 56 } 57 58 59 void 60 SBQueueItem::SetQueueItem (const QueueItemSP& queue_item_sp) 61 { 62 m_queue_item_sp = queue_item_sp; 63 } 64 65 66 lldb::QueueItemKind 67 SBQueueItem::GetKind () const 68 { 69 QueueItemKind result = eQueueItemKindUnknown; 70 if (m_queue_item_sp) 71 { 72 result = m_queue_item_sp->GetKind (); 73 } 74 return result; 75 } 76 77 void 78 SBQueueItem::SetKind (lldb::QueueItemKind kind) 79 { 80 if (m_queue_item_sp) 81 { 82 m_queue_item_sp->SetKind (kind); 83 } 84 } 85 86 SBAddress 87 SBQueueItem::GetAddress () const 88 { 89 SBAddress result; 90 if (m_queue_item_sp) 91 { 92 result.SetAddress (&m_queue_item_sp->GetAddress()); 93 } 94 return result; 95 } 96 97 void 98 SBQueueItem::SetAddress (SBAddress addr) 99 { 100 if (m_queue_item_sp) 101 { 102 m_queue_item_sp->SetAddress (addr.ref()); 103 } 104 } 105 106 SBThread 107 SBQueueItem::GetExtendedBacktraceThread (const char *type) 108 { 109 SBThread result; 110 if (m_queue_item_sp) 111 { 112 ProcessSP process_sp = m_queue_item_sp->GetProcessSP(); 113 Process::StopLocker stop_locker; 114 if (process_sp && stop_locker.TryLock(&process_sp->GetRunLock())) 115 { 116 ThreadSP thread_sp; 117 ConstString type_const (type); 118 thread_sp = m_queue_item_sp->GetExtendedBacktraceThread (type_const); 119 if (thread_sp) 120 { 121 // Save this in the Process' ExtendedThreadList so a strong pointer retains the 122 // object 123 process_sp->GetExtendedThreadList().AddThread (thread_sp); 124 result.SetThread (thread_sp); 125 } 126 } 127 } 128 return result; 129 } 130