Skip to content

Commit

Permalink
[lldb/gdb-remote] Remove initial pipe-draining workaround
Browse files Browse the repository at this point in the history
This code, added in rL197579 (Dec 2013) is supposed to work around what
was presumably a qemu bug, where it would send unsolicited stop-reply
packets after the initial connection.

At present, qemu does not exhibit such behavior. Also, the 10ms delay
introduced by this code is sufficient to mask bugs in other stubs, but
it is not sufficient to *reliably* mask those bugs. This resulted in
flakyness in one of our stubs, which was (incorrectly) sending a +
packet at the start of the connection, resulting in a small-but-annoying
number of dropped connections.

Differential Revision: https://reviews.llvm.org/D114529
  • Loading branch information
labath committed Nov 25, 2021
1 parent 63b1e58 commit a6fedbf
Showing 1 changed file with 2 additions and 11 deletions.
Expand Up @@ -86,13 +86,6 @@ bool GDBRemoteCommunicationClient::HandshakeWithServer(Status *error_ptr) {
std::chrono::steady_clock::time_point start_of_handshake =
std::chrono::steady_clock::now();
if (SendAck()) {
// Wait for any responses that might have been queued up in the remote
// GDB server and flush them all
StringExtractorGDBRemote response;
PacketResult packet_result = PacketResult::Success;
while (packet_result == PacketResult::Success)
packet_result = ReadPacket(response, milliseconds(10), false);

// The return value from QueryNoAckModeSupported() is true if the packet
// was sent and _any_ response (including UNIMPLEMENTED) was received), or
// false if no response was received. This quickly tells us if we have a
Expand All @@ -106,17 +99,15 @@ bool GDBRemoteCommunicationClient::HandshakeWithServer(Status *error_ptr) {
std::chrono::duration<double>(end_of_handshake - start_of_handshake)
.count();
if (error_ptr) {
if (packet_result == PacketResult::ErrorDisconnected)
if (!IsConnected())
error_ptr->SetErrorString("Connection shut down by remote side "
"while waiting for reply to initial "
"handshake packet");
else if (packet_result == PacketResult::ErrorReplyTimeout)
else
error_ptr->SetErrorStringWithFormat(
"failed to get reply to handshake packet within timeout of "
"%.1f seconds",
handshake_timeout);
else
error_ptr->SetErrorString("failed to get reply to handshake packet");
}
}
} else {
Expand Down

0 comments on commit a6fedbf

Please sign in to comment.