FIRE-14265: Checking if this helps with crashes during TP because of blacklisted objects:
* Don't create blacklisted objects at all instead of creating and immediately killing them * Kill the cache entry for the object once we derender it * Stop editing the objectmaster
parent
a5b89c588f
commit
81ae9eceb5
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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())) )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -350,6 +350,13 @@ LLViewerObject* LLViewerObjectList::processObjectUpdateFromCache(LLVOCacheEntry*
|
|||
cached_dpp->unpackU32(local_id, "LocalID");
|
||||
cached_dpp->unpackU8(pcode, "PCode");
|
||||
|
||||
// <FS:Ansariel> Don't process derendered objects
|
||||
if (mDerendered.end() != mDerendered.find(fullid))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
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);
|
||||
|
||||
// <FS:ND> 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 );
|
||||
// </FS:ND>
|
||||
|
||||
return objectp;
|
||||
}
|
||||
|
||||
LLViewerObject *LLViewerObjectList::createObject(const LLPCode pcode, LLViewerRegion *regionp,
|
||||
const LLUUID &uuid, const U32 local_id, const LLHost &sender)
|
||||
{
|
||||
// <FS:Ansariel> Don't create derendered objects
|
||||
if (mDerendered.end() != mDerendered.find(uuid))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
|
||||
LLUUID fullid;
|
||||
if (uuid == LLUUID::null)
|
||||
|
|
@ -2186,11 +2192,6 @@ LLViewerObject *LLViewerObjectList::createObject(const LLPCode pcode, LLViewerRe
|
|||
|
||||
updateActive(objectp);
|
||||
|
||||
// <FS:ND> 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 );
|
||||
// </FS:ND>
|
||||
|
||||
return objectp;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue