Bug 1038357 - Added automatic pruning for mForcedValidEntries in CacheStorage Service. r=honzab

This commit is contained in:
Jeremy Poulin 2014-07-15 09:23:09 -07:00
parent 249c87c806
commit c7050c0475
2 changed files with 33 additions and 2 deletions

View File

@ -1067,13 +1067,42 @@ void CacheStorageService::ForceEntryValidFor(nsACString &aCacheEntryKey,
{
mozilla::MutexAutoLock lock(mLock);
TimeStamp now = TimeStamp::NowLoRes();
ForcedValidEntriesPrune(now);
// This will be the timeout
TimeStamp validUntil = TimeStamp::NowLoRes() +
TimeDuration::FromSeconds(aSecondsToTheFuture);
TimeStamp validUntil = now + TimeDuration::FromSeconds(aSecondsToTheFuture);
mForcedValidEntries.Put(aCacheEntryKey, validUntil);
}
namespace { // anon
PLDHashOperator PruneForcedValidEntries(
const nsACString& aKey, TimeStamp& aTimeStamp, void* aClosure)
{
TimeStamp* now = static_cast<TimeStamp*>(aClosure);
if (aTimeStamp < *now) {
return PL_DHASH_REMOVE;
}
return PL_DHASH_NEXT;
}
} // anon
// Cleans out the old entries in mForcedValidEntries
void CacheStorageService::ForcedValidEntriesPrune(TimeStamp &now)
{
static TimeDuration const oneMinute = TimeDuration::FromSeconds(60);
static TimeStamp dontPruneUntil = now + oneMinute;
if (now < dontPruneUntil)
return;
mForcedValidEntries.Enumerate(PruneForcedValidEntries, &now);
dontPruneUntil = now + oneMinute;
}
void
CacheStorageService::OnMemoryConsumptionChange(CacheMemoryConsumer* aConsumer,
uint32_t aCurrentMemoryConsumption)

View File

@ -280,6 +280,8 @@ private:
bool aReplace,
CacheEntryHandle** aResult);
void ForcedValidEntriesPrune(TimeStamp &now);
static CacheStorageService* sSelf;
mozilla::Mutex mLock;