From cff4c6e8856dabb899473af30ab6d08d8a7dc370 Mon Sep 17 00:00:00 2001 From: Xiaohong Bao Date: Tue, 21 Jun 2011 16:58:55 -0600 Subject: fix for SH-1642: [PUBLIC_JIRA_USERS][crashhunters] crash at LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *) [secondlife-bin llviewertexturelist.cpp] --- indra/newview/llviewertexturelist.cpp | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) (limited to 'indra/newview/llviewertexturelist.cpp') diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp index a1d9434d44..d24174adea 100644 --- a/indra/newview/llviewertexturelist.cpp +++ b/indra/newview/llviewertexturelist.cpp @@ -76,7 +76,6 @@ LLStat LLViewerTextureList::sFormattedMemStat(32, TRUE); LLViewerTextureList gTextureList; static LLFastTimer::DeclareTimer FTM_PROCESS_IMAGES("Process Images"); -U32 LLViewerTextureList::sRenderThreadID = 0 ; /////////////////////////////////////////////////////////////////////////////// LLViewerTextureList::LLViewerTextureList() @@ -90,7 +89,6 @@ LLViewerTextureList::LLViewerTextureList() void LLViewerTextureList::init() { - sRenderThreadID = LLThread::currentID() ; mInitialized = TRUE ; sNumImages = 0; mUpdateStats = TRUE; @@ -502,10 +500,9 @@ LLViewerFetchedTexture *LLViewerTextureList::findImage(const LLUUID &image_id) return iter->second; } -void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image, U32 thread_id) +void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image) { llassert_always(mInitialized) ; - llassert_always(sRenderThreadID == thread_id); llassert(image); if (image->isInImageList()) { @@ -519,10 +516,9 @@ void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image, U32 thre image->setInImageList(TRUE) ; } -void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image, U32 thread_id) +void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image) { llassert_always(mInitialized) ; - llassert_always(sRenderThreadID == thread_id); llassert(image); if (!image->isInImageList()) { @@ -659,10 +655,7 @@ void LLViewerTextureList::updateImagesDecodePriorities() const F32 LAZY_FLUSH_TIMEOUT = 30.f; // stop decoding const F32 MAX_INACTIVE_TIME = 50.f; // actually delete S32 min_refs = 3; // 1 for mImageList, 1 for mUUIDMap, 1 for local reference - if (imagep->hasCallbacks()) - { - min_refs++; // Add an extra reference if we're on the loaded callback list - } + S32 num_refs = imagep->getNumRefs(); if (num_refs == min_refs) { @@ -719,9 +712,9 @@ void LLViewerTextureList::updateImagesDecodePriorities() if ((decode_priority_test < old_priority_test * .8f) || (decode_priority_test > old_priority_test * 1.25f)) { - removeImageFromList(imagep, sRenderThreadID); + removeImageFromList(imagep); imagep->setDecodePriority(decode_priority); - addImageToList(imagep, sRenderThreadID); + addImageToList(imagep); } update_counter--; } @@ -893,8 +886,6 @@ void LLViewerTextureList::decodeAllImages(F32 max_time) { LLTimer timer; - llassert_always(sRenderThreadID == LLThread::currentID()); - // Update texture stats and priorities std::vector > image_list; for (image_priority_list_t::iterator iter = mImageList.begin(); -- cgit v1.2.3