diff --git a/indra/newview/fsassetblacklist.cpp b/indra/newview/fsassetblacklist.cpp
index cb79766de1..34f8aa203a 100644
--- a/indra/newview/fsassetblacklist.cpp
+++ b/indra/newview/fsassetblacklist.cpp
@@ -149,7 +149,6 @@ void FSAssetBlacklist::addNewItemToBlacklistData(const LLUUID& id, const LLSD& d
addEntryToBlacklistMap(id, type);
mBlacklistData[id] = data;
- gObjectList.addDerenderedItem(id, true);
if (type == LLAssetType::AT_SOUND)
{
@@ -227,6 +226,10 @@ void FSAssetBlacklist::loadBlacklist()
{
continue;
}
+ else if (type == LLAssetType::AT_OBJECT)
+ {
+ gObjectList.addDerenderedItem(uid, true);
+ }
addNewItemToBlacklistData(uid, entry_data, false);
}
@@ -255,7 +258,11 @@ void FSAssetBlacklist::loadBlacklist()
continue;
}
LLAssetType::EType type = S32toAssetType(data["entry_type"].asInteger());
-
+ if (type == LLAssetType::AT_OBJECT)
+ {
+ gObjectList.addDerenderedItem(uid, true);
+ }
+
LLSD newdata;
newdata["asset_name"] = "[PHOENIX] " + data["entry_name"].asString();
newdata["asset_type"] = type;
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index 9c9482050c..88c99c713b 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -2871,6 +2871,7 @@ void derenderObject(bool permanent)
if ( (objp) && (gAgentID != objp->getID()) && ((!rlv_handler_t::isEnabled()) || (!objp->isAttachment()) || (!objp->permYouOwner())) )
// [/RLVa:KB]
{
+ LLUUID id = objp->getID();
std::string entry_name = "";
std::string region_name;
LLAssetType::EType asset_type;
@@ -2926,7 +2927,7 @@ void derenderObject(bool permanent)
asset_type = LLAssetType::AT_OBJECT;
}
- FSAssetBlacklist::getInstance()->addNewItemToBlacklist(objp->getID(), entry_name, region_name, asset_type, permanent, false);
+ FSAssetBlacklist::getInstance()->addNewItemToBlacklist(id, entry_name, region_name, asset_type, permanent, false);
if (permanent)
{
@@ -2934,8 +2935,20 @@ void derenderObject(bool permanent)
}
select_mgr->deselectObjectOnly(objp);
- gObjectList.addDerenderedItem(objp->getID(), permanent);
+ gObjectList.addDerenderedItem(id, permanent);
gObjectList.killObject(objp);
+ if (LLViewerRegion::sVOCacheCullingEnabled && objp->getRegion())
+ {
+ objp->getRegion()->killCacheEntry(objp->getLocalID());
+ }
+
+ LLTool* tool = LLToolMgr::getInstance()->getCurrentTool();
+ LLViewerObject* tool_editing_object = tool->getEditingObject();
+ if (tool_editing_object && tool_editing_object->mID == id)
+ {
+ tool->stopEditing();
+ }
+
}
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 f017da6a79..f4027abd7e 100644
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -350,6 +350,13 @@ LLViewerObject* LLViewerObjectList::processObjectUpdateFromCache(LLVOCacheEntry*
cached_dpp->unpackU32(local_id, "LocalID");
cached_dpp->unpackU8(pcode, "PCode");
+ // Don't process derendered objects
+ if (mDerendered.end() != mDerendered.find(fullid))
+ {
+ return NULL;
+ }
+ //
+
objectp = findObject(fullid);
if (objectp)
@@ -636,8 +643,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
}
#endif
-
-
if (FSAssetBlacklist::getInstance()->isBlacklisted(fullid, LLAssetType::AT_OBJECT))
{
LL_INFOS() << "Blacklisted object blocked." << LL_ENDL;
@@ -2143,17 +2148,18 @@ 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;
}
LLViewerObject *LLViewerObjectList::createObject(const LLPCode pcode, LLViewerRegion *regionp,
const LLUUID &uuid, const U32 local_id, const LLHost &sender)
{
+ // Don't create derendered objects
+ if (mDerendered.end() != mDerendered.find(uuid))
+ {
+ return NULL;
+ }
+ //
LLUUID fullid;
if (uuid == LLUUID::null)
@@ -2186,11 +2192,6 @@ 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;
}