From 0931fcea18c93998092484c6cc78609148c10c2e Mon Sep 17 00:00:00 2001 From: Reuben Thomas Date: Tue, 13 Feb 2018 16:51:41 +0000 Subject: [PATCH] Solved an issue where Ableton Live will deadlock when loading a plugin based on an AudioProcessorGraph. --- .../processors/juce_AudioProcessorGraph.cpp | 7 +++---- .../processors/juce_AudioProcessorGraph.h | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp index 8f0fe3ddd5..7033f6e0e1 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp @@ -851,7 +851,7 @@ void AudioProcessorGraph::topologyChanged() { sendChangeMessage(); - if (isPrepared) + if (isPrepared.get()) triggerAsyncUpdate(); } @@ -1197,6 +1197,7 @@ void AudioProcessorGraph::buildRenderingSequence() void AudioProcessorGraph::handleAsyncUpdate() { buildRenderingSequence(); + isPrepared = true; } //============================================================================== @@ -1209,9 +1210,7 @@ void AudioProcessorGraph::prepareToPlay (double /*sampleRate*/, int estimatedSam renderSequenceDouble->prepareBuffers (estimatedSamplesPerBlock); clearRenderingSequence(); - buildRenderingSequence(); - - isPrepared = true; + triggerAsyncUpdate(); } bool AudioProcessorGraph::supportsDoublePrecisionProcessing() const diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h index 3b23bc5fa1..ea9ad0157e 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h @@ -376,7 +376,7 @@ private: friend class AudioGraphIOProcessor; - bool isPrepared = false; + Atomic isPrepared { false }; void topologyChanged(); void handleAsyncUpdate() override;