diff options
author | Andrew Kaylor <andrew.kaylor@intel.com> | 2013-09-17 00:30:24 +0000 |
---|---|---|
committer | Andrew Kaylor <andrew.kaylor@intel.com> | 2013-09-17 00:30:24 +0000 |
commit | d4d5499d6cbc6b243acd3511263d2e5edb2d6754 (patch) | |
tree | bde798dabe8e5590e46d17d9a55ea3b9345942b5 /lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp | |
parent | d30a9585b862cca17ca69a12ed686d104a3b70ca (diff) | |
download | bcm5719-llvm-d4d5499d6cbc6b243acd3511263d2e5edb2d6754.tar.gz bcm5719-llvm-d4d5499d6cbc6b243acd3511263d2e5edb2d6754.zip |
Fixing a problem with thread creation signal order dependency
llvm-svn: 190831
Diffstat (limited to 'lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp')
-rw-r--r-- | lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp index 5ab864f59a4..5e6604458ad 100644 --- a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp +++ b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp @@ -418,13 +418,26 @@ ProcessPOSIX::SendMessage(const ProcessMessage &message) case ProcessMessage::eBreakpointMessage: case ProcessMessage::eTraceMessage: case ProcessMessage::eWatchpointMessage: - case ProcessMessage::eNewThreadMessage: case ProcessMessage::eCrashMessage: assert(thread); thread->SetState(eStateStopped); StopAllThreads(message.GetTID()); SetPrivateState(eStateStopped); break; + + case ProcessMessage::eNewThreadMessage: + { + lldb::tid_t new_tid = message.GetChildTID(); + if (WaitingForInitialStop(new_tid)) + { + m_monitor->WaitForInitialTIDStop(new_tid); + } + assert(thread); + thread->SetState(eStateStopped); + StopAllThreads(message.GetTID()); + SetPrivateState(eStateStopped); + break; + } } m_message_queue.push(message); @@ -449,6 +462,12 @@ ProcessPOSIX::AddThreadForInitialStopIfNeeded(lldb::tid_t stop_tid) return added_to_set; } +bool +ProcessPOSIX::WaitingForInitialStop(lldb::tid_t stop_tid) +{ + return (m_seen_initial_stop.find(stop_tid) == m_seen_initial_stop.end()); +} + POSIXThread * ProcessPOSIX::CreateNewPOSIXThread(lldb_private::Process &process, lldb::tid_t tid) { |