[ros-diffs] [cgutman] 40168: - Don't forget to store the status in the IRP - Fix some return statuses

cgutman at svn.reactos.org cgutman at svn.reactos.org
Sat Mar 21 23:54:09 CET 2009


Author: cgutman
Date: Sun Mar 22 01:54:08 2009
New Revision: 40168

URL: http://svn.reactos.org/svn/reactos?rev=40168&view=rev
Log:
 - Don't forget to store the status in the IRP
 - Fix some return statuses

Modified:
    trunk/reactos/drivers/network/afd/afd/listen.c
    trunk/reactos/drivers/network/afd/afd/read.c
    trunk/reactos/drivers/network/afd/afd/write.c

Modified: trunk/reactos/drivers/network/afd/afd/listen.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/listen.c?rev=40168&r1=40167&r2=40168&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/listen.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/listen.c [iso-8859-1] Sun Mar 22 01:54:08 2009
@@ -104,19 +104,27 @@
     PAFD_FCB FCB = (PAFD_FCB)Context;
     PAFD_TDI_OBJECT_QELT Qelt;
 
-    if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
+    if( !SocketAcquireStateLock( FCB ) ) {
+        Irp->IoStatus.Status = STATUS_FILE_CLOSED;
+        Irp->IoStatus.Information = 0;
+        return STATUS_FILE_CLOSED;
+    }
 
     FCB->ListenIrp.InFlightRequest = NULL;
 
     if( Irp->Cancel ) {
+        Irp->IoStatus.Status = STATUS_CANCELLED;
+        Irp->IoStatus.Information = 0;
         SocketStateUnlock( FCB );
 	return STATUS_CANCELLED;
     }
 
     if( FCB->State == SOCKET_STATE_CLOSED ) {
+        Irp->IoStatus.Status = STATUS_FILE_CLOSED;
+        Irp->IoStatus.Information = 0;
 	SocketStateUnlock( FCB );
 	DestroySocket( FCB );
-	return STATUS_SUCCESS;
+	return STATUS_FILE_CLOSED;
     }
 
     AFD_DbgPrint(MID_TRACE,("Completing listen request.\n"));

Modified: trunk/reactos/drivers/network/afd/afd/read.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/read.c?rev=40168&r1=40167&r2=40168&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/read.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/read.c [iso-8859-1] Sun Mar 22 01:54:08 2009
@@ -235,11 +235,17 @@
 
     ASSERT_IRQL(APC_LEVEL);
 
-    if( !SocketAcquireStateLock( FCB ) ) return Status;
+    if( !SocketAcquireStateLock( FCB ) ) {
+        Irp->IoStatus.Status = STATUS_FILE_CLOSED;
+        Irp->IoStatus.Information = 0;
+        return STATUS_FILE_CLOSED;
+    }
 
     FCB->ReceiveIrp.InFlightRequest = NULL;
 
     if( Irp->Cancel ) {
+        Irp->IoStatus.Status = STATUS_CANCELLED;
+        Irp->IoStatus.Information = 0;
         SocketStateUnlock( FCB );
 	return STATUS_CANCELLED;
     }
@@ -249,11 +255,15 @@
 
     if( FCB->State == SOCKET_STATE_CLOSED ) {
         AFD_DbgPrint(MIN_TRACE,("!!! CLOSED SOCK GOT A RECEIVE COMPLETE !!!\n"));
+        Irp->IoStatus.Status = STATUS_FILE_CLOSED;
+        Irp->IoStatus.Information = 0;
 	SocketStateUnlock( FCB );
 	DestroySocket( FCB );
-	return STATUS_SUCCESS;
+	return STATUS_FILE_CLOSED;
     } else if( FCB->State == SOCKET_STATE_LISTENING ) {
         AFD_DbgPrint(MIN_TRACE,("!!! LISTENER GOT A RECEIVE COMPLETE !!!\n"));
+        Irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
+        Irp->IoStatus.Information = 0;
         SocketStateUnlock( FCB );
         return STATUS_INVALID_PARAMETER;
     }
@@ -457,19 +467,27 @@
 
     AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB));
 
