From f5ef59b819ceadd7fe7816d9f207e6e2480f4c6a Mon Sep 17 00:00:00 2001 From: Nicky Date: Thu, 12 Jun 2014 22:24:13 +0200 Subject: [PATCH] Fire-13997. When an object is derendered it might get added again from cache. Kill that new copy too. --- indra/newview/llviewerobjectlist.cpp | 12 ++++++++++++ indra/newview/llviewerobjectlist.h | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 3b4f65602f..ee137b214e 100755 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -1443,6 +1443,8 @@ BOOL LLViewerObjectList::killObject(LLViewerObject *objectp) if (objectp) { + mDerendered.insert( objectp->getID() ); // Remember this object it case it comes back. + objectp->markDead(); // does the right thing if object already dead return TRUE; } @@ -2168,6 +2170,11 @@ LLViewerObject *LLViewerObjectList::createObjectFromCache(const LLPCode pcode, L updateActive(objectp); + // We might have killed this object earlier, but it might get resurrected from fastcache. Kill it again to make sure it stays dead. + if( mDerendered.end() != mDerendered.find( uuid ) ) + killObject( objectp ); + // + return objectp; } @@ -2206,6 +2213,11 @@ LLViewerObject *LLViewerObjectList::createObject(const LLPCode pcode, LLViewerRe updateActive(objectp); + // We might have killed this object earlier, but it might get resurrected from fastcache. Kill it again to make sure it stays dead. + if( mDerendered.end() != mDerendered.find( uuid ) ) + killObject( objectp ); + // + return objectp; } diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h index 25a9bb3eb5..a906143960 100755 --- a/indra/newview/llviewerobjectlist.h +++ b/indra/newview/llviewerobjectlist.h @@ -234,6 +234,11 @@ protected: std::set mSelectPickList; friend class LLViewerObject; + +// Remember objects we did derender. We might get object updates for them that create new instances. In those cases we kill them again. +private: + std::set< LLUUID > mDerendered; +// };