diff options
-rwxr-xr-x | indra/newview/llspatialpartition.cpp | 14 | ||||
-rw-r--r-- | indra/newview/llvieweroctree.cpp | 6 |
2 files changed, 9 insertions, 11 deletions
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 86d1948baa..7b894d8d98 100755 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -840,9 +840,9 @@ void LLSpatialGroup::handleDestruction(const TreeNode* node) { return; } - setState(DEAD); - - for (element_iter i = getDataBegin(); getElementCount() > 0 && i != getDataEnd();) + setState(DEAD); + + for (element_iter i = getDataBegin(); i != getDataEnd(); ++i) { LLViewerOctreeEntry* entry = *i; @@ -852,14 +852,6 @@ void LLSpatialGroup::handleDestruction(const TreeNode* node) { ((LLDrawable*)entry->getDrawable())->setGroup(NULL); } - else - { - LL_ERRS() << "No Drawable found in the entry." << LL_ENDL; - } - } - else - { - ++i; } } diff --git a/indra/newview/llvieweroctree.cpp b/indra/newview/llvieweroctree.cpp index 201677b3de..ff8f4d2434 100644 --- a/indra/newview/llvieweroctree.cpp +++ b/indra/newview/llvieweroctree.cpp @@ -481,6 +481,12 @@ bool LLViewerOctreeGroup::removeFromGroup(LLViewerOctreeEntry* entry) { llassert(entry != NULL); llassert(!entry->getGroup()); + + if(isDead()) //group is about to be destroyed, not need to double delete the entry. + { + entry->setBinIndex(-1); + return true; + } unbound(); setState(OBJECT_DIRTY); |