diff options
Diffstat (limited to 'lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp')
| -rw-r--r-- | lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp index a69486559b8..980778f0eec 100644 --- a/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp +++ b/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp @@ -361,13 +361,26 @@ ProcessPOSIX::SendMessage(const ProcessMessage &message) case ProcessMessage::eSignalMessage: case ProcessMessage::eSignalDeliveredMessage: - SetPrivateState(eStateStopped); - break; + { + lldb::tid_t tid = message.GetTID(); + lldb::tid_t pid = GetID(); + if (tid == pid) { + SetPrivateState(eStateStopped); + break; + } else { + // FIXME: Ignore any signals generated by children. + return; + } + } case ProcessMessage::eCrashMessage: // FIXME: Update stop reason as per bugzilla 14598 SetPrivateState(eStateStopped); break; + + case ProcessMessage::eNewThreadMessage: + SetPrivateState(eStateStopped); + break; } m_message_queue.push(message); @@ -395,6 +408,12 @@ ProcessPOSIX::RefreshStateAfterStop() POSIXThread *thread = static_cast<POSIXThread*>( GetThreadList().FindThreadByID(tid, false).get()); + if (message.GetKind() == ProcessMessage::eNewThreadMessage) { + ThreadSP thread_sp; + thread_sp.reset(new POSIXThread(*this, message.GetChildTID())); + m_thread_list.AddThread(thread_sp); + } + assert(thread); thread->Notify(message); |

