- Reapply r35481
authorCameron Gutman <aicommander@gmail.com>
Wed, 20 Aug 2008 19:06:43 +0000 (19:06 +0000)
committerCameron Gutman <aicommander@gmail.com>
Wed, 20 Aug 2008 19:06:43 +0000 (19:06 +0000)
svn path=/branches/aicom-network-fixes/; revision=35486

drivers/network/afd/afd/listen.c
drivers/network/afd/afd/read.c
drivers/network/afd/afd/write.c

index 1fa7755..a7b1544 100644 (file)
@@ -87,15 +87,15 @@ static NTSTATUS NTAPI ListenComplete
     PAFD_FCB FCB = (PAFD_FCB)Context;
     PAFD_TDI_OBJECT_QELT Qelt;
 
+    if( Irp->Cancel ) {
+       if( FCB ) FCB->ListenIrp.InFlightRequest = NULL;
+       return STATUS_CANCELLED;
+    }
+
     if( !SocketAcquireStateLock( FCB ) ) return Status;
 
     FCB->ListenIrp.InFlightRequest = NULL;
 
-    if( Irp->Cancel ) {
-       SocketStateUnlock( FCB );
-       return STATUS_SUCCESS;
-    }
-
     if( FCB->State == SOCKET_STATE_CLOSED ) {
        SocketStateUnlock( FCB );
        DestroySocket( FCB );
index 048678c..59f076d 100644 (file)
@@ -233,6 +233,11 @@ NTSTATUS NTAPI ReceiveComplete
 
     ASSERT_IRQL(APC_LEVEL);
 
+    if( Irp->Cancel ) {
+       if( FCB ) FCB->ReceiveIrp.InFlightRequest = NULL;
+       return STATUS_CANCELLED;
+    }
+
     if( !SocketAcquireStateLock( FCB ) ) return Status;
 
     FCB->ReceiveIrp.InFlightRequest = NULL;
@@ -449,6 +454,11 @@ PacketSocketRecvComplete(
 
     AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
 
+    if( Irp->Cancel ) {
+       if( FCB ) FCB->ReceiveIrp.InFlightRequest = NULL;
+       return STATUS_CANCELLED;
+    }
+
     if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
 
     FCB->ReceiveIrp.InFlightRequest = NULL;
index b8406eb..dc9ada7 100644 (file)
@@ -40,6 +40,11 @@ static NTSTATUS NTAPI SendComplete
 
     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;
@@ -170,6 +175,11 @@ static NTSTATUS NTAPI PacketSocketSendComplete
                            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;