[Lldb-commits] [lldb] r230060 - Avoid a race condition when loading core files where the process might still be handling the eStateStopped event we post to the private state thread causing us to return from SBTarget::LoadCore() before the process is ready to have API calls used on it.
gclayton at apple.com
Fri Feb 20 12:59:47 PST 2015
Date: Fri Feb 20 14:59:47 2015
New Revision: 230060
Avoid a race condition when loading core files where the process might still be handling the eStateStopped event we post to the private state thread causing us to return from SBTarget::LoadCore() before the process is ready to have API calls used on it.
This fixes a crasher that could happen when loading core files from scripts.
--- lldb/trunk/source/Target/Process.cpp (original)
+++ lldb/trunk/source/Target/Process.cpp Fri Feb 20 14:59:47 2015
@@ -3163,6 +3163,9 @@ Process::LoadCore ()
Error error = DoLoadCore();
+ Listener listener ("lldb.process.load_core_listener");
if (PrivateStateThreadIsValid ())
@@ -3183,7 +3186,20 @@ Process::LoadCore ()
// show all of the threads in the core file and explore the crashed
+ // 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 ();
More information about the lldb-commits