mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 13:34:53 +00:00
[NTOSKRNL] Use interlocked operations when dealing with map count.
CORE-14349
This commit is contained in:
parent
1b672981e2
commit
40017a54f9
|
@ -344,7 +344,7 @@ retry:
|
||||||
CcRosVacbIncRefCount(current);
|
CcRosVacbIncRefCount(current);
|
||||||
|
|
||||||
/* Check if it's mapped and not dirty */
|
/* Check if it's mapped and not dirty */
|
||||||
if (current->MappedCount > 0 && !current->Dirty)
|
if (InterlockedCompareExchange((PLONG)¤t->MappedCount, 0, 0) > 0 && !current->Dirty)
|
||||||
{
|
{
|
||||||
/* We have to break these locks because Cc sucks */
|
/* We have to break these locks because Cc sucks */
|
||||||
KeReleaseSpinLock(¤t->SharedCacheMap->CacheMapLock, oldIrql);
|
KeReleaseSpinLock(¤t->SharedCacheMap->CacheMapLock, oldIrql);
|
||||||
|
@ -448,14 +448,13 @@ CcRosReleaseVacb (
|
||||||
|
|
||||||
if (Mapped)
|
if (Mapped)
|
||||||
{
|
{
|
||||||
Vacb->MappedCount++;
|
if (InterlockedIncrement((PLONG)&Vacb->MappedCount) == 1)
|
||||||
}
|
|
||||||
Refs = CcRosVacbDecRefCount(Vacb);
|
|
||||||
if (Mapped && (Vacb->MappedCount == 1))
|
|
||||||
{
|
{
|
||||||
CcRosVacbIncRefCount(Vacb);
|
CcRosVacbIncRefCount(Vacb);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Refs = CcRosVacbDecRefCount(Vacb);
|
||||||
ASSERT(Refs > 0);
|
ASSERT(Refs > 0);
|
||||||
|
|
||||||
CcRosReleaseVacbLock(Vacb);
|
CcRosReleaseVacbLock(Vacb);
|
||||||
|
@ -630,9 +629,7 @@ CcRosUnmapVacb (
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(Vacb->MappedCount != 0);
|
ASSERT(Vacb->MappedCount != 0);
|
||||||
Vacb->MappedCount--;
|
if (InterlockedDecrement((PLONG)&Vacb->MappedCount) == 0)
|
||||||
|
|
||||||
if (Vacb->MappedCount == 0)
|
|
||||||
{
|
{
|
||||||
CcRosVacbDecRefCount(Vacb);
|
CcRosVacbDecRefCount(Vacb);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue