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 object
master
Ansariel 2016-08-26 17:22:42 +02:00
parent a5b89c588f
commit 81ae9eceb5
3 changed files with 37 additions and 16 deletions

View File

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

View File

@ -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())) )
{

View File

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