diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6ebe997057..7fa18fea62 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1491,6 +1491,7 @@ void Application::updateHeartbeat() const { void Application::aboutToQuit() { emit beforeAboutToQuit(); + DependencyManager::get()->beforeAboutToQuit(); foreach(auto inputPlugin, PluginManager::getInstance()->getInputPlugins()) { if (inputPlugin->isActive()) { @@ -1592,6 +1593,8 @@ void Application::cleanupBeforeQuit() { } Application::~Application() { + DependencyManager::destroy(); + _entityClipboard->eraseAllOctreeElements(); _entityClipboard.reset(); diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 5fced85d2d..5208b893ac 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -82,10 +82,10 @@ public: CheckDevicesThread(AudioClient* audioClient) : _audioClient(audioClient) { + } - connect(qApp, &QCoreApplication::aboutToQuit, [this] { - _quit = true; - }); + void beforeAboutToQuit() { + _quit = true; } void run() override { @@ -159,10 +159,10 @@ AudioClient::AudioClient() : _outputDevices = getDeviceNames(QAudio::AudioOutput); // start a thread to detect any device changes - QThread* checkDevicesThread = new CheckDevicesThread(this); - checkDevicesThread->setObjectName("CheckDevices Thread"); - checkDevicesThread->setPriority(QThread::LowPriority); - checkDevicesThread->start(); + _checkDevicesThread = new CheckDevicesThread(this); + _checkDevicesThread->setObjectName("CheckDevices Thread"); + _checkDevicesThread->setPriority(QThread::LowPriority); + _checkDevicesThread->start(); configureReverb(); @@ -177,6 +177,7 @@ AudioClient::AudioClient() : } AudioClient::~AudioClient() { + delete _checkDevicesThread; stop(); if (_codec && _encoder) { _codec->releaseEncoder(_encoder); @@ -184,6 +185,11 @@ AudioClient::~AudioClient() { } } +void AudioClient::beforeAboutToQuit() { + static_cast(_checkDevicesThread)->beforeAboutToQuit(); +} + + void AudioClient::handleMismatchAudioFormat(SharedNodePointer node, const QString& currentCodec, const QString& recievedCodec) { qCDebug(audioclient) << __FUNCTION__ << "sendingNode:" << *node << "currentCodec:" << currentCodec << "recievedCodec:" << recievedCodec; selectAudioFormat(recievedCodec); diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index 72f5cf5fdc..d6f111cafc 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -155,6 +155,8 @@ public slots: void audioMixerKilled(); void toggleMute(); + void beforeAboutToQuit(); + virtual void setIsStereoInput(bool stereo) override; void toggleAudioNoiseReduction() { _isNoiseGateEnabled = !_isNoiseGateEnabled; } @@ -332,6 +334,8 @@ private: CodecPluginPointer _codec; QString _selectedCodecName; Encoder* _encoder { nullptr }; // for outbound mic stream + + QThread* _checkDevicesThread { nullptr }; }; diff --git a/libraries/shared/src/RunningMarker.cpp b/libraries/shared/src/RunningMarker.cpp index 80247150fd..89fb3ada23 100644 --- a/libraries/shared/src/RunningMarker.cpp +++ b/libraries/shared/src/RunningMarker.cpp @@ -47,7 +47,7 @@ void RunningMarker::startRunningMarker() { RunningMarker::~RunningMarker() { deleteRunningMarkerFile(); - _runningMarkerTimer->stop(); + QMetaObject::invokeMethod(_runningMarkerTimer, "stop", Qt::BlockingQueuedConnection); _runningMarkerThread->quit(); _runningMarkerTimer->deleteLater(); _runningMarkerThread->deleteLater();