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