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:
parent
b857f965ce
commit
1003579c5a
1 changed files with 17 additions and 14 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue