From 7a9495bcd59402b888207cae6bdb927643cc81a5 Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Tue, 1 Sep 2015 15:00:51 +0000 Subject: [NativeProcessLinux] Fix detach of multithreaded inferiors When detaching, we need to detach from all threads of the inferior and not just the main one. Without this, a multi-threaded inferior would usually crash once the server exits. llvm-svn: 246549 --- lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp') diff --git a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp index 0551596f4cc1..dfc92887fa8f 100644 --- a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp +++ b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp @@ -1794,14 +1794,20 @@ NativeProcessLinux::Detach () { Error error; - // Tell ptrace to detach from the process. - if (GetID () != LLDB_INVALID_PROCESS_ID) - error = Detach (GetID ()); - // Stop monitoring the inferior. m_sigchld_handle.reset(); - // No error. + // Tell ptrace to detach from the process. + if (GetID () == LLDB_INVALID_PROCESS_ID) + return error; + + for (auto thread_sp : m_threads) + { + Error e = Detach(thread_sp->GetID()); + if (e.Fail()) + error = e; // Save the error, but still attempt to detach from other threads. + } + return error; } -- cgit v1.2.3