diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp index ddd96563a5..31258a28dc 100644 --- a/libraries/audio/src/AudioInjector.cpp +++ b/libraries/audio/src/AudioInjector.cpp @@ -55,6 +55,12 @@ void AudioInjector::setIsFinished(bool isFinished) { _isStarted = false; _shouldStop = false; + + if (_shouldDeleteAfterFinish) { + // we've been asked to delete after finishing, trigger a queued deleteLater here + qDebug() << "triggering the delete since we are finished"; + QMetaObject::invokeMethod(this, "deleteLater", Qt::QueuedConnection); + } } } diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h index 2380df7e73..25d0c1699d 100644 --- a/libraries/audio/src/AudioInjector.h +++ b/libraries/audio/src/AudioInjector.h @@ -46,7 +46,9 @@ public: public slots: void injectAudio(); void restart(); + void stop(); + void triggerDeleteAfterFinish() { _shouldDeleteAfterFinish = true; } void stopAndDeleteLater(); void setOptions(AudioInjectorOptions& options) { _options = options; } @@ -69,6 +71,7 @@ private: float _loudness = 0.0f; bool _isStarted = false; bool _isFinished = false; + bool _shouldDeleteAfterFinish = false; int _currentSendPosition = 0; AbstractAudioInterface* _localAudioInterface = NULL; AudioInjectorLocalBuffer* _localBuffer = NULL; diff --git a/libraries/script-engine/src/ScriptAudioInjector.cpp b/libraries/script-engine/src/ScriptAudioInjector.cpp index 422697441b..7b78ed3cc3 100644 --- a/libraries/script-engine/src/ScriptAudioInjector.cpp +++ b/libraries/script-engine/src/ScriptAudioInjector.cpp @@ -29,6 +29,11 @@ ScriptAudioInjector::ScriptAudioInjector(AudioInjector* injector) : } ScriptAudioInjector::~ScriptAudioInjector() { + if (!_injector.isNull()) { + // we've been asked to delete after finishing, trigger a queued deleteLater here + QMetaObject::invokeMethod(_injector.data(), "triggerDeleteAfterFinish", Qt::QueuedConnection); + } + } void ScriptAudioInjector::stopInjectorImmediately() { diff --git a/libraries/script-engine/src/ScriptAudioInjector.h b/libraries/script-engine/src/ScriptAudioInjector.h index 407bcef788..b89a274af1 100644 --- a/libraries/script-engine/src/ScriptAudioInjector.h +++ b/libraries/script-engine/src/ScriptAudioInjector.h @@ -39,7 +39,7 @@ signals: protected slots: void stopInjectorImmediately(); private: - AudioInjector* _injector; + QPointer _injector; friend QScriptValue injectorToScriptValue(QScriptEngine* engine, ScriptAudioInjector* const& in); };