From 91b7acec1f150023b088f2cbfa69eb1750114651 Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Wed, 7 Mar 2018 11:06:53 -0800 Subject: [PATCH] Fix crash when closing the Audio menu. On some machines, checkPeakValues takes long enough that timer callbacks overlap and activeClients gets clobbered while in use. --- libraries/audio-client/src/AudioPeakValues.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libraries/audio-client/src/AudioPeakValues.cpp b/libraries/audio-client/src/AudioPeakValues.cpp index 3df469b830..0b8921a117 100644 --- a/libraries/audio-client/src/AudioPeakValues.cpp +++ b/libraries/audio-client/src/AudioPeakValues.cpp @@ -43,14 +43,19 @@ void AudioClient::checkPeakValues() { // prepare the windows environment CoInitialize(NULL); + std::unique_lock lock(_deviceMutex, std::defer_lock); + // if disabled, clean up active clients if (!_enablePeakValues) { - activeClients.clear(); + if (lock.try_lock()) { + // deferred, if timer callbacks overlap + activeClients.clear(); + } return; } // lock the devices so the _inputDevices list is static - std::unique_lock lock(_deviceMutex); + lock.lock(); HRESULT result; // initialize the payload