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