diff options
Diffstat (limited to 'lldb')
-rw-r--r-- | lldb/source/Target/Process.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp index c4eccfc78c3..88a76ff79a9 100644 --- a/lldb/source/Target/Process.cpp +++ b/lldb/source/Target/Process.cpp @@ -3163,6 +3163,9 @@ Process::LoadCore () Error error = DoLoadCore(); if (error.Success()) { + Listener listener ("lldb.process.load_core_listener"); + HijackPrivateProcessEvents(&listener); + if (PrivateStateThreadIsValid ()) ResumePrivateStateThread (); else @@ -3183,7 +3186,20 @@ Process::LoadCore () // show all of the threads in the core file and explore the crashed // state. SetPrivateState (eStateStopped); - + + // Wait indefinitely for a stopped event since we just posted one above... + lldb::EventSP event_sp; + listener.WaitForEvent (NULL, event_sp); + StateType state = ProcessEventData::GetStateFromEvent(event_sp.get()); + + if (!StateIsStoppedState (state, false)) + { + Log *log(lldb_private::GetLogIfAllCategoriesSet (LIBLLDB_LOG_PROCESS)); + if (log) + log->Printf("Process::Halt() failed to stop, state is: %s", StateAsCString(state)); + error.SetErrorString ("Did not get stopped event after loading the core file."); + } + RestorePrivateProcessEvents (); } return error; } |