[Lldb-commits] [lldb] r205043 - Wait for the reply from the 'D' detach packet before tearing down the debugger. Avoids a race
Jim Ingham
jingham at apple.com
Fri Mar 28 13:00:08 PDT 2014
Author: jingham
Date: Fri Mar 28 15:00:07 2014
New Revision: 205043
URL: http://llvm.org/viewvc/llvm-project?rev=205043&view=rev
Log:
Wait for the reply from the 'D' detach packet before tearing down the debugger. Avoids a race
condition where we could end up killing debugserver (and thus the target) before it had a chance
to detach.
Also fix debugserver to send the OK AFTER it detaches to avoid the same race condition.
<rdar://problem/16202713>
Modified:
lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
lldb/trunk/tools/debugserver/source/RNBRemote.cpp
Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp?rev=205043&r1=205042&r2=205043&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp Fri Mar 28 15:00:07 2014
@@ -1756,14 +1756,16 @@ GDBRemoteCommunicationClient::Detach (bo
}
else
{
- PacketResult packet_result = SendPacket ("D1", 2);
+ StringExtractorGDBRemote response;
+ PacketResult packet_result = SendPacketAndWaitForResponse ("D1", 1, response, false);
if (packet_result != PacketResult::Success)
error.SetErrorString ("Sending extended disconnect packet failed.");
}
}
else
{
- PacketResult packet_result = SendPacket ("D", 1);
+ StringExtractorGDBRemote response;
+ PacketResult packet_result = SendPacketAndWaitForResponse ("D", 1, response, false);
if (packet_result != PacketResult::Success)
error.SetErrorString ("Sending disconnect packet failed.");
}
Modified: lldb/trunk/tools/debugserver/source/RNBRemote.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/debugserver/source/RNBRemote.cpp?rev=205043&r1=205042&r2=205043&view=diff
==============================================================================
--- lldb/trunk/tools/debugserver/source/RNBRemote.cpp (original)
+++ lldb/trunk/tools/debugserver/source/RNBRemote.cpp Fri Mar 28 15:00:07 2014
@@ -3605,9 +3605,17 @@ RNBRemote::HandlePacket_C (const char *p
rnb_err_t
RNBRemote::HandlePacket_D (const char *p)
{
- SendPacket ("OK");
if (m_ctx.HasValidProcessID())
- DNBProcessDetach(m_ctx.ProcessID());
+ {
+ if (DNBProcessDetach(m_ctx.ProcessID()))
+ SendPacket ("OK");
+ else
+ SendPacket ("E");
+ }
+ else
+ {
+ SendPacket ("E");
+ }
return rnb_success;
}
More information about the lldb-commits
mailing list