From 81d72db76b14550615e697b2b506cef7c36addd8 Mon Sep 17 00:00:00 2001 From: nerix Date: Fri, 4 Oct 2024 22:12:01 +0200 Subject: [PATCH] fix(streamer-mode): access timer from correct thread (#5624) --- CHANGELOG.md | 2 +- src/singletons/StreamerMode.cpp | 17 ++++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba3c188b9..47cc16cf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -88,7 +88,7 @@ - Dev: Fixed benchmarks segfaulting on run. (#5559) - Dev: Refactored `MessageBuilder` to be a single class. (#5548) - Dev: Recent changes are now shown in the nightly release description. (#5553, #5554, #5593) -- Dev: The timer for `StreamerMode` is now destroyed on the correct thread. (#5571) +- Dev: The timer for `StreamerMode` is now destroyed on the correct thread. (#5571, #5624) - Dev: Cleanup some parts of the `magic_enum` adaptation for Qt. (#5587) - Dev: Refactored `static`s in headers to only be present once in the final app. (#5588) - Dev: Run benchmarks in CI. (#5610) diff --git a/src/singletons/StreamerMode.cpp b/src/singletons/StreamerMode.cpp index 67ca2d348..ca63316a1 100644 --- a/src/singletons/StreamerMode.cpp +++ b/src/singletons/StreamerMode.cpp @@ -281,24 +281,27 @@ void StreamerModePrivate::settingChanged(StreamerModeSetting value) } this->currentSetting_ = value; + // in all cases: timer_ must be invoked from the correct thread switch (this->currentSetting_) { case StreamerModeSetting::Disabled: { this->setEnabled(false); - this->timer_->stop(); + QMetaObject::invokeMethod(this->timer_, &QTimer::stop); } break; case StreamerModeSetting::Enabled: { this->setEnabled(true); - this->timer_->stop(); + QMetaObject::invokeMethod(this->timer_, &QTimer::stop); } break; case StreamerModeSetting::DetectStreamingSoftware: { - if (!this->timer_->isActive()) - { - this->timer_->start(20s); - this->check(); - } + QMetaObject::invokeMethod(this->timer_, [this] { + if (!this->timer_->isActive()) + { + this->timer_->start(20s); + this->check(); + } + }); } break; default: