From 3b734b2222b3ce7ca230b1946f1edf9008ebda5e Mon Sep 17 00:00:00 2001 From: Clement Date: Mon, 9 Sep 2019 16:01:45 -0700 Subject: [PATCH] Always stop challenge timer from the right thread --- assignment-client/src/avatars/AvatarMixer.cpp | 2 ++ assignment-client/src/avatars/MixerAvatar.cpp | 10 +++++++++- assignment-client/src/avatars/MixerAvatar.h | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/assignment-client/src/avatars/AvatarMixer.cpp b/assignment-client/src/avatars/AvatarMixer.cpp index 45511cf6cd..36fd04681a 100644 --- a/assignment-client/src/avatars/AvatarMixer.cpp +++ b/assignment-client/src/avatars/AvatarMixer.cpp @@ -499,6 +499,8 @@ void AvatarMixer::handleAvatarKilled(SharedNodePointer avatarNode) { } else { _sessionDisplayNames.erase(displayNameIter); } + + nodeData->getAvatar().stopChallengeTimer(); } std::unique_ptr killPacket; diff --git a/assignment-client/src/avatars/MixerAvatar.cpp b/assignment-client/src/avatars/MixerAvatar.cpp index 9be93dad40..97d28fa246 100644 --- a/assignment-client/src/avatars/MixerAvatar.cpp +++ b/assignment-client/src/avatars/MixerAvatar.cpp @@ -332,7 +332,7 @@ void MixerAvatar::sendOwnerChallenge() { void MixerAvatar::processChallengeResponse(ReceivedMessage& response) { QByteArray avatarID; QMutexLocker certifyLocker(&_avatarCertifyLock); - QMetaObject::invokeMethod(&_challengeTimer, &QTimer::stop); + stopChallengeTimer(); if (_verifyState == challengeClient) { QByteArray responseData = response.readAll(); if (responseData.length() < 8) { @@ -365,3 +365,11 @@ void MixerAvatar::processChallengeResponse(ReceivedMessage& response) { qCDebug(avatars) << "WARNING: Unexpected avatar challenge-response in state" << stateToName(_verifyState); } } + +void MixerAvatar::stopChallengeTimer() { + if (QThread::currentThread() == thread()) { + _challengeTimer.stop(); + } else { + QMetaObject::invokeMethod(&_challengeTimer, &QTimer::stop); + } +} diff --git a/assignment-client/src/avatars/MixerAvatar.h b/assignment-client/src/avatars/MixerAvatar.h index 2ef4d16dc4..39095def50 100644 --- a/assignment-client/src/avatars/MixerAvatar.h +++ b/assignment-client/src/avatars/MixerAvatar.h @@ -34,6 +34,8 @@ public: void processCertifyEvents(); void processChallengeResponse(ReceivedMessage& response); + void stopChallengeTimer(); + // Avatar certification/verification: enum VerifyState { nonCertified, requestingFST, receivedFST, staticValidation, requestingOwner, ownerResponse,