diff options
author | Xiaohong Bao <bao@lindenlab.com> | 2011-03-07 18:10:28 -0700 |
---|---|---|
committer | Xiaohong Bao <bao@lindenlab.com> | 2011-03-07 18:10:28 -0700 |
commit | e841d62f81f70cf100083f484a130ee40666656a (patch) | |
tree | cb22f867bafce5c8de5a6be5d77ad5e8525ccecb | |
parent | ec6092c3210e19e92f9309abcf25de95dbd4346a (diff) |
fix for STORM-1046:[crashhunters] crash in LWorld::removeRegion
STORM-1014: Viewer crash in LLSurface::getWaterHeight
STORM-1047:[crashhunters] crash at LLViewerObjectList::renderObjectsForMap
-rw-r--r-- | indra/newview/llviewerobjectlist.cpp | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index 81479e8b49..7bd8875989 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -1180,6 +1180,45 @@ void LLViewerObjectList::clearAllMapObjectsInRegion(LLViewerRegion* regionp) } } +//make sure the region is cleaned up. +void LLViewerObjectList::clearAllMapObjectsInRegion(LLViewerRegion* regionp) +{ + std::set<LLViewerObject*> dead_object_list ; + std::set<LLViewerObject*> region_object_list ; + for (vobj_list_t::iterator iter = mMapObjects.begin(); iter != mMapObjects.end(); ++iter) + { + LLViewerObject* objectp = *iter; + + if(objectp->isDead()) + { + dead_object_list.insert(objectp) ; + } + else if(objectp->getRegion() == regionp) + { + region_object_list.insert(objectp) ; + } + } + + if(dead_object_list.size() > 0) + { + llwarns << "There are " << dead_object_list.size() << " dead objects on the map!" << llendl ; + + for(std::set<LLViewerObject*>::iterator iter = dead_object_list.begin(); iter != dead_object_list.end(); ++iter) + { + cleanupReferences(*iter) ; + } + } + if(region_object_list.size() > 0) + { + llwarns << "There are " << region_object_list.size() << " objects not removed from the deleted region!" << llendl ; + + for(std::set<LLViewerObject*>::iterator iter = region_object_list.begin(); iter != region_object_list.end(); ++iter) + { + (*iter)->markDead() ; + } + } +} + void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap) { LLColor4 above_water_color = LLUIColorTable::instance().getColor( "NetMapOtherOwnAboveWater" ); @@ -1199,7 +1238,6 @@ void LLViewerObjectList::renderObjectsForMap(LLNetMap &netmap) { LLViewerObject* objectp = *iter; - //llassert_always(!objectp->isDead()); if(objectp->isDead())//some dead objects somehow not cleaned. { continue ; |