Fix GTK+ assertion after FreeDV Reporter has been open for a long time.

ms-gtk-assert-fix
Mooneer Salem 2025-06-10 21:06:24 -07:00
parent 03a4d87970
commit eabb19226b
1 changed files with 18 additions and 3 deletions

View File

@ -1340,9 +1340,24 @@ double FreeDVReporterDialog::FreeDVReporterDataModel::RadiansToDegrees_(double r
void FreeDVReporterDialog::FreeDVReporterDataModel::execQueuedAction_() void FreeDVReporterDialog::FreeDVReporterDataModel::execQueuedAction_()
{ {
// This ensures that we handle server events in the order they're received. // This ensures that we handle server events in the order they're received.
std::unique_lock<std::mutex> lk(fnQueueMtx_); std::unique_lock<std::mutex> lk(fnQueueMtx_, std::defer_lock_t());
fnQueue_[0](); 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()); fnQueue_.erase(fnQueue_.begin());
size = fnQueue_.size();
lk.unlock();
}
} }
FreeDVReporterDialog::FilterFrequency FreeDVReporterDialog::getFilterForFrequency_(uint64_t freq) FreeDVReporterDialog::FilterFrequency FreeDVReporterDialog::getFilterForFrequency_(uint64_t freq)