[ros-diffs] [fireball] 28259: One of Alex's uncommitted patches while he was working on the Cm branch: - Fix CmpCacheTable and CmpNameCacheTable definition. - Fix GET_HASH_ENTRY definition. - Add KCB Lock Acquire/Release macros by Index and Key. Has no effect on current code, but fixes some bugs in the branch-based code

fireball at svn.reactos.org fireball at svn.reactos.org
Thu Aug 9 10:35:11 CEST 2007


Author: fireball
Date: Thu Aug  9 12:35:11 2007
New Revision: 28259

URL: http://svn.reactos.org/svn/reactos?rev=28259&view=rev
Log:
One of Alex's uncommitted patches while he was working on the Cm branch:
- Fix CmpCacheTable and CmpNameCacheTable definition.
- Fix GET_HASH_ENTRY definition.
- Add KCB Lock Acquire/Release macros by Index and Key.
Has no effect on current code, but fixes some bugs in the branch-based code

Modified:
    trunk/reactos/ntoskrnl/config/cm.h
    trunk/reactos/ntoskrnl/config/cm_x.h
    trunk/reactos/ntoskrnl/config/cmkcbncb.c

Modified: trunk/reactos/ntoskrnl/config/cm.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/config/cm.h?rev=28259&r1=28258&r2=28259&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/config/cm.h (original)
+++ trunk/reactos/ntoskrnl/config/cm.h Thu Aug  9 12:35:11 2007
@@ -1142,6 +1142,14 @@
 
 BOOLEAN
 NTAPI
+CmpAddSubKey(
+    IN PHHIVE Hive,
+    IN HCELL_INDEX Parent,
+    IN HCELL_INDEX Child
+);
+
+BOOLEAN
+NTAPI
 CmpRemoveSubKey(
     IN PHHIVE Hive,
     IN HCELL_INDEX ParentKey,
@@ -1345,8 +1353,8 @@
 extern LIST_ENTRY CmpHiveListHead;
 extern POBJECT_TYPE CmpKeyObjectType;
 extern ERESOURCE CmpRegistryLock;
-extern PCM_KEY_HASH_TABLE_ENTRY *CmpCacheTable;
-extern PCM_NAME_HASH_TABLE_ENTRY *CmpNameCacheTable;
+extern PCM_KEY_HASH_TABLE_ENTRY CmpCacheTable;
+extern PCM_NAME_HASH_TABLE_ENTRY CmpNameCacheTable;
 extern KGUARDED_MUTEX CmpDelayedCloseTableLock;
 extern CMHIVE CmControlHive;
 extern WCHAR CmDefaultLanguageId[];
@@ -1371,6 +1379,7 @@
 extern HANDLE CmpRegistryRootHandle;
 extern BOOLEAN ExpInTextModeSetup;
 extern BOOLEAN InitIsWinPEMode;
+extern ULONG CmpHashTableSize;
 
 //
 // Inlined functions

Modified: trunk/reactos/ntoskrnl/config/cm_x.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/config/cm_x.h?rev=28259&r1=28258&r2=28259&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/config/cm_x.h (original)
+++ trunk/reactos/ntoskrnl/config/cm_x.h Thu Aug  9 12:35:11 2007
@@ -62,7 +62,7 @@
 #define GET_HASH_INDEX(ConvKey)                                     \
     GET_HASH_KEY(ConvKey) % CmpHashTableSize
 #define GET_HASH_ENTRY(Table, ConvKey)                              \
-    (*Table[GET_HASH_INDEX(ConvKey)])
+    (Table[GET_HASH_INDEX(ConvKey)])
 
 //
 // Returns whether or not the cell is cached
@@ -115,6 +115,62 @@
 }
 
 //
+// Exclusively acquires a KCB by index
+//
+#define CmpAcquireKcbLockExclusiveByIndex(i)                        \
+{                                                                   \
+    ExAcquirePushLockExclusive(&CmpCacheTable[(i)].Lock);           \
+    CmpCacheTable[(i)].Owner = KeGetCurrentThread();                \
+}
+
+//
+// Exclusively acquires a KCB by key
+//
+#define CmpAcquireKcbLockExclusiveByKey(k)                          \
+{                                                                   \
+    ExAcquirePushLockExclusive(&GET_HASH_ENTRY(CmpCacheTable,       \
+                                              (k)).Lock);           \
+    GET_HASH_ENTRY(CmpCacheTable,                                   \
+                   (k)).Owner = KeGetCurrentThread();               \
+}
+
+
+//
+// Shared acquires a KCB
+//
+#define CmpAcquireKcbLockShared(k)                                  \
+{                                                                   \
+    ExAcquirePushLockShared(&GET_HASH_ENTRY(CmpCacheTable,          \
+                                            (k)->ConvKey).Lock);    \
+}
+
+//
+// Shared acquires a KCB by index
+//
+#define CmpAcquireKcbLockSharedByIndex(i)                           \
+{                                                                   \
+    ExAcquirePushLockShared(&CmpCacheTable[(i)].Lock);              \
+}
+
+//
+// Tries to convert a KCB lock
+//
+FORCEINLINE
+BOOLEAN
+CmpTryToConvertKcbSharedToExclusive(IN PCM_KEY_CONTROL_BLOCK k)
+{
+    ASSERT(CmpIsKcbLockedExclusive(k) == FALSE);
+    if (ExConvertPushLockSharedToExclusive(
+            &GET_HASH_ENTRY(CmpCacheTable, k->ConvKey).Lock))
+    {
+        GET_HASH_ENTRY(CmpCacheTable,
+                       k->ConvKey).Owner = KeGetCurrentThread();
+        return TRUE;
+    }
+    return FALSE;
+}
+
+//
 // Releases an exlusively or shared acquired KCB
 //
 #define CmpReleaseKcbLock(k)                                        \
@@ -125,6 +181,25 @@
 }
 
 //
+// Releases an exlusively or shared acquired KCB by index
+//
+#define CmpReleaseKcbLockByIndex(i)                                 \
+{                                                                   \
+    CmpCacheTable[(i)].Owner = NULL;                                \
+    ExReleasePushLock(&CmpCacheTable[(i)].Lock);                    \
+}
+
+//
+// Releases an exlusively or shared acquired KCB by key
+//
+#define CmpReleaseKcbLockByKey(k)                                   \
+{                                                                   \
+    GET_HASH_ENTRY(CmpCacheTable, (k)).Owner = NULL;                \
+    ExReleasePushLock(&GET_HASH_ENTRY(CmpCacheTable,                \
+                                      (k)).Lock);                   \
+}
+
+//
 // Exclusively acquires an NCB
 //
 #define CmpAcquireNcbLockExclusive(n)                               \

Modified: trunk/reactos/ntoskrnl/config/cmkcbncb.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/config/cmkcbncb.c?rev=28259&r1=28258&r2=28259&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/config/cmkcbncb.c (original)
+++ trunk/reactos/ntoskrnl/config/cmkcbncb.c Thu Aug  9 12:35:11 2007
@@ -16,8 +16,8 @@
 /* GLOBALS *******************************************************************/
 
 ULONG CmpHashTableSize = 2048;
-PCM_KEY_HASH_TABLE_ENTRY *CmpCacheTable;
-PCM_NAME_HASH_TABLE_ENTRY *CmpNameCacheTable;
+PCM_KEY_HASH_TABLE_ENTRY CmpCacheTable;
+PCM_NAME_HASH_TABLE_ENTRY CmpNameCacheTable;
 
 LIST_ENTRY CmpFreeKCBListHead;
 




More information about the Ros-diffs mailing list