<rdar://problem/13190981>
authorGreg Clayton <gclayton@apple.com>
Fri, 22 Feb 2013 22:23:55 +0000 (22:23 +0000)
committerGreg Clayton <gclayton@apple.com>
Fri, 22 Feb 2013 22:23:55 +0000 (22:23 +0000)
Fixed an issue where if we got a 'A' async packet back from debugserver, we would resend the last continue command. We now correctly identify the packet as async (just like the 'O' stdout async packet) and we don't resend the continue command.

llvm-svn: 175924

lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp

index 1de76a44690e06bdd522738f9abf83d04cbe30cb..80fa316a583cee6a8c7e1cba195009f97fac63c2 100644 (file)
@@ -540,11 +540,11 @@ GDBRemoteCommunicationClient::SendContinuePacketAndWaitForResponse
     // may change if we are interrupted and we continue after an async packet...
     std::string continue_packet(payload, packet_length);
     
-    bool got_stdout = false;
+    bool got_async_packet = false;
     
     while (state == eStateRunning)
     {
-        if (!got_stdout)
+        if (!got_async_packet)
         {
             if (log)
                 log->Printf ("GDBRemoteCommunicationClient::%s () sending continue packet: %s", __FUNCTION__, continue_packet.c_str());
@@ -554,7 +554,7 @@ GDBRemoteCommunicationClient::SendContinuePacketAndWaitForResponse
             m_private_is_running.SetValue (true, eBroadcastAlways);
         }
         
-        got_stdout = false;
+        got_async_packet = false;
 
         if (log)
             log->Printf ("GDBRemoteCommunicationClient::%s () WaitForPacket(%s)", __FUNCTION__, continue_packet.c_str());
@@ -737,7 +737,7 @@ GDBRemoteCommunicationClient::SendContinuePacketAndWaitForResponse
                 case 'O':
                     // STDOUT
                     {
-                        got_stdout = true;
+                        got_async_packet = true;
                         std::string inferior_stdout;
                         inferior_stdout.reserve(response.GetBytesLeft () / 2);
                         char ch;
@@ -750,6 +750,7 @@ GDBRemoteCommunicationClient::SendContinuePacketAndWaitForResponse
                 case 'A':
                     // Async miscellaneous reply. Right now, only profile data is coming through this channel.
                     {
+                        got_async_packet = true;
                         std::string input = response.GetStringRef().substr(1); // '1' to move beyond 'A'
                         if (m_partial_profile_data.length() > 0)
                         {