Author: arty
Date: Sun Aug 19 09:02:31 2007
New Revision: 28415
URL:
http://svn.reactos.org/svn/reactos?rev=28415&view=rev
Log:
Fix part two of the bug:
The actual problem was that we'd overrun the end of the handle count array
when decrementing. This also led to a handle leak (observed). Stop correctly
when we find the handle we want.
Modified:
trunk/reactos/ntoskrnl/ob/obhandle.c
Modified: trunk/reactos/ntoskrnl/ob/obhandle.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ob/obhandle.c?rev…
==============================================================================
--- trunk/reactos/ntoskrnl/ob/obhandle.c (original)
+++ trunk/reactos/ntoskrnl/ob/obhandle.c Sun Aug 19 09:02:31 2007
@@ -331,6 +331,8 @@
/* Insert a new entry */
FreeEntry = ObpInsertHandleCount(ObjectHeader);
if (!FreeEntry) return STATUS_INSUFFICIENT_RESOURCES;
+ ASSERT(!FreeEntry->Process);
+ ASSERT(!FreeEntry->HandleCount);
/* Fill it out */
FreeEntry->Process = Process;
@@ -375,6 +377,8 @@
/* Allocate one */
FreeEntry = ObpInsertHandleCount(ObjectHeader);
if (!FreeEntry) return STATUS_INSUFFICIENT_RESOURCES;
+ ASSERT(!FreeEntry->Process);
+ ASSERT(!FreeEntry->HandleCount);
}
/* Fill out the entry */
@@ -533,6 +537,7 @@
{
/* Found it, get the process handle count */
ProcessHandleCount = HandleEntry->HandleCount--;
+ break;
}
/* Keep looping */