diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc index 7c9e901ebb..7e06a9f266 100644 --- a/libs/ardour/lv2_plugin.cc +++ b/libs/ardour/lv2_plugin.cc @@ -1664,7 +1664,13 @@ LV2Plugin::work_response(uint32_t size, const void* data) void LV2Plugin::set_insert_id(PBD::ID id) { - _insert_id = id; + if (_insert_id == "0") { + _insert_id = id; + } else if (_insert_id != id) { + lilv_state_free(_impl->state); + _impl->state = NULL; + _insert_id = id; + } } int diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 34745b7cab..551602324a 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -952,6 +952,7 @@ PluginInsert::state (bool full) node.add_child_nocopy (* _configured_in.state (X_("ConfiguredInput"))); node.add_child_nocopy (* _configured_out.state (X_("ConfiguredOutput"))); + _plugins[0]->set_insert_id(this->id()); node.add_child_nocopy (_plugins[0]->get_state()); for (Controls::iterator c = controls().begin(); c != controls().end(); ++c) { @@ -1123,6 +1124,7 @@ PluginInsert::set_state(const XMLNode& node, int version) if ((*niter)->name() == plugin->state_node_name()) { for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) { + (*i)->set_insert_id (this->id()); (*i)->set_state (**niter, version); }