Move completion out of the spinlock. Spotted by aicom

svn path=/trunk/; revision=34361
This commit is contained in:
Art Yerkes 2008-07-08 03:01:56 +00:00
parent f45ebc6964
commit 4cca77780c

View file

@ -141,6 +141,7 @@ NTSTATUS AfdEventReceiveDatagramHandler(
NTSTATUS Status; NTSTATUS Status;
KIRQL OldIrql; KIRQL OldIrql;
ULONG Count; ULONG Count;
BOOLEAN CompleteIrp;
AFD_DbgPrint(MAX_TRACE, ("Called.\n")); AFD_DbgPrint(MAX_TRACE, ("Called.\n"));
@ -173,7 +174,7 @@ NTSTATUS AfdEventReceiveDatagramHandler(
KeAcquireSpinLock(&FCB->ReceiveQueueLock, &OldIrql); KeAcquireSpinLock(&FCB->ReceiveQueueLock, &OldIrql);
if (!IsListEmpty(&FCB->ReadRequestQueue)) { if (CompleteIrp = !IsListEmpty(&FCB->ReadRequestQueue)) {
AFD_DbgPrint(MAX_TRACE, ("Satisfying read request.\n")); AFD_DbgPrint(MAX_TRACE, ("Satisfying read request.\n"));
Entry = RemoveHeadList(&FCB->ReceiveQueue); Entry = RemoveHeadList(&FCB->ReceiveQueue);
@ -190,15 +191,15 @@ NTSTATUS AfdEventReceiveDatagramHandler(
ReadRequest->Irp->IoStatus.Information = 0; ReadRequest->Irp->IoStatus.Information = 0;
ReadRequest->Irp->IoStatus.Status = Status; ReadRequest->Irp->IoStatus.Status = Status;
AFD_DbgPrint(MAX_TRACE, ("Completing IRP at (0x%X).\n", ReadRequest->Irp));
IoCompleteRequest(ReadRequest->Irp, IO_NETWORK_INCREMENT);
} }
KeReleaseSpinLock(&FCB->ReceiveQueueLock, OldIrql); KeReleaseSpinLock(&FCB->ReceiveQueueLock, OldIrql);
*BytesTaken = BytesAvailable; if (CompleteIrp) {
AFD_DbgPrint(MAX_TRACE, ("Completing IRP at (0x%X).\n", ReadRequest->Irp));
IoCompleteRequest(ReadRequest->Irp, IO_NETWORK_INCREMENT);
*BytesTaken = BytesAvailable;
}
AFD_DbgPrint(MAX_TRACE, ("Leaving.\n")); AFD_DbgPrint(MAX_TRACE, ("Leaving.\n"));