-    if( !SocketAcquireStateLock( FCB ) ) return STATUS_FILE_CLOSED;
+    if( !SocketAcquireStateLock( FCB ) ) {
+        Irp->IoStatus.Status = STATUS_FILE_CLOSED;
+        Irp->IoStatus.Information = 0;
+        return STATUS_FILE_CLOSED;
+    }
 
     FCB->ReceiveIrp.InFlightRequest = NULL;
 
     if( Irp->Cancel ) {
+        Irp->IoStatus.Status = STATUS_CANCELLED;
+        Irp->IoStatus.Information = 0;
         SocketStateUnlock( FCB );
 	return STATUS_CANCELLED;
     }
 
     if( FCB->State == SOCKET_STATE_CLOSED ) {
+        Irp->IoStatus.Status = STATUS_FILE_CLOSED;
+        Irp->IoStatus.Information = 0;
 	SocketStateUnlock( FCB );
 	DestroySocket( FCB );
-	return STATUS_SUCCESS;
+	return STATUS_FILE_CLOSED;
     }
 
     DatagramRecv = ExAllocatePool( NonPagedPool, DGSize );
@@ -488,6 +506,8 @@
     } else Status = STATUS_NO_MEMORY;
 
     if( !NT_SUCCESS( Status ) ) {
+        Irp->IoStatus.Status = Status;
+        Irp->IoStatus.Information = 0;
 	if( DatagramRecv ) ExFreePool( DatagramRecv );
 	SocketStateUnlock( FCB );
 	return Status;

Modified: trunk/reactos/drivers/network/afd/afd/write.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/afd/afd/write.c?rev=40168&r1=40167&r2=40168&view=diff
==============================================================================
--- trunk/reactos/drivers/network/afd/afd/write.c [iso-8859-1] (original)
+++ trunk/reactos/drivers/network/afd/afd/write.c [iso-8859-1] Sun Mar 22 01:54:08 2009
@@ -40,20 +40,28 @@
 
     ASSERT_IRQL(APC_LEVEL);
 
-    if( !SocketAcquireStateLock( FCB ) ) return Status;
+    if( !SocketAcquireStateLock( FCB ) ) {
+        Irp->IoStatus.Status = STATUS_FILE_CLOSED;
+        Irp->IoStatus.Information = 0;
+        return STATUS_FILE_CLOSED;
+    }
 
     FCB->SendIrp.InFlightRequest = NULL;
     /* Request is not in flight any longer */
 
     if( Irp->Cancel ) {
+        Irp->IoStatus.Status = STATUS_CANCELLED;
+        Irp->IoStatus.Information = 0;
         SocketStateUnlock( FCB );
 	return STATUS_CANCELLED;
     }
 
     if( FCB->State == SOCKET_STATE_CLOSED ) {
+        Irp->IoStatus.Status = STATUS_FILE_CLOSED;
+        Irp->IoStatus.Information = 0;
 	SocketStateUnlock( FCB );
 	DestroySocket( FCB );
-	return STATUS_SUCCESS;
+	return STATUS_FILE_CLOSED;
     }
 
     if( !NT_SUCCESS(Status) ) {
@@ -176,13 +184,18 @@
 			    Irp->IoStatus.Status,
 			    Irp->IoStatus.Information));
 
-    /* It's ok if the FCB already died */
-    if( !SocketAcquireStateLock( FCB ) ) return STATUS_SUCCESS;
+    if( !SocketAcquireStateLock( FCB ) ) {
+        Irp->IoStatus.Status = STATUS_FILE_CLOSED;
+        Irp->IoStatus.Information = 0;
+        return STATUS_FILE_CLOSED;
+    }
 
     FCB->SendIrp.InFlightRequest = NULL;
     /* Request is not in flight any longer */
 
     if( Irp->Cancel ) {
+        Irp->IoStatus.Status = STATUS_CANCELLED;
+        Irp->IoStatus.Information = 0;
         SocketStateUnlock( FCB );
 	return STATUS_CANCELLED;
     }
@@ -191,9 +204,11 @@
     PollReeval( FCB->DeviceExt, FCB->FileObject );
 
     if( FCB->State == SOCKET_STATE_CLOSED ) {
+        Irp->IoStatus.Status = STATUS_FILE_CLOSED;
+        Irp->IoStatus.Information = 0;
 	SocketStateUnlock( FCB );
 	DestroySocket( FCB );
-	return STATUS_SUCCESS;
+	return STATUS_FILE_CLOSED;
     }
 
     SocketStateUnlock( FCB );



More information about the Ros-diffs mailing list