Author: arty
Date: Sun Nov 12 13:01:56 2006
New Revision: 24726
URL:
http://svn.reactos.org/svn/reactos?rev=24726&view=rev
Log:
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.
Modified:
trunk/reactos/drivers/network/tcpip/tcpip/dispatch.c
Modified: trunk/reactos/drivers/network/tcpip/tcpip/dispatch.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/tcpip/tcpi…
==============================================================================
--- trunk/reactos/drivers/network/tcpip/tcpip/dispatch.c (original)
+++ trunk/reactos/drivers/network/tcpip/tcpip/dispatch.c Sun Nov 12 13:01:56 2006
@@ -796,6 +796,9 @@
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 @@
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));