Merge pull request #14068 from hyperlogic/bug-fix/bad-avatar-pointer-static-cast

Fix for bad static_pointer_cast on exit.
This commit is contained in:
John Conklin II 2018-10-02 11:31:47 -07:00 committed by GitHub
commit 898ba20f1c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -505,14 +505,16 @@ void AvatarManager::clearOtherAvatars() {
void AvatarManager::deleteAllAvatars() { void AvatarManager::deleteAllAvatars() {
assert(_avatarsToChangeInPhysics.empty()); assert(_avatarsToChangeInPhysics.empty());
QReadLocker locker(&_hashLock);
QWriteLocker locker(&_hashLock); AvatarHash::iterator avatarIterator = _avatarHash.begin();
AvatarHash::iterator avatarIterator = _avatarHash.begin();
while (avatarIterator != _avatarHash.end()) { while (avatarIterator != _avatarHash.end()) {
auto avatar = std::static_pointer_cast<OtherAvatar>(avatarIterator.value()); auto avatar = std::static_pointer_cast<Avatar>(avatarIterator.value());
avatarIterator = _avatarHash.erase(avatarIterator); avatarIterator = _avatarHash.erase(avatarIterator);
avatar->die(); avatar->die();
assert(!avatar->_motionState); if (avatar != _myAvatar) {
auto otherAvatar = std::static_pointer_cast<OtherAvatar>(avatar);
assert(!otherAvatar->_motionState);
}
} }
} }