diff -r 04a1b74efd48 -r d32f34975bbf kernel/eka/memmodel/epoc/flexible/mmu/mthrash.cpp --- a/kernel/eka/memmodel/epoc/flexible/mmu/mthrash.cpp Mon Feb 01 19:40:00 2010 +0100 +++ b/kernel/eka/memmodel/epoc/flexible/mmu/mthrash.cpp Mon Feb 01 19:49:38 2010 +0100 @@ -75,6 +75,12 @@ c.iCount += aDelta; c.iLastUpdateTime = currentTime; + if(!iUpdateTimer.IsPending()) + { + TInt r = iUpdateTimer.OneShot(KUpdatePeriod, iUpdateDfc); + __NK_ASSERT_ALWAYS(r == KErrNone); + } + NKern::FMSignal(&iMutex); __NK_ASSERT_DEBUG(c.iCount >= 0); @@ -145,8 +151,21 @@ } iLastUpdateTime = currentTime; - TInt r = iUpdateTimer.Again(KUpdatePeriod); - if (r == KErrArgument) - r = iUpdateTimer.OneShot(KUpdatePeriod, iUpdateDfc); - __NK_ASSERT_ALWAYS(r == KErrNone); + + if(iThrashLevel != 0) + { + NKern::FMWait(&iMutex); + if(!iUpdateTimer.IsPending()) + { + TInt r = iUpdateTimer.Again(KUpdatePeriod); + if (r == KErrArgument) + { + r = iUpdateTimer.OneShot(KUpdatePeriod, iUpdateDfc); + } + __NK_ASSERT_ALWAYS(r == KErrNone); + } + NKern::FMSignal(&iMutex); + + } + }