diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp index 49b1640f57..218b4ac98a 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp @@ -1326,9 +1326,19 @@ private: At the top of the audio callback, RenderSequenceExchange::updateAudioThreadState will attempt to install the most-recently-baked graph, if there's one waiting. */ -class RenderSequenceExchange +class RenderSequenceExchange : private Timer { public: + RenderSequenceExchange() + { + startTimer (500); + } + + ~RenderSequenceExchange() override + { + stopTimer(); + } + void set (std::unique_ptr&& next) { const SpinLock::ScopedLockType lock (mutex); @@ -1353,6 +1363,14 @@ public: RenderSequence* getAudioThreadState() const { return audioThreadState.get(); } private: + void timerCallback() override + { + const SpinLock::ScopedLockType lock (mutex); + + if (! isNew) + mainThreadState.reset(); + } + SpinLock mutex; std::unique_ptr mainThreadState, audioThreadState; bool isNew = false;