[ros-diffs] [cgutman] 35583: - Skip ObReferenceObjectByHandle if HandleArray[i].Handle is NULL - Fail if ObReferenceObjectByHandle didn't succeed - Remove a bad ASSERT I added in my last commit

cgutman at svn.reactos.org cgutman at svn.reactos.org
Sun Aug 24 03:34:18 CEST 2008


Author: cgutman
Date: Sat Aug 23 20:34:17 2008
New Revision: 35583

URL: http://svn.reactos.org/svn/reactos?rev=35583&view=rev
Log:
 - Skip ObReferenceObjectByHandle if HandleArray[i].Handle is NULL
 - Fail if ObReferenceObjectByHandle didn't succeed
 - Remove a bad ASSERT I added in my last commit

Modified:
    branches/aicom-network-fixes/drivers/network/afd/afd/lock.c

Modified: branches/aicom-network-fixes/drivers/network/afd/afd/lock.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/afd/afd/lock.c?rev=35583&r1=35582&r2=35583&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/afd/afd/lock.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/afd/afd/lock.c [iso-8859-1] Sat Aug 23 20:34:17 2008
@@ -168,7 +168,7 @@
  * pointers.  This will allow the system to do proper alerting */
 PAFD_HANDLE LockHandles( PAFD_HANDLE HandleArray, UINT HandleCount ) {
     UINT i;
-    NTSTATUS Status;
+    NTSTATUS Status = STATUS_SUCCESS;
 
     PAFD_HANDLE FileObjects = ExAllocatePool
 	( NonPagedPool, HandleCount * sizeof(AFD_HANDLE) );
@@ -177,13 +177,21 @@
 	HandleArray[i].Status = 0;
 	HandleArray[i].Events = HandleArray[i].Events;
         FileObjects[i].Handle = 0;
-	Status = ObReferenceObjectByHandle
-	    ( (PVOID)HandleArray[i].Handle,
-	      FILE_ALL_ACCESS,
-	      NULL,
-	      KernelMode,
-	      (PVOID*)&FileObjects[i].Handle,
-	      NULL );
+	if( !HandleArray[i].Handle ) continue;
+	if( NT_SUCCESS(Status) ) {
+		Status = ObReferenceObjectByHandle
+	    	( (PVOID)HandleArray[i].Handle,
+	     	 FILE_ALL_ACCESS,
+	     	 NULL,
+	      	 KernelMode,
+	      	 (PVOID*)&FileObjects[i].Handle,
+	      	 NULL );
+	}
+    }
+
+    if( !NT_SUCCESS(Status) ) {
+	UnlockHandles( FileObjects, HandleCount );
+	return NULL;
     }
 
     return FileObjects;
@@ -324,7 +332,6 @@
 
 VOID SocketCalloutLeave( PAFD_FCB FCB ) {
     ASSERT(FCB->Critical);
-    ASSERT(!FCB->Locked);
     FCB->Critical = FALSE;
     SocketAcquireStateLock( FCB );
 }



More information about the Ros-diffs mailing list