From: Hervé Poussineau Date: Thu, 2 May 2019 11:26:46 +0000 (+0200) Subject: [SERIAL] Immediately complete read IRP if all requested bytes have been found in... X-Git-Tag: 0.4.14-dev~1065 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=bef39dd62ee62a2b7c0eb1a3749dee0c700b5188 [SERIAL] Immediately complete read IRP if all requested bytes have been found in circular buffer Previously, we had to wait to receive another byte to finish the first IRP. --- diff --git a/drivers/serial/serial/rw.c b/drivers/serial/serial/rw.c index df101ca07b8..4179ac820b9 100644 --- a/drivers/serial/serial/rw.c +++ b/drivers/serial/serial/rw.c @@ -65,7 +65,7 @@ ReadBytes( } /* while buffer is not fully filled */ - while (Length > 0) + while (TRUE) { /* read already received bytes from buffer */ KeAcquireSpinLock(&DeviceExtension->InputBufferLock, &Irql); @@ -81,6 +81,12 @@ ReadBytes( KeClearEvent(&DeviceExtension->InputBufferNotEmpty); KeReleaseSpinLock(&DeviceExtension->InputBufferLock, Irql); + if (Length == 0) + { + INFO_(SERIAL, "All bytes read\n"); + break; + } + if (WorkItemData->DontWait && !(WorkItemData->ReadAtLeastOneByte && Information == 0)) {