[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.
This commit is contained in:
Hervé Poussineau 2019-05-02 13:26:46 +02:00
parent ebd39aa266
commit bef39dd62e

View File

@ -65,7 +65,7 @@ ReadBytes(
} }
/* while buffer is not fully filled */ /* while buffer is not fully filled */
while (Length > 0) while (TRUE)
{ {
/* read already received bytes from buffer */ /* read already received bytes from buffer */
KeAcquireSpinLock(&DeviceExtension->InputBufferLock, &Irql); KeAcquireSpinLock(&DeviceExtension->InputBufferLock, &Irql);
@ -81,6 +81,12 @@ ReadBytes(
KeClearEvent(&DeviceExtension->InputBufferNotEmpty); KeClearEvent(&DeviceExtension->InputBufferNotEmpty);
KeReleaseSpinLock(&DeviceExtension->InputBufferLock, Irql); KeReleaseSpinLock(&DeviceExtension->InputBufferLock, Irql);
if (Length == 0)
{
INFO_(SERIAL, "All bytes read\n");
break;
}
if (WorkItemData->DontWait if (WorkItemData->DontWait
&& !(WorkItemData->ReadAtLeastOneByte && Information == 0)) && !(WorkItemData->ReadAtLeastOneByte && Information == 0))
{ {