From eabb19226bedab4a52f7f0a66dbb1495d0337f6c Mon Sep 17 00:00:00 2001 From: Mooneer Salem Date: Tue, 10 Jun 2025 21:06:24 -0700 Subject: [PATCH] Fix GTK+ assertion after FreeDV Reporter has been open for a long time. --- src/gui/dialogs/freedv_reporter.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/gui/dialogs/freedv_reporter.cpp b/src/gui/dialogs/freedv_reporter.cpp index 39938348..1fce3b2b 100644 --- a/src/gui/dialogs/freedv_reporter.cpp +++ b/src/gui/dialogs/freedv_reporter.cpp @@ -1340,9 +1340,24 @@ double FreeDVReporterDialog::FreeDVReporterDataModel::RadiansToDegrees_(double r void FreeDVReporterDialog::FreeDVReporterDataModel::execQueuedAction_() { // This ensures that we handle server events in the order they're received. - std::unique_lock lk(fnQueueMtx_); - fnQueue_[0](); - fnQueue_.erase(fnQueue_.begin()); + std::unique_lock lk(fnQueueMtx_, std::defer_lock_t()); + lk.lock(); + auto size = fnQueue_.size(); + lk.unlock(); + + while(size > 0) + { + lk.lock(); + auto fn = fnQueue_[0]; + lk.unlock(); + + fn(); + + lk.lock(); + fnQueue_.erase(fnQueue_.begin()); + size = fnQueue_.size(); + lk.unlock(); + } } FreeDVReporterDialog::FilterFrequency FreeDVReporterDialog::getFilterForFrequency_(uint64_t freq)