forked from OSchip/llvm-project
Fixes the case where we created a dummy target, deleted it, and then tried to evaluate an expression with no target.
llvm-svn: 157110
This commit is contained in:
parent
6166178573
commit
721ba3ff77
|
@ -414,6 +414,12 @@ public:
|
|||
const lldb::ProcessSP &
|
||||
GetProcessSP () const;
|
||||
|
||||
bool
|
||||
IsValid()
|
||||
{
|
||||
return m_valid;
|
||||
}
|
||||
|
||||
void
|
||||
Destroy();
|
||||
|
||||
|
@ -1156,6 +1162,7 @@ protected:
|
|||
// we can correctly tear down everything that we need to, so the only
|
||||
// class that knows about the process lifespan is this target class.
|
||||
lldb::ProcessSP m_process_sp;
|
||||
bool m_valid;
|
||||
lldb::SearchFilterSP m_search_filter_sp;
|
||||
PathMappingList m_image_search_paths;
|
||||
std::auto_ptr<ClangASTContext> m_scratch_ast_context_ap;
|
||||
|
|
|
@ -502,7 +502,7 @@ SBTarget::GetBroadcasterClassName ()
|
|||
bool
|
||||
SBTarget::IsValid () const
|
||||
{
|
||||
return m_opaque_sp.get() != NULL;
|
||||
return m_opaque_sp.get() != NULL && m_opaque_sp->IsValid();
|
||||
}
|
||||
|
||||
SBProcess
|
||||
|
|
|
@ -1227,19 +1227,23 @@ Host::GetProcessInfo (lldb::pid_t pid, ProcessInstanceInfo &process_info)
|
|||
lldb::TargetSP
|
||||
Host::GetDummyTarget (lldb_private::Debugger &debugger)
|
||||
{
|
||||
lldb::TargetSP dummy_target_sp;
|
||||
static TargetSP g_dummy_target_sp;
|
||||
|
||||
ArchSpec arch(Target::GetDefaultArchitecture());
|
||||
if (!arch.IsValid())
|
||||
arch = Host::GetArchitecture ();
|
||||
Error err = debugger.GetTargetList().CreateTarget(debugger,
|
||||
FileSpec(),
|
||||
arch.GetTriple().getTriple().c_str(),
|
||||
false,
|
||||
NULL,
|
||||
dummy_target_sp);
|
||||
// FIXME: Maybe the dummy target should be per-Debugger
|
||||
if (!g_dummy_target_sp || !g_dummy_target_sp->IsValid())
|
||||
{
|
||||
ArchSpec arch(Target::GetDefaultArchitecture());
|
||||
if (!arch.IsValid())
|
||||
arch = Host::GetArchitecture ();
|
||||
Error err = debugger.GetTargetList().CreateTarget(debugger,
|
||||
FileSpec(),
|
||||
arch.GetTriple().getTriple().c_str(),
|
||||
false,
|
||||
NULL,
|
||||
g_dummy_target_sp);
|
||||
}
|
||||
|
||||
return dummy_target_sp;
|
||||
return g_dummy_target_sp;
|
||||
}
|
||||
|
||||
struct ShellInfo
|
||||
|
|
|
@ -64,6 +64,7 @@ Target::Target(Debugger &debugger, const ArchSpec &target_arch, const lldb::Plat
|
|||
m_internal_breakpoint_list (true),
|
||||
m_watchpoint_list (),
|
||||
m_process_sp (),
|
||||
m_valid (true),
|
||||
m_search_filter_sp (),
|
||||
m_image_search_paths (ImageSearchPathsChanged, this),
|
||||
m_scratch_ast_context_ap (NULL),
|
||||
|
@ -165,6 +166,7 @@ void
|
|||
Target::Destroy()
|
||||
{
|
||||
Mutex::Locker locker (m_mutex);
|
||||
m_valid = false;
|
||||
DeleteCurrentProcess ();
|
||||
m_platform_sp.reset();
|
||||
m_arch.Clear();
|
||||
|
|
Loading…
Reference in New Issue