diff --git a/libs/ardour/vst3_plugin.cc b/libs/ardour/vst3_plugin.cc index f0cbcd1108..219eef02b0 100644 --- a/libs/ardour/vst3_plugin.cc +++ b/libs/ardour/vst3_plugin.cc @@ -1099,7 +1099,6 @@ VST3PI::VST3PI (boost::shared_ptr m, int index, std::s VST3PI::~VST3PI () { - _processor = 0; terminate (); } @@ -1128,6 +1127,10 @@ VST3PI::unit_data () void VST3PI::terminate () { + deactivate (); + + _processor = 0; + disconnect_components (); bool controller_is_component = false; @@ -1136,9 +1139,18 @@ VST3PI::terminate () _component->terminate (); } + if (_controller) { + _controller->setComponentHandler (0); + } + if (_controller && controller_is_component == false) { _controller->terminate (); } + + if (_factory) { + _factory->release (); + } + _component = 0; _controller = 0; } diff --git a/libs/ardour/vst3_scan.cc b/libs/ardour/vst3_scan.cc index ca9fb6a9b7..3a4f0ca010 100644 --- a/libs/ardour/vst3_scan.cc +++ b/libs/ardour/vst3_scan.cc @@ -159,7 +159,6 @@ ARDOUR::discover_vst3 (boost::shared_ptr m, std::vector processor; if (!(processor = FUnknownPtr (component))) { cerr << "VST3: No valid processor"; - //controller->terminate(); component->terminate (); continue; } @@ -177,11 +176,16 @@ ARDOUR::discover_vst3 (boost::shared_ptr m, std::vectorsetProcessing (false); + component->setActive (false); + //controller->terminate(); component->terminate (); rv.push_back (nfo); } } + + factory->release (); return true; }