diff options
| author | Merov Linden <merov@lindenlab.com> | 2011-03-11 14:38:09 -0800 | 
|---|---|---|
| committer | Merov Linden <merov@lindenlab.com> | 2011-03-11 14:38:09 -0800 | 
| commit | 005da00fff65e48c47801982cb3ff2ff45ee8985 (patch) | |
| tree | 77e0da02bf0f7cf1c4e08cf51657b72293eb1c59 /indra/newview | |
| parent | 1426765e82549ec9d17a0f90d902f25c0e785bbd (diff) | |
STORM-1059 : Fix for cache purging (fix by Aleric)
Diffstat (limited to 'indra/newview')
| -rw-r--r-- | indra/newview/lltexturecache.cpp | 19 | 
1 files changed, 9 insertions, 10 deletions
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index f54214b95c..7fb52c1939 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -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  				// 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; -				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); -						if (purge_list.size() >= entries_to_purge) -							break; -					} +					purge_list.insert(iter->second); +					++iter;  				} -				llassert_always(purge_list.size() >= entries_to_purge);  			}  			else  			{  | 
