Revert a mistake commit...
[reactos.git] / reactos / drivers / base / kdcom / kddll.c
index 99b4ad0..9a6657a 100644 (file)
@@ -3,14 +3,13 @@
  * PROJECT:         ReactOS kernel
  * FILE:            drivers/base/kddll/kddll.c
  * PURPOSE:         Base functions for the kernel debugger.
- * PROGRAMMER:      Timo Kreuzer (timo.kreuzer@ewactos.org)
+ * PROGRAMMER:      Timo Kreuzer (timo.kreuzer@reactos.org)
  */
 
 #include "kddll.h"
 
 /* GLOBALS ********************************************************************/
 
-PFNDBGPRNT KdpDbgPrint = NULL;
 ULONG CurrentPacketId = INITIAL_PACKET_ID | SYNC_PACKET_ID;
 ULONG RemotePacketId = INITIAL_PACKET_ID;
 
@@ -171,11 +170,11 @@ KdReceivePacket(
                         CurrentPacketId ^= 1;
                         return KDP_PACKET_RECEIVED;
                     }
-                    /* That's not what we were waiting for, start over. */
+                    /* That's not what we were waiting for, start over */
                     continue;
 
                 case PACKET_TYPE_KD_RESET:
-                    KDDBGPRINT("KdReceivePacket - got a reset packet\n");
+                    KDDBGPRINT("KdReceivePacket - got PACKET_TYPE_KD_RESET\n");
                     KdpSendControlPacket(PACKET_TYPE_KD_RESET, 0);
                     CurrentPacketId = INITIAL_PACKET_ID;
                     RemotePacketId = INITIAL_PACKET_ID;
@@ -188,7 +187,8 @@ KdReceivePacket(
 
                 default:
                     KDDBGPRINT("KdReceivePacket - got unknown control packet\n");
-                    return KDP_PACKET_RESEND;
+                    /* We got an invalid packet, ignore it and start over */
+                    continue;
             }
         }
 
@@ -370,6 +370,7 @@ KdSendPacket(
         {
             /* Packet received, we can quit the loop */
             CurrentPacketId &= ~SYNC_PACKET_ID;
+            Retries = KdContext->KdpDefaultRetries;
             break;
         }
         else if (KdStatus == KDP_PACKET_TIMEOUT)
@@ -384,10 +385,36 @@ KdSendPacket(
              */
             if (Retries == 0)
             {
-                if (PacketType == PACKET_TYPE_KD_DEBUG_IO)
+                ULONG MessageId = *(PULONG)MessageHeader->Buffer;
+                switch (PacketType)
                 {
-                    return;
+                    case PACKET_TYPE_KD_DEBUG_IO:
+                    {
+                        if (MessageId != DbgKdPrintStringApi) continue;
+                        break;
+                    }
+
+                    case PACKET_TYPE_KD_STATE_CHANGE32:
+                    case PACKET_TYPE_KD_STATE_CHANGE64:
+                    {
+                        if (MessageId != DbgKdLoadSymbolsStateChange) continue;
+                        break;
+                    }
+
+                    case PACKET_TYPE_KD_FILE_IO:
+                    {
+                        if (MessageId != DbgKdCreateFileApi) continue;
+                        break;
+                    }
                 }
+
+                /* Reset debugger state */
+                KD_DEBUGGER_NOT_PRESENT = TRUE;
+                SharedUserData->KdDebuggerEnabled &= ~0x00000002;
+                CurrentPacketId = INITIAL_PACKET_ID | SYNC_PACKET_ID;
+                RemotePacketId  = INITIAL_PACKET_ID;
+
+                return;
             }
         }
         // else (KdStatus == KDP_PACKET_RESEND) /* Resend the packet */