From 6b5fc49f71b41d6fe7d9580ee90f2d767a470cd4 Mon Sep 17 00:00:00 2001 From: ed Date: Mon, 13 May 2019 15:24:26 +0100 Subject: [PATCH] VST3: Removed some unnecessary ScopedJuceInitialiser_GUI objects and silenced some leak detector warnings when running in hosts that don't release the IPluginFactory correctly --- .../VST3/juce_VST3_Wrapper.cpp | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp index a68f25ef9f..78fd1fd9b0 100644 --- a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp @@ -319,7 +319,6 @@ private: //============================================================================== Atomic refCount; std::unique_ptr audioProcessor; - ScopedJuceInitialiser_GUI libraryInitialiser; //============================================================================== LegacyAudioParametersWrapper juceParameters; @@ -919,7 +918,6 @@ private: //============================================================================== ComSmartPtr audioProcessor; - ScopedJuceInitialiser_GUI libraryInitialiser; struct MidiController { @@ -1513,8 +1511,6 @@ private: WindowsHooks hooks; #endif - ScopedJuceInitialiser_GUI libraryInitialiser; - //============================================================================== JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceVST3Editor) }; @@ -2925,9 +2921,11 @@ struct JucePluginFactory : public IPluginFactory3 return false; } - auto* entry = classes.add (new ClassEntry (info, createFunction)); + auto entry = std::make_unique (info, createFunction); entry->infoW.fromAscii (info); + classes.push_back (std::move (entry)); + return true; } @@ -2975,7 +2973,7 @@ struct JucePluginFactory : public IPluginFactory3 { if (info != nullptr) { - if (auto* entry = classes[(int) index]) + if (auto& entry = classes[(size_t) index]) { memcpy (info, &entry->infoW, sizeof (PClassInfoW)); return kResultOk; @@ -2987,6 +2985,8 @@ struct JucePluginFactory : public IPluginFactory3 tresult PLUGIN_API createInstance (FIDString cid, FIDString sourceIid, void** obj) override { + ScopedJuceInitialiser_GUI libraryInitialiser; + *obj = nullptr; TUID tuid; @@ -3008,7 +3008,7 @@ struct JucePluginFactory : public IPluginFactory3 TUID iidToQuery; sourceFuid.toTUID (iidToQuery); - for (auto* entry : classes) + for (auto& entry : classes) { if (doUIDsMatch (entry->infoW.cid, cid)) { @@ -3044,7 +3044,6 @@ struct JucePluginFactory : public IPluginFactory3 private: //============================================================================== - ScopedJuceInitialiser_GUI libraryInitialiser; Atomic refCount { 1 }; const PFactoryInfo factoryInfo; ComSmartPtr host; @@ -3063,10 +3062,10 @@ private: bool isUnicode = false; private: - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ClassEntry) + JUCE_DECLARE_NON_COPYABLE (ClassEntry) }; - OwnedArray classes; + std::vector> classes; //============================================================================== template @@ -3076,7 +3075,7 @@ private: { zerostruct (*info); - if (auto* entry = classes[(int) index]) + if (auto& entry = classes[(size_t) index]) { if (entry->isUnicode) return kResultFalse; @@ -3091,7 +3090,9 @@ private: } //============================================================================== - JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JucePluginFactory) + // no leak detector here to prevent it firing on shutdown when running in hosts that + // don't release the factory object correctly... + JUCE_DECLARE_NON_COPYABLE (JucePluginFactory) }; } // juce namespace