Ableton/VST3/macOS - crash when removing plugin instance

I recently built a plugin as VST3 that I successfully used with Ableton and AU for a while.

While AU is stable, the VST3 crashes Ableton (10.1.3). Sometimes it crashes when adding a plugin instance, but mostly it crashes when removing the instances. Using the same VST3 in Reaper is significantly more stable.

My problem is, the crash doesn’t show up in the debugger. When starting Ableton without the debugger, the crash log points to the juce_VST3_Wrapper.cpp, but there’s no reference to my code.

So, before I search myself crazy, I wonder if there’s any recent, known problems with VST3 and Ableton 10.

Here’s the crash log (excerpt):

Thread 0 Crashed:: ZMQbg/38  Dispatch queue: com.apple.main-thread
0   com.MY.PLUGIN           	0x0000000141de68c8 Steinberg::IPtr<Steinberg::Vst::Parameter>::~IPtr() + 40 (smartpointer.h:143)
1   com.MY.PLUGIN           	0x0000000141da1b65 Steinberg::IPtr<Steinberg::Vst::Parameter>::~IPtr() + 21 (smartpointer.h:146)
2   com.MY.PLUGIN           	0x0000000141db0509 std::__1::allocator<Steinberg::IPtr<Steinberg::Vst::Parameter> >::destroy(Steinberg::IPtr<Steinberg::Vst::Parameter>*) + 25 (memory:1880)
3   com.MY.PLUGIN           	0x0000000141db04dd void std::__1::allocator_traits<std::__1::allocator<Steinberg::IPtr<Steinberg::Vst::Parameter> > >::__destroy<Steinberg::IPtr<Steinberg::Vst::Parameter> >(std::__1::integral_constant<bool, true>, std::__1::allocator<Steinberg::IPtr<Steinberg::Vst::Parameter> >&, Steinberg::IPtr<Steinberg::Vst::Parameter>*) + 29 (memory:1742)
4   com.MY.PLUGIN           	0x0000000141db047d void std::__1::allocator_traits<std::__1::allocator<Steinberg::IPtr<Steinberg::Vst::Parameter> > >::destroy<Steinberg::IPtr<Steinberg::Vst::Parameter> >(std::__1::allocator<Steinberg::IPtr<Steinberg::Vst::Parameter> >&, Steinberg::IPtr<Steinberg::Vst::Parameter>*) + 29 (memory:1595)
5   com.MY.PLUGIN           	0x0000000141db0438 std::__1::__vector_base<Steinberg::IPtr<Steinberg::Vst::Parameter>, std::__1::allocator<Steinberg::IPtr<Steinberg::Vst::Parameter> > >::__destruct_at_end(Steinberg::IPtr<Steinberg::Vst::Parameter>*) + 88 (vector:421)
6   com.MY.PLUGIN           	0x0000000141db0318 std::__1::__vector_base<Steinberg::IPtr<Steinberg::Vst::Parameter>, std::__1::allocator<Steinberg::IPtr<Steinberg::Vst::Parameter> > >::clear() + 24 (vector:364)
7   com.MY.PLUGIN           	0x0000000141db02a6 std::__1::vector<Steinberg::IPtr<Steinberg::Vst::Parameter>, std::__1::allocator<Steinberg::IPtr<Steinberg::Vst::Parameter> > >::clear() + 38 (vector:767)
8   com.MY.PLUGIN           	0x0000000141d99e3a Steinberg::Vst::ParameterContainer::removeAll() + 42 (vstparameters.h:222)
9   com.MY.PLUGIN           	0x0000000141d99d93 Steinberg::Vst::EditController::terminate() + 35 (vsteditcontroller.cpp:66)
10  com.MY.PLUGIN           	0x0000000141dd122d juce::JuceVST3EditController::terminate() + 109 (juce_VST3_Wrapper.cpp:324)
11  com.ableton.live            0x00000001025645f1 0x100000000 + 39208433

Best,
n

I’m no expert, but I might take a look at your destructor and whether you are properly nulling or freeing various pointers and objects you have created.

Hmm I wonder if it could be related to the use of the deprecated createAndAddParameter() ?

EDIT: Nope, switching the unique_ptr doesn’t change anything …