From 048fa2801382ef36783bc9bf971a02f1d5695503 Mon Sep 17 00:00:00 2001 From: McCabe Maxsted Date: Fri, 15 Apr 2011 18:05:22 -0700 Subject: test commit - slviewer-0-v12500-DeadObjectsFixes_v2.patch --- linden/indra/newview/llviewerobjectlist.cpp | 30 +++++++++++++++++------------ linden/indra/newview/llviewerobjectlist.h | 5 ++--- linden/indra/newview/llvocache.cpp | 5 ++++- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/linden/indra/newview/llviewerobjectlist.cpp b/linden/indra/newview/llviewerobjectlist.cpp index 78ce247..2d6c9f4 100644 --- a/linden/indra/newview/llviewerobjectlist.cpp +++ b/linden/indra/newview/llviewerobjectlist.cpp @@ -166,12 +166,12 @@ U64 LLViewerObjectList::getIndex(const U32 local_id, return (((U64)index) << 32) | (U64)local_id; } -BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject &object) +BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject* objectp) { - if(object.getRegion()) + if (objectp && objectp->getRegion()) { - U32 local_id = object.mLocalID; - LLHost region_host = object.getRegion()->getHost(); + U32 local_id = objectp->mLocalID; + LLHost region_host = objectp->getRegion()->getHost(); U32 ip = region_host.getAddress(); U32 port = region_host.getPort(); U64 ipport = (((U64)ip) << 32) | (U64)port; @@ -186,7 +186,7 @@ BOOL LLViewerObjectList::removeFromLocalIDTable(const LLViewerObject &object) } // Found existing entry - if (iter->second == object.getID()) + if (iter->second == objectp->getID()) { // Full UUIDs match, so remove the entry sIndexAndLocalIDToUUID.erase(iter); return TRUE; @@ -451,7 +451,7 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys, ((objectp->mLocalID != local_id) || (objectp->getRegion() != regionp))) { - removeFromLocalIDTable(*objectp); + removeFromLocalIDTable(objectp); setUUIDAndLocal(fullid, local_id, gMessageSystem->getSenderIP(), @@ -813,20 +813,26 @@ void LLViewerObjectList::clearDebugText() void LLViewerObjectList::cleanupReferences(LLViewerObject *objectp) { + if (!objectp) + { + llwarns << "NULL object pointer passed." << llendl; + return; + } LLMemType mt(LLMemType::MTYPE_OBJECT); - if (mDeadObjects.count(objectp->mID)) + if (mDeadObjects.find(objectp->mID) != mDeadObjects.end()) { llinfos << "Object " << objectp->mID << " already on dead list, ignoring cleanup!" << llendl; - return; } - - mDeadObjects.insert(std::pair >(objectp->mID, objectp)); + else + { + mDeadObjects.insert(objectp->mID); + } // Cleanup any references we have to this object // Remove from object map so noone can look it up. mUUIDObjectMap.erase(objectp->mID); - removeFromLocalIDTable(*objectp); + removeFromLocalIDTable(objectp); if (objectp->onActiveList()) { @@ -1060,7 +1066,7 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap) for (S32 i = 0; i < mMapObjects.count(); i++) { LLViewerObject* objectp = mMapObjects[i]; - if (!objectp->getRegion() || objectp->isOrphaned() || objectp->isAttachment()) + if (objectp->isDead() || !objectp->getRegion() || objectp->isOrphaned() || objectp->isAttachment()) { continue; } diff --git a/linden/indra/newview/llviewerobjectlist.h b/linden/indra/newview/llviewerobjectlist.h index 07920cb..5999da3 100644 --- a/linden/indra/newview/llviewerobjectlist.h +++ b/linden/indra/newview/llviewerobjectlist.h @@ -182,7 +182,7 @@ public: const U32 ip, const U32 port); // Requires knowledge of message system info! - static BOOL removeFromLocalIDTable(const LLViewerObject &object); + static BOOL removeFromLocalIDTable(const LLViewerObject* objectp); // Used ONLY by the orphaned object code. static U64 getIndex(const U32 local_id, const U32 ip, const U32 port); @@ -200,8 +200,7 @@ protected: LLDynamicArrayPtr > mMapObjects; - typedef std::map > vo_map; - vo_map mDeadObjects; // Need to keep multiple entries per UUID + std::set mDeadObjects; std::map > mUUIDObjectMap; diff --git a/linden/indra/newview/llvocache.cpp b/linden/indra/newview/llvocache.cpp index 3f1c132..20d0399 100644 --- a/linden/indra/newview/llvocache.cpp +++ b/linden/indra/newview/llvocache.cpp @@ -104,7 +104,10 @@ LLVOCacheEntry::LLVOCacheEntry(LLFILE *fp) LLVOCacheEntry::~LLVOCacheEntry() { - delete [] mBuffer; + if (mBuffer) + { + delete [] mBuffer; + } } -- cgit v1.1