1 //===-- SBQueueItem.cpp -----------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "lldb/lldb-forward.h"
12 #include "lldb/API/SBAddress.h"
13 #include "lldb/API/SBQueueItem.h"
14 #include "lldb/API/SBThread.h"
15 #include "lldb/Core/Address.h"
16 #include "lldb/Core/Log.h"
17 #include "lldb/Target/Process.h"
18 #include "lldb/Target/QueueItem.h"
19 #include "lldb/Target/Thread.h"
22 using namespace lldb_private;
24 //----------------------------------------------------------------------
26 //----------------------------------------------------------------------
27 SBQueueItem::SBQueueItem () :
32 SBQueueItem::SBQueueItem (const QueueItemSP& queue_item_sp) :
33 m_queue_item_sp (queue_item_sp)
37 //----------------------------------------------------------------------
39 //----------------------------------------------------------------------
40 SBQueueItem::~SBQueueItem()
42 m_queue_item_sp.reset();
46 SBQueueItem::IsValid() const
48 bool is_valid = m_queue_item_sp.get() != NULL;
49 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
51 log->Printf("SBQueueItem(%p)::IsValid() == %s",
52 static_cast<void*>(m_queue_item_sp.get()),
53 is_valid ? "true" : "false");
61 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
63 log->Printf("SBQueueItem(%p)::Clear()",
64 static_cast<void*>(m_queue_item_sp.get()));
65 m_queue_item_sp.reset();
70 SBQueueItem::SetQueueItem (const QueueItemSP& queue_item_sp)
72 m_queue_item_sp = queue_item_sp;
77 SBQueueItem::GetKind () const
79 QueueItemKind result = eQueueItemKindUnknown;
80 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
83 result = m_queue_item_sp->GetKind ();
86 log->Printf("SBQueueItem(%p)::GetKind() == %d",
87 static_cast<void*>(m_queue_item_sp.get()),
88 static_cast<int>(result));
93 SBQueueItem::SetKind (lldb::QueueItemKind kind)
97 m_queue_item_sp->SetKind (kind);
102 SBQueueItem::GetAddress () const
105 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
108 result.SetAddress (&m_queue_item_sp->GetAddress());
113 const Address *addr = result.get();
115 addr->Dump (&sstr, NULL, Address::DumpStyleModuleWithFileAddress, Address::DumpStyleInvalid, 4);
116 log->Printf ("SBQueueItem(%p)::GetAddress() == SBAddress(%p): %s",
117 static_cast<void*>(m_queue_item_sp.get()),
118 static_cast<void*>(result.get()), sstr.GetData());
124 SBQueueItem::SetAddress (SBAddress addr)
128 m_queue_item_sp->SetAddress (addr.ref());
133 SBQueueItem::GetExtendedBacktraceThread (const char *type)
136 Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_API));
139 ProcessSP process_sp = m_queue_item_sp->GetProcessSP();
140 Process::StopLocker stop_locker;
141 if (process_sp && stop_locker.TryLock(&process_sp->GetRunLock()))
144 ConstString type_const (type);
145 thread_sp = m_queue_item_sp->GetExtendedBacktraceThread (type_const);
148 // Save this in the Process' ExtendedThreadList so a strong pointer retains the
150 process_sp->GetExtendedThreadList().AddThread (thread_sp);
151 result.SetThread (thread_sp);
154 const char *queue_name = thread_sp->GetQueueName();
155 if (queue_name == NULL)
157 log->Printf ("SBQueueItem(%p)::GetExtendedBacktraceThread() = new extended Thread created (%p) with queue_id 0x%" PRIx64 " queue name '%s'",
158 static_cast<void*>(m_queue_item_sp.get()),
159 static_cast<void*>(thread_sp.get()),
160 static_cast<uint64_t>(thread_sp->GetQueueID()),