15e8dce4dSJason Molenda //===-- SBQueueItem.cpp -----------------------------------------*- C++ -*-===// 25e8dce4dSJason Molenda // 35e8dce4dSJason Molenda // The LLVM Compiler Infrastructure 45e8dce4dSJason Molenda // 55e8dce4dSJason Molenda // This file is distributed under the University of Illinois Open Source 65e8dce4dSJason Molenda // License. See LICENSE.TXT for details. 75e8dce4dSJason Molenda // 85e8dce4dSJason Molenda //===----------------------------------------------------------------------===// 95e8dce4dSJason Molenda 105e8dce4dSJason Molenda #include "lldb/lldb-python.h" 115e8dce4dSJason Molenda #include "lldb/lldb-forward.h" 125e8dce4dSJason Molenda 135e8dce4dSJason Molenda #include "lldb/API/SBAddress.h" 145e8dce4dSJason Molenda #include "lldb/API/SBQueueItem.h" 155e8dce4dSJason Molenda #include "lldb/API/SBThread.h" 165e8dce4dSJason Molenda #include "lldb/Core/Address.h" 17*a8ff543cSJason Molenda #include "lldb/Target/Process.h" 185e8dce4dSJason Molenda #include "lldb/Target/QueueItem.h" 192fd83355SJason Molenda #include "lldb/Target/Thread.h" 205e8dce4dSJason Molenda 215e8dce4dSJason Molenda using namespace lldb; 225e8dce4dSJason Molenda using namespace lldb_private; 235e8dce4dSJason Molenda 245e8dce4dSJason Molenda //---------------------------------------------------------------------- 255e8dce4dSJason Molenda // Constructors 265e8dce4dSJason Molenda //---------------------------------------------------------------------- 275e8dce4dSJason Molenda SBQueueItem::SBQueueItem () : 285e8dce4dSJason Molenda m_queue_item_sp() 295e8dce4dSJason Molenda { 305e8dce4dSJason Molenda } 315e8dce4dSJason Molenda 325e8dce4dSJason Molenda SBQueueItem::SBQueueItem (const QueueItemSP& queue_item_sp) : 335e8dce4dSJason Molenda m_queue_item_sp (queue_item_sp) 345e8dce4dSJason Molenda { 355e8dce4dSJason Molenda } 365e8dce4dSJason Molenda 375e8dce4dSJason Molenda //---------------------------------------------------------------------- 385e8dce4dSJason Molenda // Destructor 395e8dce4dSJason Molenda //---------------------------------------------------------------------- 405e8dce4dSJason Molenda SBQueueItem::~SBQueueItem() 415e8dce4dSJason Molenda { 425e8dce4dSJason Molenda m_queue_item_sp.reset(); 435e8dce4dSJason Molenda } 445e8dce4dSJason Molenda 455e8dce4dSJason Molenda bool 465e8dce4dSJason Molenda SBQueueItem::IsValid() const 475e8dce4dSJason Molenda { 485e8dce4dSJason Molenda return m_queue_item_sp.get() != NULL; 495e8dce4dSJason Molenda } 505e8dce4dSJason Molenda 515e8dce4dSJason Molenda 525e8dce4dSJason Molenda void 535e8dce4dSJason Molenda SBQueueItem::Clear () 545e8dce4dSJason Molenda { 555e8dce4dSJason Molenda m_queue_item_sp.reset(); 565e8dce4dSJason Molenda } 575e8dce4dSJason Molenda 585e8dce4dSJason Molenda 595e8dce4dSJason Molenda void 605e8dce4dSJason Molenda SBQueueItem::SetQueueItem (const QueueItemSP& queue_item_sp) 615e8dce4dSJason Molenda { 625e8dce4dSJason Molenda m_queue_item_sp = queue_item_sp; 635e8dce4dSJason Molenda } 645e8dce4dSJason Molenda 655e8dce4dSJason Molenda 665e8dce4dSJason Molenda lldb::QueueItemKind 675e8dce4dSJason Molenda SBQueueItem::GetKind () const 685e8dce4dSJason Molenda { 695e8dce4dSJason Molenda QueueItemKind result = eQueueItemKindUnknown; 705e8dce4dSJason Molenda if (m_queue_item_sp) 715e8dce4dSJason Molenda { 725e8dce4dSJason Molenda result = m_queue_item_sp->GetKind (); 735e8dce4dSJason Molenda } 745e8dce4dSJason Molenda return result; 755e8dce4dSJason Molenda } 765e8dce4dSJason Molenda 775e8dce4dSJason Molenda void 785e8dce4dSJason Molenda SBQueueItem::SetKind (lldb::QueueItemKind kind) 795e8dce4dSJason Molenda { 805e8dce4dSJason Molenda if (m_queue_item_sp) 815e8dce4dSJason Molenda { 825e8dce4dSJason Molenda m_queue_item_sp->SetKind (kind); 835e8dce4dSJason Molenda } 845e8dce4dSJason Molenda } 855e8dce4dSJason Molenda 865e8dce4dSJason Molenda SBAddress 875e8dce4dSJason Molenda SBQueueItem::GetAddress () const 885e8dce4dSJason Molenda { 895e8dce4dSJason Molenda SBAddress result; 905e8dce4dSJason Molenda if (m_queue_item_sp) 915e8dce4dSJason Molenda { 925e8dce4dSJason Molenda result.SetAddress (&m_queue_item_sp->GetAddress()); 935e8dce4dSJason Molenda } 945e8dce4dSJason Molenda return result; 955e8dce4dSJason Molenda } 965e8dce4dSJason Molenda 975e8dce4dSJason Molenda void 985e8dce4dSJason Molenda SBQueueItem::SetAddress (SBAddress addr) 995e8dce4dSJason Molenda { 1005e8dce4dSJason Molenda if (m_queue_item_sp) 1015e8dce4dSJason Molenda { 1025e8dce4dSJason Molenda m_queue_item_sp->SetAddress (addr.ref()); 1035e8dce4dSJason Molenda } 1045e8dce4dSJason Molenda } 1055e8dce4dSJason Molenda 1065e8dce4dSJason Molenda SBThread 1075e8dce4dSJason Molenda SBQueueItem::GetExtendedBacktraceThread (const char *type) 1085e8dce4dSJason Molenda { 1095e8dce4dSJason Molenda SBThread result; 1105e8dce4dSJason Molenda if (m_queue_item_sp) 1115e8dce4dSJason Molenda { 112*a8ff543cSJason Molenda ProcessSP process_sp = m_queue_item_sp->GetProcessSP(); 113*a8ff543cSJason Molenda Process::StopLocker stop_locker; 114*a8ff543cSJason Molenda if (process_sp && stop_locker.TryLock(&process_sp->GetRunLock())) 115*a8ff543cSJason Molenda { 1165e8dce4dSJason Molenda ThreadSP thread_sp; 1175e8dce4dSJason Molenda ConstString type_const (type); 1185e8dce4dSJason Molenda thread_sp = m_queue_item_sp->GetExtendedBacktraceThread (type_const); 1195e8dce4dSJason Molenda if (thread_sp) 1205e8dce4dSJason Molenda { 121*a8ff543cSJason Molenda // Save this in the Process' ExtendedThreadList so a strong pointer retains the 122*a8ff543cSJason Molenda // object 123*a8ff543cSJason Molenda process_sp->GetExtendedThreadList().AddThread (thread_sp); 1245e8dce4dSJason Molenda result.SetThread (thread_sp); 1255e8dce4dSJason Molenda } 1265e8dce4dSJason Molenda } 127*a8ff543cSJason Molenda } 1285e8dce4dSJason Molenda return result; 1295e8dce4dSJason Molenda } 130