From 35b9b9a3172a2e7a1c1d7498514dfcd50788c900 Mon Sep 17 00:00:00 2001 From: jules Date: Mon, 1 Oct 2012 23:40:56 +0100 Subject: [PATCH] Fix for AU string leak. --- .../AU/juce_AU_Wrapper.mm | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm index 7b1b2e9241..2d7ad81ceb 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm @@ -163,6 +163,7 @@ public: { deleteActiveEditors(); juceFilter = nullptr; + clearPresetsArray(); jassert (activePlugins.contains (this)); activePlugins.removeFirstMatchingValue (this); @@ -870,7 +871,9 @@ protected: if (outData != nullptr) { const int numPrograms = juceFilter->getNumPrograms(); - presetsArray.calloc (numPrograms); + + clearPresetsArray(); + presetsArray.insertMultiple (0, AUPreset(), numPrograms); CFMutableArrayRef presetsArrayRef = CFArrayCreateMutable (0, numPrograms, 0); @@ -880,12 +883,11 @@ protected: if (name.isEmpty()) name = "Untitled"; - AUPreset& p = presetsArray[i]; + AUPreset& p = presetsArray.getReference(i); p.presetNumber = i; p.presetName = name.toCFString(); CFArrayAppendValue (presetsArrayRef, &p); - CFRelease (p.presetName); } *outData = (CFArrayRef) presetsArrayRef; @@ -934,9 +936,17 @@ private: SMPTETime lastSMPTETime; AUChannelInfo channelInfo [numChannelConfigs]; AudioUnitEvent auEvent; - mutable HeapBlock presetsArray; + mutable Array presetsArray; CriticalSection incomingMidiLock; + void clearPresetsArray() const + { + for (int i = presetsArray.size(); --i >= 0;) + CFRelease (presetsArray.getReference(i).presetName); + + presetsArray.clear(); + } + JUCE_DECLARE_NON_COPYABLE (JuceAU); };