diff options
Diffstat (limited to '')
-rw-r--r-- | ChangeLog.txt | 6 | ||||
-rw-r--r-- | linden/indra/newview/llfloateractivespeakers.cpp | 4 | ||||
-rw-r--r-- | linden/indra/newview/llviewerobjectlist.cpp | 4 |
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 @@ | |||
1 | 2008-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 | ||