From 473447179fba81a0be10005cb162a803d5a65f76 Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Tue, 1 Feb 2022 17:17:10 +0100 Subject: [PATCH] Handle idempotent latency changes --- src/wrapper/vst3.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/wrapper/vst3.rs b/src/wrapper/vst3.rs index 8ef8e4df..1675b645 100644 --- a/src/wrapper/vst3.rs +++ b/src/wrapper/vst3.rs @@ -294,11 +294,14 @@ impl MainThreadExecutor for WrapperInner<'_, P> { impl ProcessContext for WrapperInner<'_, P> { fn set_latency_samples(&self, samples: u32) { - self.current_latency.store(samples, Ordering::SeqCst); - let task_posted = unsafe { self.event_loop.read().assume_init_ref() }.do_maybe_async( - Task::TriggerRestart(vst3_sys::vst::RestartFlags::kLatencyChanged as i32), - ); - nih_debug_assert!(task_posted, "The task queue is full, dropping task..."); + // Only trigger a restart if it's actually needed + let old_latency = self.current_latency.swap(samples, Ordering::SeqCst); + if old_latency != samples { + let task_posted = unsafe { self.event_loop.read().assume_init_ref() }.do_maybe_async( + Task::TriggerRestart(vst3_sys::vst::RestartFlags::kLatencyChanged as i32), + ); + nih_debug_assert!(task_posted, "The task queue is full, dropping task..."); + } } }