[ros-diffs] [cgutman] 36921: - Move the checks inside of the lock

cgutman at svn.reactos.org cgutman at svn.reactos.org
Fri Oct 24 04:56:17 CEST 2008


Author: cgutman
Date: Thu Oct 23 21:56:16 2008
New Revision: 36921

URL: http://svn.reactos.org/svn/reactos?rev=36921&view=rev
Log:
 - Move the checks inside of the lock

Modified:
    branches/aicom-network-fixes/drivers/network/afd/afd/connect.c
    branches/aicom-network-fixes/drivers/network/afd/afd/listen.c
    branches/aicom-network-fixes/drivers/network/afd/afd/read.c
    branches/aicom-network-fixes/drivers/network/afd/afd/write.c

Modified: branches/aicom-network-fixes/drivers/network/afd/afd/connect.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/afd/afd/connect.c?rev=36921&r1=36920&r2=36921&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/afd/afd/connect.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/afd/afd/connect.c [iso-8859-1] Thu Oct 23 21:56:16 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/aicom-network-fixes/drivers/network/afd/afd/listen.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/afd/afd/listen.c?rev=36921&r1=36920&r2=36921&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/afd/afd/listen.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/afd/afd/listen.c [iso-8859-1] Thu Oct 23 21:56:16 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/aicom-network-fixes/drivers/network/afd/afd/read.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/afd/afd/read.c?rev=36921&r1=36920&r2=36921&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/afd/afd/read.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/afd/afd/read.c [iso-8859-1] Thu Oct 23 21:56:16 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/aicom-network-fixes/drivers/network/afd/afd/write.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/afd/afd/write.c?rev=36921&r1=36920&r2=36921&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/afd/afd/write.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/afd/afd/write.c [iso-8859-1] Thu Oct 23 21:56:16 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 );



More information about the Ros-diffs mailing list