diff --git a/indra/newview/fswsassetblacklist.cpp b/indra/newview/fswsassetblacklist.cpp index ff2852e19d..aa12ae59c8 100644 --- a/indra/newview/fswsassetblacklist.cpp +++ b/indra/newview/fswsassetblacklist.cpp @@ -107,6 +107,8 @@ void FSWSAssetBlacklist::addNewItemToBlacklist(const LLUUID& id, const std::stri void FSWSAssetBlacklist::removeItemFromBlacklist(const LLUUID& id) { + gObjectList.removeDerenderedItem( id ); + blacklist_data_t::iterator it; it = mBlacklistData.find(id); @@ -130,7 +132,7 @@ void FSWSAssetBlacklist::addNewItemToBlacklistData(const LLUUID& id, const LLSD& addEntryToBlacklistMap(id, type); mBlacklistData[id] = data; - gObjectList.addBlacklistedItem( id ); + gObjectList.addDerenderedItem( id, true ); if (type == LLAssetType::AT_SOUND) { diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index dd05c8b032..6ebb1103e7 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2824,7 +2824,8 @@ void derenderObject(bool permanent) // Pass true to make sure this object stays dead. // gObjectList.killObject(objp); - gObjectList.killObject(objp, true); + gObjectList.addDerenderedItem( objp->getID(), permanent ); + gObjectList.killObject(objp); // } else if( (objp) && (gAgentID != objp->getID()) && ((rlv_handler_t::isEnabled()) || (objp->isAttachment()) || (objp->permYouOwner())) ) diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 7ccce923be..42e50f7913 100755 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -1428,8 +1428,7 @@ void LLViewerObjectList::removeDrawable(LLDrawable* drawablep) } } -// BOOL LLViewerObjectList::killObject(LLViewerObject *objectp) -BOOL LLViewerObjectList::killObject(LLViewerObject *objectp, bool aForDerender ) +BOOL LLViewerObjectList::killObject(LLViewerObject *objectp) { // Don't ever kill gAgentAvatarp, just force it to the agent's region // unless region is NULL which is assumed to mean you are logging out. @@ -1444,11 +1443,6 @@ BOOL LLViewerObjectList::killObject(LLViewerObject *objectp, bool aForDerender ) if (objectp) { - // Remember this object it case it comes back. - if( aForDerender ) - mDerendered[ objectp->getID()] = LLTimer::getTotalSeconds().value(); - // - objectp->markDead(); // does the right thing if object already dead return TRUE; } @@ -2455,13 +2449,23 @@ LLDebugBeacon::~LLDebugBeacon() void LLViewerObjectList::resetDerenderList() { - mDerendered.clear(); + std::map< LLUUID, bool > oDerendered; + + for( std::map< LLUUID, bool >::iterator itr = mDerendered.begin(); itr != mDerendered.end(); ++itr ) + if( itr->second ) + oDerendered[ itr->first ] = itr->second; + + mDerendered.swap( oDerendered ); } // Helper function to add items from global blacklist after teleport. -void LLViewerObjectList::addBlacklistedItem( LLUUID const &aId ) +void LLViewerObjectList::addDerenderedItem( LLUUID const &aId, bool aPermanent ) { - mDerendered[ aId ] = LLTimer::getTotalSeconds().value(); + mDerendered[ aId ] = aPermanent; +} +void LLViewerObjectList::removeDerenderedItem( LLUUID const &aId ) +{ + mDerendered.erase( aId ); } // diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h index 7c327ee59c..7c5e5687a9 100755 --- a/indra/newview/llviewerobjectlist.h +++ b/indra/newview/llviewerobjectlist.h @@ -72,10 +72,7 @@ public: LLViewerObject *replaceObject(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); // TomY: hack to switch VO instances on the fly - // For blacklist/derender - // BOOL killObject(LLViewerObject *objectp); - BOOL killObject(LLViewerObject *objectp, bool aForDerender = false ); - // + BOOL killObject(LLViewerObject *objectp); void killObjects(LLViewerRegion *regionp); // Kill all objects owned by a particular region. void killAllObjects(); @@ -241,10 +238,11 @@ protected: // 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::map< LLUUID, U64 > mDerendered; + std::map< LLUUID, bool > mDerendered; public: void resetDerenderList(); - void addBlacklistedItem( LLUUID const & ); + void addDerenderedItem( LLUUID const &, bool ); + void removeDerenderedItem( LLUUID const & ); // };