From 0de812b7b52df114c66fafd5e919962044550490 Mon Sep 17 00:00:00 2001 From: amer cerkic Date: Tue, 26 Nov 2019 11:41:41 -0800 Subject: [PATCH] waiting on local injector prep --- libraries/audio-client/src/AudioClient.cpp | 7 ++++++- libraries/audio-client/src/AudioClient.h | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 5502986cff..4080019822 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -2064,6 +2064,11 @@ bool AudioClient::switchOutputToAudioDevice(const HifiAudioDeviceInfo outputDevi Lock localAudioLock(_localAudioMutex); _localSamplesAvailable.exchange(0, std::memory_order_release); + //wait on local injectors prep to finish running + if (_localPrepInjectorFuture.isStarted() || _localPrepInjectorFuture.isRunning()) { + _localPrepInjectorFuture.waitForFinished(); + } + // cleanup any previously initialized device if (_audioOutput) { _audioOutputIODevice.close(); @@ -2344,7 +2349,7 @@ qint64 AudioClient::AudioOutputIODevice::readData(char * data, qint64 maxSize) { } // prepare injectors for the next callback - QtConcurrent::run(QThreadPool::globalInstance(), [this] { + _audio->_localPrepInjectorFuture = QtConcurrent::run(QThreadPool::globalInstance(), [this] { _audio->prepareLocalAudioInjectors(); }); diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index e31b4789ce..09abb2c356 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -506,7 +507,8 @@ private: #endif AudioSolo _solo; - + + QFuture _localPrepInjectorFuture; QReadWriteLock _hmdNameLock; Mutex _checkDevicesMutex; QTimer* _checkDevicesTimer { nullptr };