Merge pull request #3645 from birarda/avatar-by-name

fix for AvatarHashMap crash when erasing avatars
This commit is contained in:
Philip Rosedale 2014-10-22 17:43:44 -07:00
commit 246ff1614f

View file

@ -58,27 +58,21 @@ bool AvatarHashMap::containsAvatarWithDisplayName(const QString& displayName) {
}
AvatarData* AvatarHashMap::avatarWithDisplayName(const QString& displayName) {
AvatarHash::iterator avatarIterator = _avatarHash.begin();
while (avatarIterator != _avatarHash.end()) {
AvatarSharedPointer sharedAvatar = avatarIterator.value();
if (avatarIterator.value()->getDisplayName() == displayName) {
foreach(const AvatarSharedPointer& sharedAvatar, _avatarHash) {
if (sharedAvatar->getDisplayName() == displayName) {
// this is a match
// check if this avatar should still be around
if (!shouldKillAvatar(sharedAvatar)) {
// we have a match, return true
// we have a match, return the AvatarData
return sharedAvatar.data();
} else {
// we should remove this avatar, do that now
erase(avatarIterator);
// we should remove this avatar, but we might not be on a thread that is allowed
// so we just return NULL to the caller
return NULL;
}
break;
} else {
++avatarIterator;
}
}
// return false, no match
return NULL;
}