From 81489ea6c419fdfb9af8f9968f4e557c3bce4a43 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 11 Jul 2017 18:44:37 -0700 Subject: [PATCH] use QEnableSharedFromThis --- libraries/audio/src/AudioInjector.cpp | 20 ++------------------ libraries/audio/src/AudioInjector.h | 8 +------- libraries/audio/src/AudioInjectorManager.cpp | 2 +- 3 files changed, 4 insertions(+), 26 deletions(-) diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index 1362d4850e..b6c159ec90 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -150,7 +150,7 @@ bool AudioInjector::inject(bool(AudioInjectorManager::*injection)(AudioInjectorP bool success = true; if (!_options.localOnly) { auto injectorManager = DependencyManager::get(); - if (!(*injectorManager.*injection)(getThisPointer())) { + if (!(*injectorManager.*injection)(sharedFromThis())) { success = false; finishNetworkInjection(); } @@ -173,7 +173,7 @@ bool AudioInjector::injectLocally() { // call this function on the AudioClient's thread // this will move the local buffer's thread to the LocalInjectorThread - success = _localAudioInterface->outputLocalInjector(getThisPointer()); + success = _localAudioInterface->outputLocalInjector(sharedFromThis()); if (!success) { qCDebug(audio) << "AudioInjector::injectLocally could not output locally via _localAudioInterface"; @@ -475,25 +475,9 @@ AudioInjectorPointer AudioInjector::playSoundAndDelete(const QByteArray& buffer, AudioInjectorPointer AudioInjector::playSound(const QByteArray& buffer, const AudioInjectorOptions options) { AudioInjectorPointer injector = AudioInjectorPointer(new AudioInjector(buffer, options)); - injector->setThisPointer(injector); if (!injector->inject(&AudioInjectorManager::threadInjector)) { qWarning() << "AudioInjector::playSound failed to thread injector"; } return injector; } - -AudioInjectorPointer AudioInjector::getThisPointer() { - std::lock_guard lock(_refLock); - QSharedPointer this_ref(_self); - if (this_ref.isNull()) { - this_ref = QSharedPointer(this); - _self = this_ref.toWeakRef(); - } - return this_ref; -} - -void AudioInjector::setThisPointer(AudioInjectorPointer self) { - std::lock_guard lock(_refLock); - _self = self.toWeakRef(); -} diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index c53a65ecd9..89320ecc7a 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -49,7 +49,7 @@ AudioInjectorState& operator|= (AudioInjectorState& lhs, AudioInjectorState rhs) // In order to make scripting cleaner for the AudioInjector, the script now holds on to the AudioInjector object // until it dies. -class AudioInjector : public QObject { +class AudioInjector : public QObject, public QEnableSharedFromThis { Q_OBJECT public: AudioInjector(const Sound& sound, const AudioInjectorOptions& injectorOptions); @@ -79,9 +79,6 @@ public: static AudioInjectorPointer playSound(SharedSoundPointer sound, const float volume, const float stretchFactor, const glm::vec3 position); - AudioInjectorPointer getThisPointer(); - void setThisPointer(AudioInjectorPointer self); - public slots: void restart(); @@ -127,9 +124,6 @@ private: AudioHRTF _localHRTF; AudioFOA _localFOA; friend class AudioInjectorManager; - - QWeakPointer _self; - mutable std::mutex _refLock; }; Q_DECLARE_METATYPE(AudioInjectorPointer) diff --git a/libraries/audio/src/AudioInjectorManager.cpp b/libraries/audio/src/AudioInjectorManager.cpp index f9f45987d4..e1465252b5 100644 --- a/libraries/audio/src/AudioInjectorManager.cpp +++ b/libraries/audio/src/AudioInjectorManager.cpp @@ -181,7 +181,7 @@ bool AudioInjectorManager::restartFinishedInjector(AudioInjectorPointer injector return false; } else { // add the injector to the queue with a send timestamp of now - _injectors.emplace(usecTimestampNow(), injector->getThisPointer()); + _injectors.emplace(usecTimestampNow(), injector); // notify our wait condition so we can inject two frames for this injector immediately _injectorReady.notify_one();