Make sure Blacklist still works with object cache even after a TP.

meow-7.2.2
Nicky 2014-10-12 22:20:15 +02:00
parent d640e75511
commit 50d9483aa8
4 changed files with 23 additions and 18 deletions

View File

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

View File

@ -2824,7 +2824,8 @@ void derenderObject(bool permanent)
// <FS:ND> Pass true to make sure this object stays dead.
// gObjectList.killObject(objp);
gObjectList.killObject(objp, true);
gObjectList.addDerenderedItem( objp->getID(), permanent );
gObjectList.killObject(objp);
// </FS:ND>
}
else if( (objp) && (gAgentID != objp->getID()) && ((rlv_handler_t::isEnabled()) || (objp->isAttachment()) || (objp->permYouOwner())) )

View File

@ -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)
{
// <FS:ND> Remember this object it case it comes back.
if( aForDerender )
mDerendered[ objectp->getID()] = LLTimer::getTotalSeconds().value();
// </FS:ND>
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 );
}
// <FS:ND> 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 );
}
// </FS:ND>

View File

@ -72,10 +72,7 @@ public:
LLViewerObject *replaceObject(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp); // TomY: hack to switch VO instances on the fly
// <FS:ND> For blacklist/derender
// BOOL killObject(LLViewerObject *objectp);
BOOL killObject(LLViewerObject *objectp, bool aForDerender = false );
// </FS:ND>
BOOL killObject(LLViewerObject *objectp);
void killObjects(LLViewerRegion *regionp); // Kill all objects owned by a particular region.
void killAllObjects();
@ -241,10 +238,11 @@ protected:
// <FS:ND> 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 & );
// </FS:ND>
};