diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index f74341d9ad..3144302e43 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -106,8 +106,6 @@ public: activate (); } - virtual void drop_references () {} - virtual std::set automatable () const = 0; virtual std::string describe_parameter (Evoral::Parameter) = 0; virtual std::string state_node_name () const = 0; diff --git a/libs/ardour/luaproc.cc b/libs/ardour/luaproc.cc index 42f57d9f59..7e77af8b88 100644 --- a/libs/ardour/luaproc.cc +++ b/libs/ardour/luaproc.cc @@ -186,6 +186,7 @@ void LuaProc::drop_references () { lua.collect_garbage (); + Plugin::drop_references (); } boost::weak_ptr diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 9bf723a50b..131892df5e 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -114,6 +114,9 @@ PluginInsert::~PluginInsert () void PluginInsert::drop_references () { + if (!_impulseAnalysisPlugin.expired()) { + _impulseAnalysisPlugin.lock()->drop_references (); + } for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) { (*i)->drop_references (); } @@ -173,6 +176,7 @@ PluginInsert::set_count (uint32_t num) } else if (num < _plugins.size()) { uint32_t diff = _plugins.size() - num; for (uint32_t n= 0; n < diff; ++n) { + _plugins.back()->drop_references (); _plugins.pop_back(); } PluginConfigChanged (); /* EMIT SIGNAL */