forked from OSchip/llvm-project
Process::Destroy should Halt before it tries to destroy so we don't have race conditions where we are in the middle of trying to service an event when we go to Destroy.
The AttachCompletionHandler should note that it has restarted the target if it indeed does so. llvm-svn: 157327
This commit is contained in:
parent
8152e22073
commit
04e0a2270a
|
@ -2553,6 +2553,7 @@ Process::AttachCompletionHandler::PerformAction (lldb::EventSP &event_sp)
|
|||
{
|
||||
--m_exec_count;
|
||||
m_process->PrivateResume ();
|
||||
Process::ProcessEventData::SetRestartedInEvent (event_sp.get(), true);
|
||||
return eEventActionRetry;
|
||||
}
|
||||
else
|
||||
|
@ -3026,6 +3027,31 @@ Process::Destroy ()
|
|||
if (error.Success())
|
||||
{
|
||||
DisableAllBreakpointSites();
|
||||
if (m_public_state.GetValue() == eStateRunning)
|
||||
{
|
||||
error = Halt();
|
||||
if (error.Success())
|
||||
{
|
||||
// Consume the halt event.
|
||||
EventSP stop_event;
|
||||
TimeValue timeout (TimeValue::Now());
|
||||
timeout.OffsetWithMicroSeconds(1000);
|
||||
StateType state = WaitForProcessToStop (&timeout);
|
||||
if (state != eStateStopped)
|
||||
{
|
||||
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
|
||||
if (log)
|
||||
log->Printf("Process::Destroy() Halt failed to stop, state is: %s", StateAsCString(state));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LogSP log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS));
|
||||
if (log)
|
||||
log->Printf("Process::Destroy() Halt got error: %s", error.AsCString());
|
||||
}
|
||||
}
|
||||
|
||||
error = DoDestroy();
|
||||
if (error.Success())
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue