Skip to content
Snippets Groups Projects
Commit 005da00f authored by Merov Linden's avatar Merov Linden
Browse files

STORM-1059 : Fix for cache purging (fix by Aleric)

parent 1426765e
No related branches found
No related tags found
No related merge requests found
...@@ -84,7 +84,8 @@ Aleric Inglewood ...@@ -84,7 +84,8 @@ Aleric Inglewood
VWR-24315 VWR-24315
VWR-24317 VWR-24317
VWR-24320 VWR-24320
VWR-24321 VWR-24321
VWR-24337
VWR-24354 VWR-24354
VWR-24366 VWR-24366
VWR-24519 VWR-24519
......
...@@ -1419,22 +1419,21 @@ void LLTextureCache::readHeaderCache() ...@@ -1419,22 +1419,21 @@ void LLTextureCache::readHeaderCache()
} }
} }
} }
if (num_entries > sCacheMaxEntries) if (num_entries - empty_entries > sCacheMaxEntries)
{ {
// Special case: cache size was reduced, need to remove entries // Special case: cache size was reduced, need to remove entries
// Note: After we prune entries, we will call this again and create the LRU // Note: After we prune entries, we will call this again and create the LRU
U32 entries_to_purge = (num_entries-empty_entries) - sCacheMaxEntries; U32 entries_to_purge = (num_entries - empty_entries) - sCacheMaxEntries;
llinfos << "Texture Cache Entries: " << num_entries << " Max: " << sCacheMaxEntries << " Empty: " << empty_entries << " Purging: " << entries_to_purge << llendl; llinfos << "Texture Cache Entries: " << num_entries << " Max: " << sCacheMaxEntries << " Empty: " << empty_entries << " Purging: " << entries_to_purge << llendl;
if (entries_to_purge > 0) // We can exit the following loop with the given condition, since if we'd reach the end of the lru set we'd have:
// purge_list.size() = lru.size() = num_entries - empty_entries = entries_to_purge + sCacheMaxEntries >= entries_to_purge
// So, it's certain that iter will never reach lru.end() first.
std::set<lru_data_t>::iterator iter = lru.begin();
while (purge_list.size() < entries_to_purge)
{ {
for (std::set<lru_data_t>::iterator iter = lru.begin(); iter != lru.end(); ++iter) purge_list.insert(iter->second);
{ ++iter;
purge_list.insert(iter->second);
if (purge_list.size() >= entries_to_purge)
break;
}
} }
llassert_always(purge_list.size() >= entries_to_purge);
} }
else else
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment