[ros-diffs] [hbirr] 16758: Lock the handle table if we trying to get a pointer from a handle.

hbirr at svn.reactos.com hbirr at svn.reactos.com
Tue Jul 26 21:46:23 CEST 2005


Lock the handle table if we trying to get a pointer from a handle.
Modified: trunk/reactos/ntoskrnl/ex/handle.c
  _____  

Modified: trunk/reactos/ntoskrnl/ex/handle.c
--- trunk/reactos/ntoskrnl/ex/handle.c	2005-07-26 19:38:33 UTC (rev
16757)
+++ trunk/reactos/ntoskrnl/ex/handle.c	2005-07-26 19:46:07 UTC (rev
16758)
@@ -910,14 +910,16 @@

 
   ASSERT(HandleTable);
 
+  ExAcquireHandleTableLockShared(HandleTable);
   HandleTableEntry = ExpLookupHandleTableEntry(HandleTable,
                                                Handle);
   if (HandleTableEntry != NULL && ExLockHandleTableEntry(HandleTable,
HandleTableEntry))
   {
     DPRINT("ExMapHandleToPointer HT:0x%p Entry:0x%p locked\n",
HandleTable, HandleTableEntry);
+    ExReleaseHandleTableLock(HandleTable);
     return HandleTableEntry;
   }
-
+  ExReleaseHandleTableLock(HandleTable);
   return NULL;
 }
 
@@ -936,12 +938,14 @@
   ASSERT(ChangeHandleCallback);
 
   KeEnterCriticalRegion();
+  ExAcquireHandleTableLockShared(HandleTable);
 
   HandleTableEntry = ExpLookupHandleTableEntry(HandleTable,
                                                Handle);
 
   if(HandleTableEntry != NULL && ExLockHandleTableEntry(HandleTable,
HandleTableEntry))
   {
+    ExReleaseHandleTableLock(HandleTable);
     Ret = ChangeHandleCallback(HandleTable,
                                HandleTableEntry,
                                NULL);
@@ -949,7 +953,10 @@
     ExUnlockHandleTableEntry(HandleTable,
                              HandleTableEntry);
   }
-
+  else
+  {
+    ExReleaseHandleTableLock(HandleTable);
+  }
   KeLeaveCriticalRegion();
 
   return Ret;
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20050726/4cb15d47/attachment.html


More information about the Ros-diffs mailing list