summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoremaste <emaste@FreeBSD.org>2014-03-24 01:21:37 +0000
committeremaste <emaste@FreeBSD.org>2014-03-24 01:21:37 +0000
commitf1587c22969808e3e17cd276b6cd964f5fa47683 (patch)
treee40d2bb21132dac7d68975393dcd1a2b44be0ab0
parent30470cc7be33594faec8c2232763469b827acaa4 (diff)
downloadFreeBSD-src-f1587c22969808e3e17cd276b6cd964f5fa47683.zip
FreeBSD-src-f1587c22969808e3e17cd276b6cd964f5fa47683.tar.gz
lldb: Invoke PT_KILL from ProcessPosix::DoDestroy
We previously sent SIGKILL to the debuggee in DoDestroy, but did not actually detach or kill via ptrace. It seems that this somehow didn't matter on Linux, but did on FreeBSD. This would happen when quitting LLDB while stopped at a breakpoint, for example. The debuggee remained stopped in ptrace (with the signal either pending or lost). After a timeout of a second or two LLDB exits, which caused the debuggee to resume and dump core from an unhandled SIGTRAP. BringProcessIntoLimbo is a poorly named wrapper for ptrace(PT_KILL) which is the desired behaviour from DoDestroy. http://llvm.org/pr18894 Sponsored by: DARPA, AFRL
-rw-r--r--contrib/llvm/tools/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp6
1 files changed, 2 insertions, 4 deletions
diff --git a/contrib/llvm/tools/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp b/contrib/llvm/tools/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp
index 6239462..1a8bf89 100644
--- a/contrib/llvm/tools/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp
+++ b/contrib/llvm/tools/lldb/source/Plugins/Process/POSIX/ProcessPOSIX.cpp
@@ -335,11 +335,9 @@ ProcessPOSIX::DoDestroy()
if (!HasExited())
{
- // Drive the exit event to completion (do not keep the inferior in
- // limbo).
+ assert (m_monitor);
m_exit_now = true;
-
- if ((m_monitor == NULL || kill(m_monitor->GetPID(), SIGKILL)) && error.Success())
+ if (m_monitor->BringProcessIntoLimbo())
{
error.SetErrorToErrno();
return error;
OpenPOWER on IntegriCloud