Author: tkreuzer
Date: Fri Oct 24 15:58:06 2008
New Revision: 36926
URL:
http://svn.reactos.org/svn/reactos?rev=36926&view=rev
Log:
sync to trunk head (36925)
Modified:
branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/connect.c
branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/listen.c
branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/read.c
branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/write.c
branches/ros-amd64-bringup/reactos/drivers/network/tcpip/tcpip/dispatch.c
branches/ros-amd64-bringup/reactos/drivers/network/tcpip/tcpip/main.c
branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/arp.c
branches/ros-amd64-bringup/reactos/lib/drivers/ip/transport/datagram/datagram.c
Modified: branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/connect.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/drive…
==============================================================================
--- branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/connect.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/connect.c [iso-8859-1] Fri
Oct 24 15:58:06 2008
@@ -77,11 +77,6 @@
AFD_DbgPrint(MID_TRACE,("Called: FCB %x, FO %x\n",
Context, FCB->FileObject));
- if( Irp->Cancel ) {
- if( FCB ) FCB->ConnectIrp.InFlightRequest = NULL;
- return STATUS_CANCELLED;
- }
-
/* I was wrong about this before as we can have pending writes to a not
* yet connected socket */
if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
@@ -90,6 +85,11 @@
Irp->IoStatus.Status));
FCB->ConnectIrp.InFlightRequest = NULL;
+
+ if( Irp->Cancel ) {
+ SocketStateUnlock( FCB );
+ return STATUS_CANCELLED;
+ }
if( NT_SUCCESS(Irp->IoStatus.Status) ) {
FCB->PollState |= AFD_EVENT_CONNECT | AFD_EVENT_SEND;
Modified: branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/listen.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/drive…
==============================================================================
--- branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/listen.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/listen.c [iso-8859-1] Fri
Oct 24 15:58:06 2008
@@ -102,14 +102,14 @@
PAFD_FCB FCB = (PAFD_FCB)Context;
PAFD_TDI_OBJECT_QELT Qelt;
+ if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
+
+ FCB->ListenIrp.InFlightRequest = NULL;
+
if( Irp->Cancel ) {
- if( FCB ) FCB->ListenIrp.InFlightRequest = NULL;
+ SocketStateUnlock( FCB );
return STATUS_CANCELLED;
}
-
- if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
-
- FCB->ListenIrp.InFlightRequest = NULL;
if( FCB->State == SOCKET_STATE_CLOSED ) {
SocketStateUnlock( FCB );
Modified: branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/read.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/drive…
==============================================================================
--- branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/read.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/read.c [iso-8859-1] Fri Oct
24 15:58:06 2008
@@ -234,14 +234,15 @@
ASSERT_IRQL(APC_LEVEL);
+ if( !SocketAcquireStateLock( FCB ) ) return Status;
+
+ FCB->ReceiveIrp.InFlightRequest = NULL;
+
if( Irp->Cancel ) {
- if( FCB ) FCB->ReceiveIrp.InFlightRequest = NULL;
+ SocketStateUnlock( FCB );
return STATUS_CANCELLED;
}
- if( !SocketAcquireStateLock( FCB ) ) return Status;
-
- FCB->ReceiveIrp.InFlightRequest = NULL;
FCB->Recv.Content = Irp->IoStatus.Information;
FCB->Recv.BytesUsed = 0;
@@ -455,14 +456,14 @@
AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
+ if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
+
+ FCB->ReceiveIrp.InFlightRequest = NULL;
+
if( Irp->Cancel ) {
- if( FCB ) FCB->ReceiveIrp.InFlightRequest = NULL;
+ SocketStateUnlock( FCB );
return STATUS_CANCELLED;
}
-
- if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
-
- FCB->ReceiveIrp.InFlightRequest = NULL;
if( FCB->State == SOCKET_STATE_CLOSED ) {
SocketStateUnlock( FCB );
Modified: branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/write.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/drive…
==============================================================================
--- branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/write.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/drivers/network/afd/afd/write.c [iso-8859-1] Fri
Oct 24 15:58:06 2008
@@ -40,15 +40,15 @@
ASSERT_IRQL(APC_LEVEL);
- if( Irp->Cancel ) {
- if( FCB ) FCB->SendIrp.InFlightRequest = NULL;
- return STATUS_CANCELLED;
- }
-
if( !SocketAcquireStateLock( FCB ) ) return Status;
FCB->SendIrp.InFlightRequest = NULL;
/* Request is not in flight any longer */
+
+ if( Irp->Cancel ) {
+ SocketStateUnlock( FCB );
+ return STATUS_CANCELLED;
+ }
if( FCB->State == SOCKET_STATE_CLOSED ) {
SocketStateUnlock( FCB );
@@ -176,19 +176,19 @@
Irp->IoStatus.Status,
Irp->IoStatus.Information));
- if( Irp->Cancel ) {
- if( FCB ) FCB->SendIrp.InFlightRequest = NULL;
- return STATUS_CANCELLED;
- }
-
/* It's ok if the FCB already died */
if( !SocketAcquireStateLock( FCB ) ) return STATUS_SUCCESS;
+ FCB->SendIrp.InFlightRequest = NULL;
+ /* Request is not in flight any longer */
+
+ if( Irp->Cancel ) {
+ SocketStateUnlock( FCB );
+ return STATUS_CANCELLED;
+ }
+
FCB->PollState |= AFD_EVENT_SEND;
PollReeval( FCB->DeviceExt, FCB->FileObject );
-
- FCB->SendIrp.InFlightRequest = NULL;
- /* Request is not in flight any longer */
if( FCB->State == SOCKET_STATE_CLOSED ) {
SocketStateUnlock( FCB );
Modified: branches/ros-amd64-bringup/reactos/drivers/network/tcpip/tcpip/dispatch.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/drive…
==============================================================================
--- branches/ros-amd64-bringup/reactos/drivers/network/tcpip/tcpip/dispatch.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/drivers/network/tcpip/tcpip/dispatch.c [iso-8859-1]
Fri Oct 24 15:58:06 2008
@@ -485,18 +485,22 @@
IrpSp = IoGetCurrentIrpStackLocation(Irp);
DisReq = (PTDI_REQUEST_KERNEL_DISCONNECT)&IrpSp->Parameters;
+ TcpipRecursiveMutexEnter( &TCPLock, TRUE );
+
/* Get associated connection endpoint file object. Quit if none exists */
TranContext = IrpSp->FileObject->FsContext;
if (!TranContext) {
TI_DbgPrint(MID_TRACE, ("Bad transport context.\n"));
- return STATUS_INVALID_CONNECTION;
+ Status = STATUS_INVALID_CONNECTION;
+ goto done;
}
Connection = (PCONNECTION_ENDPOINT)TranContext->Handle.ConnectionContext;
if (!Connection) {
TI_DbgPrint(MID_TRACE, ("No connection endpoint file object.\n"));
- return STATUS_INVALID_CONNECTION;
+ Status = STATUS_INVALID_CONNECTION;
+ goto done;
}
Status = TCPDisconnect(
@@ -507,7 +511,15 @@
DispDataRequestComplete,
Irp );
- TI_DbgPrint(MAX_TRACE, ("TCP Connect returned %08x\n", Status));
+done:
+ if (Status != STATUS_PENDING) {
+ DispDataRequestComplete(Irp, Status, 0);
+ } else
+ IoMarkIrpPending(Irp);
+
+ TcpipRecursiveMutexLeave( &TCPLock );
+
+ TI_DbgPrint(MAX_TRACE, ("TCP Disconnect returned %08x\n", Status));
return Status;
}
@@ -1494,7 +1506,7 @@
TI_DbgPrint(DEBUG_IRP, ("Completing IRP at (0x%X).\n", Irp));
- return IRPFinish(Irp, STATUS_INVALID_PARAMETER);
+ return Irp->IoStatus.Status;
}
Status = DispPrepareIrpForCancel(TranContext, Irp, NULL);
Modified: branches/ros-amd64-bringup/reactos/drivers/network/tcpip/tcpip/main.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/drive…
==============================================================================
--- branches/ros-amd64-bringup/reactos/drivers/network/tcpip/tcpip/main.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/drivers/network/tcpip/tcpip/main.c [iso-8859-1] Fri
Oct 24 15:58:06 2008
@@ -437,6 +437,7 @@
case TDI_DISCONNECT:
Status = DispTdiDisconnect(Irp);
+ Complete = FALSE;
break;
case TDI_ASSOCIATE_ADDRESS:
Modified: branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/arp.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/d…
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/arp.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/arp.c [iso-8859-1] Fri Oct
24 15:58:06 2008
@@ -230,7 +230,7 @@
Header->HWAddrLen, NUD_REACHABLE);
}
- if (Header->Opcode != ARP_OPCODE_REQUEST)
+ if (Header->Opcode != ARP_OPCODE_REQUEST || !NCE)
return;
/* This is a request for our address. Swap the addresses and
Modified: branches/ros-amd64-bringup/reactos/lib/drivers/ip/transport/datagram/datagram.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/d…
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/drivers/ip/transport/datagram/datagram.c
[iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/lib/drivers/ip/transport/datagram/datagram.c
[iso-8859-1] Fri Oct 24 15:58:06 2008
@@ -254,6 +254,9 @@
{
ReceiveRequest->RemotePort = 0;
}
+
+ IoMarkIrpPending(Irp);
+
ReceiveRequest->ReturnInfo = ReturnInfo;
ReceiveRequest->Buffer = BufferData;
ReceiveRequest->BufferSize = ReceiveLength;