Author: cgutman
Date: Thu Jul 2 10:51:34 2009
New Revision: 41736
URL:
http://svn.reactos.org/svn/reactos?rev=41736&view=rev
Log:
- Don't cancel already completed requests
- Fix potential NULL pointer access
- Actually disassociate the address file and connection in DispTdiDisassociateAddress
- Insert new requests at the end of the list not the beginning
Modified:
trunk/reactos/drivers/network/tcpip/tcpip/dispatch.c
trunk/reactos/lib/drivers/ip/transport/tcp/accept.c
trunk/reactos/lib/drivers/ip/transport/tcp/tcp.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 [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/tcpip/tcpip/dispatch.c [iso-8859-1] Thu Jul 2 10:51:34
2009
@@ -85,15 +85,6 @@
IoAcquireCancelSpinLock(&OldIrql);
(void)IoSetCancelRoutine(Irp, NULL);
-
- if (Irp->Cancel || TranContext->CancelIrps) {
- /* The IRP has been cancelled */
-
- TI_DbgPrint(DEBUG_IRP, ("IRP is cancelled.\n"));
-
- Status = STATUS_CANCELLED;
- Count = 0;
- }
IoReleaseCancelSpinLock(OldIrql);
@@ -463,6 +454,12 @@
TI_DbgPrint(MID_TRACE, ("No address file is asscociated.\n"));
return STATUS_INVALID_PARAMETER;
}
+
+ /* Remove this connection from the address file */
+ Connection->AddressFile->Connection = NULL;
+
+ /* Remove the address file from this connection */
+ Connection->AddressFile = NULL;
return STATUS_SUCCESS;
}
Modified: trunk/reactos/lib/drivers/ip/transport/tcp/accept.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/drivers/ip/transport/t…
==============================================================================
--- trunk/reactos/lib/drivers/ip/transport/tcp/accept.c [iso-8859-1] (original)
+++ trunk/reactos/lib/drivers/ip/transport/tcp/accept.c [iso-8859-1] Thu Jul 2 10:51:34
2009
@@ -149,7 +149,7 @@
Bucket->Request.RequestNotifyObject = Complete;
Bucket->Request.RequestContext = Context;
IoMarkIrpPending((PIRP)Context);
- InsertHeadList( &Listener->ListenRequest, &Bucket->Entry );
+ InsertTailList( &Listener->ListenRequest, &Bucket->Entry );
} else
Status = STATUS_NO_MEMORY;
}
Modified: trunk/reactos/lib/drivers/ip/transport/tcp/tcp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/drivers/ip/transport/t…
==============================================================================
--- trunk/reactos/lib/drivers/ip/transport/tcp/tcp.c [iso-8859-1] (original)
+++ trunk/reactos/lib/drivers/ip/transport/tcp/tcp.c [iso-8859-1] Thu Jul 2 10:51:34
2009
@@ -588,6 +588,11 @@
&RemoteAddress,
&RemotePort);
+ if (!NT_SUCCESS(Status)) {
+ TI_DbgPrint(DEBUG_TCP, ("Could not AddrBuildAddress in
TCPConnect\n"));
+ return Status;
+ }
+
if (!(NCE = RouteGetRouteToDestination(&RemoteAddress)))
{
return STATUS_NETWORK_UNREACHABLE;
@@ -606,12 +611,6 @@
("Connecting to address %x:%x\n",
RemoteAddress.Address.IPv4Address,
RemotePort));
-
- if (!NT_SUCCESS(Status)) {
- TI_DbgPrint(DEBUG_TCP, ("Could not AddrBuildAddress in
TCPConnect\n"));
- TcpipRecursiveMutexLeave( &TCPLock );
- return Status;
- }
AddressToConnect.sin_family = AF_INET;
AddressToBind = AddressToConnect;
@@ -645,7 +644,7 @@
IoMarkIrpPending((PIRP)Context);
- InsertHeadList( &Connection->ConnectRequest, &Bucket->Entry );
+ InsertTailList( &Connection->ConnectRequest, &Bucket->Entry );
}
}