[NTOSKRNL]

- Fix a potential infinite loop in MmTrimUserMemory if we can't page out enough pages to meet the balancer's target

svn path=/trunk/; revision=54534
This commit is contained in:
Cameron Gutman 2011-11-29 08:13:56 +00:00
parent f6817e04bc
commit 62e97bd800

View file

@ -164,14 +164,12 @@ MmTrimUserMemory(ULONG Target, ULONG Priority, PULONG NrFreedPages)
PFN_NUMBER CurrentPage;
PFN_NUMBER NextPage;
NTSTATUS Status;
(*NrFreedPages) = 0;
CurrentPage = MmGetLRUFirstUserPage();
while (CurrentPage != 0 && Target > 0)
{
NextPage = MmGetLRUNextUserPage(CurrentPage);
Status = MmPageOutPhysicalAddress(CurrentPage);
if (NT_SUCCESS(Status))
{
@ -179,10 +177,17 @@ MmTrimUserMemory(ULONG Target, ULONG Priority, PULONG NrFreedPages)
Target--;
(*NrFreedPages)++;
}
NextPage = MmGetLRUNextUserPage(CurrentPage);
if (NextPage <= CurrentPage)
{
/* We wrapped around, so we're done */
break;
}
CurrentPage = NextPage;
}
return(STATUS_SUCCESS);
return STATUS_SUCCESS;
}
VOID