Author: emaste Date: Tue Sep 3 18:55:30 2013 New Revision: 189889 URL: http://llvm.org/viewvc/llvm-project?rev=189889&view=rev Log: Clean up handling of FreeBSD thread list on Launch / Attach
Instead of directly manipulating the thread list in Launch and Attach, just rely on RefreshStateAfterStop to populate the initial list. Review: http://llvm-reviews.chandlerc.com/D1565 Modified: lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp lldb/trunk/source/Plugins/Process/POSIX/ProcessMessage.cpp lldb/trunk/source/Plugins/Process/POSIX/ProcessMessage.h lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp Modified: lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp?rev=189889&r1=189888&r2=189889&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp (original) +++ lldb/trunk/source/Plugins/Process/FreeBSD/ProcessMonitor.cpp Tue Sep 3 18:55:30 2013 @@ -855,7 +855,6 @@ ProcessMonitor::Launch(LaunchArgs *args) { ProcessMonitor *monitor = args->m_monitor; ProcessFreeBSD &process = monitor->GetProcess(); - lldb::ProcessSP processSP = process.shared_from_this(); const char **argv = args->m_argv; const char **envp = args->m_envp; const char *stdin_path = args->m_stdin_path; @@ -868,9 +867,6 @@ ProcessMonitor::Launch(LaunchArgs *args) char err_str[err_len]; lldb::pid_t pid; - lldb::ThreadSP inferior; - Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_PROCESS)); - // Propagate the environment if one is not supplied. if (envp == NULL || envp[0] == NULL) envp = const_cast<const char **>(environ); @@ -1002,14 +998,7 @@ ProcessMonitor::Launch(LaunchArgs *args) if (!EnsureFDFlags(monitor->m_terminal_fd, O_NONBLOCK, args->m_error)) goto FINISH; - // Update the process thread list with this new thread. - inferior.reset(process.CreateNewPOSIXThread(*processSP, pid)); - if (log) - log->Printf ("ProcessMonitor::%s() adding pid = %" PRIu64, __FUNCTION__, pid); - process.GetThreadList().AddThread(inferior); - - // Let our process instance know the thread has stopped. - process.SendMessage(ProcessMessage::Trace(pid)); + process.SendMessage(ProcessMessage::Attach(pid)); FINISH: return args->m_error.Success(); @@ -1059,9 +1048,6 @@ ProcessMonitor::Attach(AttachArgs *args) ProcessMonitor *monitor = args->m_monitor; ProcessFreeBSD &process = monitor->GetProcess(); - lldb::ProcessSP processSP = process.shared_from_this(); - ThreadList &tl = process.GetThreadList(); - lldb::ThreadSP inferior; if (pid <= 1) { @@ -1084,14 +1070,9 @@ ProcessMonitor::Attach(AttachArgs *args) goto FINISH; } - // Update the process thread list with the attached thread. - inferior.reset(process.CreateNewPOSIXThread(*processSP, pid)); - tl.AddThread(inferior); + process.SendMessage(ProcessMessage::Attach(pid)); - // Let our process instance know the thread has stopped. - process.SendMessage(ProcessMessage::Trace(pid)); - - FINISH: +FINISH: return args->m_error.Success(); } Modified: lldb/trunk/source/Plugins/Process/POSIX/ProcessMessage.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/ProcessMessage.cpp?rev=189889&r1=189888&r2=189889&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/POSIX/ProcessMessage.cpp (original) +++ lldb/trunk/source/Plugins/Process/POSIX/ProcessMessage.cpp Tue Sep 3 18:55:30 2013 @@ -218,6 +218,9 @@ ProcessMessage::PrintKind(Kind kind) case eInvalidMessage: str = "eInvalidMessage"; break; + case eAttachMessage: + str = "eAttachMessage"; + break; case eExitMessage: str = "eExitMessage"; break; Modified: lldb/trunk/source/Plugins/Process/POSIX/ProcessMessage.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/ProcessMessage.h?rev=189889&r1=189888&r2=189889&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/POSIX/ProcessMessage.h (original) +++ lldb/trunk/source/Plugins/Process/POSIX/ProcessMessage.h Tue Sep 3 18:55:30 2013 @@ -23,6 +23,7 @@ public: enum Kind { eInvalidMessage, + eAttachMessage, eExitMessage, eLimboMessage, eSignalMessage, @@ -79,6 +80,11 @@ public: lldb::tid_t GetTID() const { return m_tid; } + /// Indicates that the process @p pid has successfully attached. + static ProcessMessage Attach(lldb::pid_t pid) { + return ProcessMessage(pid, eAttachMessage); + } + /// Indicates that the thread @p tid is about to exit with status @p status. static ProcessMessage Limbo(lldb::tid_t tid, int status) { return ProcessMessage(tid, eLimboMessage, status); Modified: lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp?rev=189889&r1=189888&r2=189889&view=diff ============================================================================== --- lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp (original) +++ lldb/trunk/source/Plugins/Process/POSIX/ProcessPOSIX.cpp Tue Sep 3 18:55:30 2013 @@ -367,6 +367,10 @@ ProcessPOSIX::SendMessage(const ProcessM case ProcessMessage::eInvalidMessage: return; + case ProcessMessage::eAttachMessage: + SetPrivateState(eStateStopped); + return; + case ProcessMessage::eLimboMessage: assert(thread); thread->SetState(eStateStopped); _______________________________________________ lldb-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
