Merge pull request #14942 from SamGondelman/hashLock

Case 21277: Fix avatar deadlock
This commit is contained in:
Sam Gateau 2019-02-19 09:12:02 -08:00 committed by GitHub
commit b46c79b113
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -208,16 +208,16 @@ AvatarSharedPointer AvatarHashMap::addAvatar(const QUuid& sessionUUID, const QWe
avatar->setSessionUUID(sessionUUID);
avatar->setOwningAvatarMixer(mixerWeakPointer);
// addAvatar is only called from newOrExistingAvatar, which already locks _hashLock
_avatarHash.insert(sessionUUID, avatar);
{
QWriteLocker locker(&_hashLock);
_avatarHash.insert(sessionUUID, avatar);
}
emit avatarAddedEvent(sessionUUID);
return avatar;
}
AvatarSharedPointer AvatarHashMap::newOrExistingAvatar(const QUuid& sessionUUID, const QWeakPointer<Node>& mixerWeakPointer,
bool& isNew) {
QWriteLocker locker(&_hashLock);
auto avatar = _avatarHash.value(sessionUUID);
AvatarSharedPointer AvatarHashMap::newOrExistingAvatar(const QUuid& sessionUUID, const QWeakPointer<Node>& mixerWeakPointer, bool& isNew) {
auto avatar = findAvatar(sessionUUID);
if (!avatar) {
avatar = addAvatar(sessionUUID, mixerWeakPointer);
isNew = true;