From 6515d813b307cba11e64b0871ef996bc69cfe8a8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Sun, 21 Apr 2013 23:39:05 +0000 Subject: [PATCH] [KDCOM] Seems to fix reconnection issues, in two lines. svn path=/trunk/; revision=58823 --- reactos/drivers/base/kddll/kddll.c | 40 +++++++++++++----------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c index a5b92473035..4ab5fa3a32d 100644 --- a/reactos/drivers/base/kddll/kddll.c +++ b/reactos/drivers/base/kddll/kddll.c @@ -371,6 +371,16 @@ KdSendPacket( do { + if (Retries == 0) + { + /* PACKET_TYPE_KD_DEBUG_IO is allowed to instantly timeout */ + if (PacketType == PACKET_TYPE_KD_DEBUG_IO) + { + /* No response, silently fail. */ + return; + } + } + /* Set the packet id */ Packet.PacketId = CurrentPacketId; @@ -381,10 +391,7 @@ KdSendPacket( KdpSendBuffer(MessageHeader->Buffer, MessageHeader->Length); /* If we have meesage data, also send it */ - if (MessageData) - { - KdpSendBuffer(MessageData->Buffer, MessageData->Length); - } + if (MessageData) KdpSendBuffer(MessageData->Buffer, MessageData->Length); /* Finalize with a trailing byte */ KdpSendByte(PACKET_TRAILING_BYTE); @@ -393,31 +400,18 @@ KdSendPacket( KdStatus = KdReceivePacket(PACKET_TYPE_KD_ACKNOWLEDGE, NULL, NULL, - 0, + NULL, KdContext); - - /* Did we succeed? */ - if (KdStatus == KDP_PACKET_RECEIVED) - { - CurrentPacketId &= ~SYNC_PACKET_ID; - break; - } - - /* PACKET_TYPE_KD_DEBUG_IO is allowed to instantly timeout */ - if (PacketType == PACKET_TYPE_KD_DEBUG_IO) - { - /* No response, silently fail. */ - return; - } - if (KdStatus == KDP_PACKET_TIMEOUT) { - Retries--; + if (Retries > 0) Retries--; } /* Packet timed out, send it again */ KDDBGPRINT("KdSendPacket got KdStatus 0x%x\n", KdStatus); - } - while (Retries > 0); + + } while (KdStatus != KDP_PACKET_RECEIVED); + + CurrentPacketId &= ~SYNC_PACKET_ID; } -- 2.17.1