From b06dcb45c0fee81f7edd330874c24d08b8f38426 Mon Sep 17 00:00:00 2001 From: Shyotl Date: Tue, 15 Mar 2011 01:15:43 -0500 Subject: [PATCH] Applying recent commits from Snowstorm --- indra/newview/llappviewer.cpp | 2 +- indra/newview/lltexturecache.cpp | 17 ++++++++--------- indra/newview/llviewerobjectlist.cpp | 11 ++++++----- indra/newview/llvocache.cpp | 5 ++++- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index b9d320454..f8e30b4b1 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -1407,8 +1407,8 @@ bool LLAppViewer::cleanup() // Delete workers first // shotdown all worker threads before deleting them in case of co-dependencies - sTextureCache->shutdown(); sTextureFetch->shutdown(); + sTextureCache->shutdown(); sImageDecodeThread->shutdown(); sTextureFetch->shutDownTextureCacheThread(); sTextureFetch->shutDownImageDecodeThread(); diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 8ccd47066..8873821ef 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -1420,22 +1420,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; 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::iterator iter = lru.begin(); + while (purge_list.size() < entries_to_purge) { - for (std::set::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 { diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index dd37136a8..4f50fec6e 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -845,13 +845,14 @@ void LLViewerObjectList::clearDebugText() void LLViewerObjectList::cleanupReferences(LLViewerObject *objectp) { LLMemType mt(LLMemType::MTYPE_OBJECT); - if (mDeadObjects.count(objectp->mID)) + if (mDeadObjects.find(objectp->mID) != mDeadObjects.end()) { llinfos << "Object " << objectp->mID << " already on dead list, ignoring cleanup!" << llendl; - return; } - - mDeadObjects.insert(std::pair >(objectp->mID, objectp)); + else + { + mDeadObjects.insert(std::pair >(objectp->mID, objectp)); + } // Cleanup any references we have to this object // Remove from object map so noone can look it up. @@ -1100,7 +1101,7 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap) for (S32 i = 0; i < mMapObjects.count(); i++) { LLViewerObject* objectp = mMapObjects[i]; - if (!objectp->getRegion() || objectp->isOrphaned() || objectp->isAttachment()) + if (objectp->isDead() || !objectp->getRegion() || objectp->isOrphaned() || objectp->isAttachment()) { continue; } diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp index 3f1c132e7..4f4330b17 100644 --- a/indra/newview/llvocache.cpp +++ b/indra/newview/llvocache.cpp @@ -104,7 +104,10 @@ LLVOCacheEntry::LLVOCacheEntry(LLFILE *fp) LLVOCacheEntry::~LLVOCacheEntry() { - delete [] mBuffer; + if(mBuffer) + { + delete [] mBuffer; + } }