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; +// };