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 & );
//
};