From f2d13c6261c25bfdf53b29f3b0c4f38d7274fcc4 Mon Sep 17 00:00:00 2001 From: Roman Konecny Date: Fri, 5 Aug 2022 03:44:41 -0700 Subject: [PATCH] Read packet data in loop (#7860) --- .../BackEnd/Client/MSBuildClientPacketPump.cs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Build/BackEnd/Client/MSBuildClientPacketPump.cs b/src/Build/BackEnd/Client/MSBuildClientPacketPump.cs index 4ed37c55cea..351f922451c 100644 --- a/src/Build/BackEnd/Client/MSBuildClientPacketPump.cs +++ b/src/Build/BackEnd/Client/MSBuildClientPacketPump.cs @@ -247,7 +247,7 @@ private void RunReadLoop(Stream localStream, ManualResetEvent localPacketPumpShu } else { - ErrorUtilities.ThrowInternalError("Incomplete header read from server. {0} of {1} bytes read", headerBytesRead, headerByte.Length); + ErrorUtilities.ThrowInternalError("Incomplete header read. {0} of {1} bytes read", headerBytesRead, headerByte.Length); } } @@ -260,14 +260,18 @@ private void RunReadLoop(Stream localStream, ManualResetEvent localPacketPumpShu _readBufferMemoryStream.SetLength(packetLength); byte[] packetData = _readBufferMemoryStream.GetBuffer(); - packetBytesRead = localStream.Read(packetData, 0, packetLength); - - if (packetBytesRead != packetLength) + while (packetBytesRead < packetLength) { - // Incomplete read. Abort. - ErrorUtilities.ThrowInternalError("Incomplete header read from server. {0} of {1} bytes read", headerBytesRead, headerByte.Length); - } + int bytesRead = localStream.Read(packetData, packetBytesRead, packetLength-packetBytesRead); + if (bytesRead == 0) + { + // Incomplete read. Abort. + ErrorUtilities.ThrowInternalError("Incomplete packet read. {0} of {1} bytes read", packetBytesRead, packetLength); + } + packetBytesRead += bytesRead; + } + try { _packetFactory.DeserializeAndRoutePacket(0, packetType, _binaryReadTranslator);