mirror of
https://github.com/reactos/reactos.git
synced 2024-06-22 22:11:39 +00:00
[NTOS:CM] Set and reset the CMHIVE HiveIsLoading flag adequately. Fix an assertion in CmFlushKey() and reset the CMHIVE ViewLockOwner when releasing the view lock.
This commit is contained in:
parent
86800fc498
commit
83fdb9a6d9
|
@ -1959,6 +1959,7 @@ CmFlushKey(IN PCM_KEY_CONTROL_BLOCK Kcb,
|
|||
{
|
||||
/* Don't touch the hive */
|
||||
CmpLockHiveFlusherExclusive(CmHive);
|
||||
|
||||
ASSERT(CmHive->ViewLock);
|
||||
KeAcquireGuardedMutex(CmHive->ViewLock);
|
||||
CmHive->ViewLockOwner = KeGetCurrentThread();
|
||||
|
@ -1968,13 +1969,18 @@ CmFlushKey(IN PCM_KEY_CONTROL_BLOCK Kcb,
|
|||
{
|
||||
/* I don't believe the current Hv does shrinking */
|
||||
ASSERT(FALSE);
|
||||
// CMP_ASSERT_EXCLUSIVE_REGISTRY_LOCK_OR_LOADING(CmHive);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Now we can release views */
|
||||
ASSERT(CmHive->ViewLock);
|
||||
CMP_ASSERT_EXCLUSIVE_REGISTRY_LOCK_OR_LOADING(CmHive);
|
||||
ASSERT(KeGetCurrentThread() == CmHive->ViewLockOwner);
|
||||
// CMP_ASSERT_VIEW_LOCK_OWNED(CmHive);
|
||||
ASSERT((CmpSpecialBootCondition == TRUE) ||
|
||||
(CmHive->HiveIsLoading == TRUE) ||
|
||||
(CmHive->ViewLockOwner == KeGetCurrentThread()) ||
|
||||
(CmpTestRegistryLockExclusive() == TRUE));
|
||||
CmHive->ViewLockOwner = NULL;
|
||||
KeReleaseGuardedMutex(CmHive->ViewLock);
|
||||
}
|
||||
|
||||
|
@ -2240,6 +2246,9 @@ CmUnloadKey(IN PCM_KEY_CONTROL_BLOCK Kcb,
|
|||
}
|
||||
}
|
||||
|
||||
/* Set the loading flag */
|
||||
CmHive->HiveIsLoading = TRUE;
|
||||
|
||||
/* Flush the hive */
|
||||
CmFlushKey(Kcb, TRUE);
|
||||
|
||||
|
@ -2248,8 +2257,13 @@ CmUnloadKey(IN PCM_KEY_CONTROL_BLOCK Kcb,
|
|||
{
|
||||
DPRINT("CmpUnlinkHiveFromMaster() failed!\n");
|
||||
|
||||
/* Remove the unloading flag and return failure */
|
||||
/* Remove the unloading flag */
|
||||
Hive->HiveFlags &= ~HIVE_IS_UNLOADING;
|
||||
|
||||
/* Reset the loading flag */
|
||||
CmHive->HiveIsLoading = FALSE;
|
||||
|
||||
/* Return failure */
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@ CmpInitializeHive(OUT PCMHIVE *CmHive,
|
|||
Hive->NotifyList.Flink = NULL;
|
||||
Hive->NotifyList.Blink = NULL;
|
||||
|
||||
/* Set loading flag */
|
||||
/* Set the loading flag */
|
||||
Hive->HiveIsLoading = TRUE;
|
||||
|
||||
/* Set the current thread as creator */
|
||||
|
@ -213,6 +213,9 @@ CmpInitializeHive(OUT PCMHIVE *CmHive,
|
|||
}
|
||||
}
|
||||
|
||||
/* Reset the loading flag */
|
||||
Hive->HiveIsLoading = FALSE;
|
||||
|
||||
/* Lock the hive list */
|
||||
ExAcquirePushLockExclusive(&CmpHiveListHeadLock);
|
||||
|
||||
|
|
Loading…
Reference in a new issue