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/net…
==============================================================================
--- 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 );
}