aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--ChangeLog.txt6
-rw-r--r--linden/indra/newview/llfloateractivespeakers.cpp4
-rw-r--r--linden/indra/newview/llviewerobjectlist.cpp4
3 files changed, 12 insertions, 2 deletions
diff --git a/ChangeLog.txt b/ChangeLog.txt
index e69de29..36a5be0 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -0,0 +1,6 @@
12008-09-17 Nicholaz Beresford <nicholaz@blueflash.cc>
2
3 * linden/indra/newview/llfloateractivespeakers.cpp (updateSpeakerList):
4 VWR-2683: Possible crash accessing dead llviewerregion.
5 * linden/indra/newview/llviewerobjectlist.cpp (killObjects):
6 Ditto.
diff --git a/linden/indra/newview/llfloateractivespeakers.cpp b/linden/indra/newview/llfloateractivespeakers.cpp
index ed2f9f8..9aa21d5 100644
--- a/linden/indra/newview/llfloateractivespeakers.cpp
+++ b/linden/indra/newview/llfloateractivespeakers.cpp
@@ -1342,7 +1342,7 @@ void LLLocalSpeakerMgr::updateSpeakerList()
1342 for(avatar_it = LLCharacter::sInstances.begin(); avatar_it != LLCharacter::sInstances.end(); ++avatar_it) 1342 for(avatar_it = LLCharacter::sInstances.begin(); avatar_it != LLCharacter::sInstances.end(); ++avatar_it)
1343 { 1343 {
1344 LLVOAvatar* avatarp = (LLVOAvatar*)*avatar_it; 1344 LLVOAvatar* avatarp = (LLVOAvatar*)*avatar_it;
1345 if (dist_vec(avatarp->getPositionAgent(), gAgent.getPositionAgent()) <= CHAT_NORMAL_RADIUS) 1345 if (!avatarp->isDead() && dist_vec(avatarp->getPositionAgent(), gAgent.getPositionAgent()) <= CHAT_NORMAL_RADIUS)
1346 { 1346 {
1347 setSpeaker(avatarp->getID()); 1347 setSpeaker(avatarp->getID());
1348 } 1348 }
@@ -1356,7 +1356,7 @@ void LLLocalSpeakerMgr::updateSpeakerList()
1356 if (speakerp->mStatus == LLSpeaker::STATUS_TEXT_ONLY) 1356 if (speakerp->mStatus == LLSpeaker::STATUS_TEXT_ONLY)
1357 { 1357 {
1358 LLVOAvatar* avatarp = (LLVOAvatar*)gObjectList.findObject(speaker_id); 1358 LLVOAvatar* avatarp = (LLVOAvatar*)gObjectList.findObject(speaker_id);
1359 if (!avatarp || dist_vec(avatarp->getPositionAgent(), gAgent.getPositionAgent()) > CHAT_NORMAL_RADIUS) 1359 if (!avatarp || avatarp->isDead() || dist_vec(avatarp->getPositionAgent(), gAgent.getPositionAgent()) > CHAT_NORMAL_RADIUS)
1360 { 1360 {
1361 speakerp->mStatus = LLSpeaker::STATUS_NOT_IN_CHANNEL; 1361 speakerp->mStatus = LLSpeaker::STATUS_NOT_IN_CHANNEL;
1362 speakerp->mDotColor = INACTIVE_COLOR; 1362 speakerp->mDotColor = INACTIVE_COLOR;
diff --git a/linden/indra/newview/llviewerobjectlist.cpp b/linden/indra/newview/llviewerobjectlist.cpp
index bd8ed97..dec7ced 100644
--- a/linden/indra/newview/llviewerobjectlist.cpp
+++ b/linden/indra/newview/llviewerobjectlist.cpp
@@ -859,6 +859,10 @@ void LLViewerObjectList::killObjects(LLViewerRegion *regionp)
859 if (objectp->mRegionp == regionp) 859 if (objectp->mRegionp == regionp)
860 { 860 {
861 killObject(objectp); 861 killObject(objectp);
862
863 // invalidate region pointer. region will become invalid, but
864 // refcounted objects may survive the cleanDeadObjects() call below
865 objectp->mRegionp = NULL;
862 } 866 }
863 } 867 }
864 868