forked from OSchip/llvm-project
[LLGS] Avoid bogus error message on process termination
Summary: Handle_k was printing an error when killing a process because KillSpawnedProcess was expecting to be asynchronously notified of the process death, which no longer works, since we don't wait for the process on a separate thread. However, the whole usage of KillSpawnedProcess is dubious here, since it tries to be nice and terminate the process first with SIGTERM, which will not have the intended effect on a ptraced process. I replace this code with a call to NativeProcessProtocol::Kill, which does not suffer from these problems. Reviewers: chaoren, ovyalov Subscribers: lldb-commits Differential Revision: http://reviews.llvm.org/D11520 llvm-svn: 243397
This commit is contained in:
parent
cba308cf96
commit
424b201df7
|
@ -1142,27 +1142,22 @@ GDBRemoteCommunicationServerLLGS::ReapDebuggedProcess (void *callback_baton,
|
|||
GDBRemoteCommunication::PacketResult
|
||||
GDBRemoteCommunicationServerLLGS::Handle_k (StringExtractorGDBRemote &packet)
|
||||
{
|
||||
// shutdown all spawned processes
|
||||
std::set<lldb::pid_t> spawned_pids_copy;
|
||||
|
||||
// copy pids
|
||||
{
|
||||
Mutex::Locker locker (m_spawned_pids_mutex);
|
||||
spawned_pids_copy.insert (m_spawned_pids.begin (), m_spawned_pids.end ());
|
||||
}
|
||||
|
||||
// nuke the spawned processes
|
||||
for (auto it = spawned_pids_copy.begin (); it != spawned_pids_copy.end (); ++it)
|
||||
{
|
||||
lldb::pid_t spawned_pid = *it;
|
||||
if (!KillSpawnedProcess (spawned_pid))
|
||||
{
|
||||
fprintf (stderr, "%s: failed to kill spawned pid %" PRIu64 ", ignoring.\n", __FUNCTION__, spawned_pid);
|
||||
}
|
||||
}
|
||||
Log *log (GetLogIfAnyCategoriesSet(LIBLLDB_LOG_PROCESS));
|
||||
|
||||
StopSTDIOForwarding();
|
||||
|
||||
if (! m_debugged_process_sp)
|
||||
{
|
||||
if (log)
|
||||
log->Printf("GDBRemoteCommunicationServerLLGS::%s No debugged process found.", __FUNCTION__);
|
||||
return PacketResult::Success;
|
||||
}
|
||||
|
||||
Error error = m_debugged_process_sp->Kill();
|
||||
if (error.Fail() && log)
|
||||
log->Printf("GDBRemoteCommunicationServerLLGS::%s Failed to kill debugged process %" PRIu64 ": %s",
|
||||
__FUNCTION__, m_debugged_process_sp->GetID(), error.AsCString());
|
||||
|
||||
// No OK response for kill packet.
|
||||
// return SendOKResponse ();
|
||||
return PacketResult::Success;
|
||||
|
|
Loading…
Reference in New Issue