Broaden a lock to prevent a race for completion of the receive IRP. Fixes

some crashes while receiving from a fast remote host under load.

svn path=/trunk/; revision=24726
This commit is contained in:
Art Yerkes 2006-11-12 10:01:56 +00:00
parent 250bddf673
commit 4f1dd7e361

View file

@ -796,6 +796,9 @@ NTSTATUS DispTdiReceive(
TI_DbgPrint(MID_TRACE,("TCPIP<<< Got an MDL: %x\n", Irp->MdlAddress));
if (NT_SUCCESS(Status))
{
/* Lock here so we're sure we've got the following 'mark pending' */
TcpipRecursiveMutexEnter( &TCPLock, TRUE );
Status = TCPReceiveData(
TranContext->Handle.ConnectionContext,
(PNDIS_BUFFER)Irp->MdlAddress,
@ -807,8 +810,11 @@ NTSTATUS DispTdiReceive(
if (Status != STATUS_PENDING)
{
DispDataRequestComplete(Irp, Status, BytesReceived);
} else
} else {
IoMarkIrpPending(Irp);
}
TcpipRecursiveMutexLeave( &TCPLock );
}
TI_DbgPrint(DEBUG_IRP, ("Leaving. Status is (0x%X)\n", Status));