Make ProcessWindows not create a strong reference to itself.
llvm-svn: 246579
diff --git a/lldb/source/Plugins/Process/Windows/Live/LocalDebugDelegate.cpp b/lldb/source/Plugins/Process/Windows/Live/LocalDebugDelegate.cpp
index 07f2969..e47b26e 100644
--- a/lldb/source/Plugins/Process/Windows/Live/LocalDebugDelegate.cpp
+++ b/lldb/source/Plugins/Process/Windows/Live/LocalDebugDelegate.cpp
@@ -13,7 +13,7 @@
using namespace lldb;
using namespace lldb_private;
-LocalDebugDelegate::LocalDebugDelegate(ProcessSP process)
+LocalDebugDelegate::LocalDebugDelegate(ProcessWP process)
: m_process(process)
{
}
@@ -21,53 +21,71 @@
void
LocalDebugDelegate::OnExitProcess(uint32_t exit_code)
{
- ((ProcessWindows &)*m_process).OnExitProcess(exit_code);
+ if (ProcessWindowsSP process = GetProcessPointer())
+ process->OnExitProcess(exit_code);
}
void
LocalDebugDelegate::OnDebuggerConnected(lldb::addr_t image_base)
{
- ((ProcessWindows &)*m_process).OnDebuggerConnected(image_base);
+ if (ProcessWindowsSP process = GetProcessPointer())
+ process->OnDebuggerConnected(image_base);
}
ExceptionResult
LocalDebugDelegate::OnDebugException(bool first_chance, const ExceptionRecord &record)
{
- return ((ProcessWindows &)*m_process).OnDebugException(first_chance, record);
+ if (ProcessWindowsSP process = GetProcessPointer())
+ return process->OnDebugException(first_chance, record);
+ else
+ return ExceptionResult::MaskException;
}
void
LocalDebugDelegate::OnCreateThread(const HostThread &thread)
{
- ((ProcessWindows &)*m_process).OnCreateThread(thread);
+ if (ProcessWindowsSP process = GetProcessPointer())
+ process->OnCreateThread(thread);
}
void
LocalDebugDelegate::OnExitThread(lldb::tid_t thread_id, uint32_t exit_code)
{
- ((ProcessWindows &)*m_process).OnExitThread(thread_id, exit_code);
+ if (ProcessWindowsSP process = GetProcessPointer())
+ process->OnExitThread(thread_id, exit_code);
}
void
LocalDebugDelegate::OnLoadDll(const lldb_private::ModuleSpec &module_spec, lldb::addr_t module_addr)
{
- ((ProcessWindows &)*m_process).OnLoadDll(module_spec, module_addr);
+ if (ProcessWindowsSP process = GetProcessPointer())
+ process->OnLoadDll(module_spec, module_addr);
}
void
LocalDebugDelegate::OnUnloadDll(lldb::addr_t module_addr)
{
- ((ProcessWindows &)*m_process).OnUnloadDll(module_addr);
+ if (ProcessWindowsSP process = GetProcessPointer())
+ process->OnUnloadDll(module_addr);
}
void
LocalDebugDelegate::OnDebugString(const std::string &string)
{
- ((ProcessWindows &)*m_process).OnDebugString(string);
+ if (ProcessWindowsSP process = GetProcessPointer())
+ process->OnDebugString(string);
}
void
LocalDebugDelegate::OnDebuggerError(const Error &error, uint32_t type)
{
- ((ProcessWindows &)*m_process).OnDebuggerError(error, type);
+ if (ProcessWindowsSP process = GetProcessPointer())
+ process->OnDebuggerError(error, type);
+}
+
+ProcessWindowsSP
+LocalDebugDelegate::GetProcessPointer()
+{
+ ProcessSP process = m_process.lock();
+ return std::static_pointer_cast<ProcessWindows>(process);
}