From 27588824f0f1ca7d9cbf0632c3e42d714b6edb63 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 29 Nov 2011 17:05:56 +0000 Subject: [PATCH] [NTOSKRNL] - Don't signal the balancer from within the balancer - Optimize usage of the balancer a bit so we don't have to wait on it as much svn path=/trunk/; revision=54537 --- reactos/ntoskrnl/mm/balance.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/mm/balance.c b/reactos/ntoskrnl/mm/balance.c index 8c6e4fe72ce..2f33c418a65 100644 --- a/reactos/ntoskrnl/mm/balance.c +++ b/reactos/ntoskrnl/mm/balance.c @@ -262,7 +262,8 @@ MmRequestPageMemoryConsumer(ULONG Consumer, BOOLEAN CanWait, if (Consumer == MC_USER) MmInsertLRULastUserPage(Page); *AllocatedPage = Page; if (MmAvailablePages <= MiMinimumAvailablePages && - MiBalancerThreadHandle != NULL) + MiBalancerThreadHandle != NULL && + !MiIsBalancerThread()) { KeSetEvent(&MiBalancerEvent, IO_NO_INCREMENT, FALSE); } @@ -311,6 +312,13 @@ MmRequestPageMemoryConsumer(ULONG Consumer, BOOLEAN CanWait, *AllocatedPage = Page; (void)InterlockedDecrementUL(&MiPagesRequired); + + if (MmAvailablePages <= MiMinimumAvailablePages && + MiBalancerThreadHandle != NULL && + !MiIsBalancerThread()) + { + KeSetEvent(&MiBalancerEvent, IO_NO_INCREMENT, FALSE); + } return(STATUS_SUCCESS); } @@ -327,6 +335,13 @@ MmRequestPageMemoryConsumer(ULONG Consumer, BOOLEAN CanWait, } if(Consumer == MC_USER) MmInsertLRULastUserPage(Page); *AllocatedPage = Page; + + if (MmAvailablePages <= MiMinimumAvailablePages && + MiBalancerThreadHandle != NULL && + !MiIsBalancerThread()) + { + KeSetEvent(&MiBalancerEvent, IO_NO_INCREMENT, FALSE); + } return(STATUS_SUCCESS); } -- 2.17.1