1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

VST2: Avoided a race condition

This commit is contained in:
Tom Poole 2019-10-07 15:02:51 +01:00
parent b857f965ce
commit 1003579c5a

View file

@ -383,8 +383,6 @@ public:
vstEffect.flags |= Vst2::effFlagsNoSoundInStop;
#endif
vstEffectAtomicFlags = vstEffect.flags;
activePlugins.add (this);
}
@ -642,7 +640,7 @@ public:
host that we want midi. In the SDK this method is marked as deprecated, but
some hosts rely on this behaviour.
*/
if (vstEffectAtomicFlags & Vst2::effFlagsIsSynth || JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect)
if (vstEffect.flags & Vst2::effFlagsIsSynth || JucePlugin_WantsMidiInput || JucePlugin_IsMidiEffect)
{
if (hostCallback != nullptr)
hostCallback (&vstEffect, Vst2::audioMasterWantMidi, 0, 1, nullptr, 0);
@ -1128,6 +1126,19 @@ public:
editorComp->checkVisibility();
}
void setHasEditorFlag (bool shouldSetHasEditor)
{
auto hasEditor = (vstEffect.flags & Vst2::effFlagsHasEditor) != 0;
if (shouldSetHasEditor == hasEditor)
return;
if (shouldSetHasEditor)
vstEffect.flags |= Vst2::effFlagsHasEditor;
else
vstEffect.flags &= ~Vst2::effFlagsHasEditor;
}
void createEditorComp()
{
if (hasShutdown || processor == nullptr)
@ -1137,15 +1148,13 @@ public:
{
if (auto* ed = processor->createEditorIfNeeded())
{
vstEffectAtomicFlags |= Vst2::effFlagsHasEditor;
setHasEditorFlag (true);
editorComp.reset (new EditorCompWrapper (*this, *ed));
}
else
{
vstEffectAtomicFlags&= ~Vst2::effFlagsHasEditor;
setHasEditorFlag (false);
}
vstEffect.flags = vstEffectAtomicFlags;
}
shouldDeleteEditor = false;
@ -1710,12 +1719,7 @@ private:
pointer_sized_int handleOpen (VstOpCodeArguments)
{
// Note: most hosts call this on the UI thread, but wavelab doesn't, so be careful in here.
if (processor->hasEditor())
vstEffectAtomicFlags |= Vst2::effFlagsHasEditor;
else
vstEffectAtomicFlags &= ~Vst2::effFlagsHasEditor;
vstEffect.flags = vstEffectAtomicFlags;
setHasEditorFlag (processor->hasEditor());
return 0;
}
@ -2288,7 +2292,6 @@ private:
double sampleRate = 44100.0;
int32 blockSize = 1024;
Vst2::AEffect vstEffect;
std::atomic<Vst2::VstInt32> vstEffectAtomicFlags;
CriticalSection stateInformationLock;
juce::MemoryBlock chunkMemory;
uint32 chunkMemoryTime = 0;