Path: blob/main/contrib/llvm-project/lldb/source/API/SBQueueItem.cpp
39587 views
//===-- SBQueueItem.cpp ---------------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "lldb/lldb-forward.h"910#include "lldb/API/SBAddress.h"11#include "lldb/API/SBQueueItem.h"12#include "lldb/API/SBThread.h"13#include "lldb/Core/Address.h"14#include "lldb/Target/Process.h"15#include "lldb/Target/QueueItem.h"16#include "lldb/Target/Thread.h"17#include "lldb/Utility/Instrumentation.h"1819using namespace lldb;20using namespace lldb_private;2122// Constructors23SBQueueItem::SBQueueItem() { LLDB_INSTRUMENT_VA(this); }2425SBQueueItem::SBQueueItem(const QueueItemSP &queue_item_sp)26: m_queue_item_sp(queue_item_sp) {27LLDB_INSTRUMENT_VA(this, queue_item_sp);28}2930// Destructor31SBQueueItem::~SBQueueItem() { m_queue_item_sp.reset(); }3233bool SBQueueItem::IsValid() const {34LLDB_INSTRUMENT_VA(this);35return this->operator bool();36}37SBQueueItem::operator bool() const {38LLDB_INSTRUMENT_VA(this);3940return m_queue_item_sp.get() != nullptr;41}4243void SBQueueItem::Clear() {44LLDB_INSTRUMENT_VA(this);4546m_queue_item_sp.reset();47}4849void SBQueueItem::SetQueueItem(const QueueItemSP &queue_item_sp) {50LLDB_INSTRUMENT_VA(this, queue_item_sp);5152m_queue_item_sp = queue_item_sp;53}5455lldb::QueueItemKind SBQueueItem::GetKind() const {56LLDB_INSTRUMENT_VA(this);5758QueueItemKind result = eQueueItemKindUnknown;59if (m_queue_item_sp) {60result = m_queue_item_sp->GetKind();61}62return result;63}6465void SBQueueItem::SetKind(lldb::QueueItemKind kind) {66LLDB_INSTRUMENT_VA(this, kind);6768if (m_queue_item_sp) {69m_queue_item_sp->SetKind(kind);70}71}7273SBAddress SBQueueItem::GetAddress() const {74LLDB_INSTRUMENT_VA(this);7576SBAddress result;77if (m_queue_item_sp) {78result.SetAddress(m_queue_item_sp->GetAddress());79}80return result;81}8283void SBQueueItem::SetAddress(SBAddress addr) {84LLDB_INSTRUMENT_VA(this, addr);8586if (m_queue_item_sp) {87m_queue_item_sp->SetAddress(addr.ref());88}89}9091SBThread SBQueueItem::GetExtendedBacktraceThread(const char *type) {92LLDB_INSTRUMENT_VA(this, type);9394SBThread result;95if (m_queue_item_sp) {96ProcessSP process_sp = m_queue_item_sp->GetProcessSP();97Process::StopLocker stop_locker;98if (process_sp && stop_locker.TryLock(&process_sp->GetRunLock())) {99ThreadSP thread_sp;100ConstString type_const(type);101thread_sp = m_queue_item_sp->GetExtendedBacktraceThread(type_const);102if (thread_sp) {103// Save this in the Process' ExtendedThreadList so a strong pointer104// retains the object105process_sp->GetExtendedThreadList().AddThread(thread_sp);106result.SetThread(thread_sp);107}108}109}110return result;111}112113114