Add plugins (activating them) after doing any latency_compute_run, as otherwise the...
authorCarl Hetherington <carl@carlh.net>
Mon, 4 Apr 2011 17:57:18 +0000 (17:57 +0000)
committerCarl Hetherington <carl@carlh.net>
Mon, 4 Apr 2011 17:57:18 +0000 (17:57 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@9282 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/plugin_insert.cc

index 71205c2c74e79ce9e48fed4e6c72436c3d7dc049..4666421b77ab5317a602ff2e541ca3908a87803a 100644 (file)
@@ -875,6 +875,23 @@ PluginInsert::set_state(const XMLNode& node, int version)
                sscanf (prop->value().c_str(), "%u", &count);
        }
 
+       /* Handle the node list for this Processor (or Insert if an A2 session).
+        * This needs to happen before the add_plugin_with_activation below, as
+        * the plugin set_state calls may themselves call latency_compute_run,
+        * which will leave the plugin deactivated whether it is currently
+        * activated or not.
+        */
+       for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
+
+               if ((*niter)->name() == plugin->state_node_name()) {
+
+                       for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
+                               (*i)->set_state (**niter, version);
+                       }
+                       break;
+               }
+       }
+
        if (_plugins.size() != count) {
 
                add_plugin_with_activation (plugin);
@@ -889,18 +906,6 @@ PluginInsert::set_state(const XMLNode& node, int version)
                set_control_ids (node, version);
        }
 
-       /* Handle the node list for this Processor (or Insert if an A2 session) */
-       for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
-
-               if ((*niter)->name() == plugin->state_node_name()) {
-
-                       for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
-                               (*i)->set_state (**niter, version);
-                       }
-                       break;
-               }
-       }
-
        if (version < 3000) {
 
                /* Only 2.X sessions need a call to set_parameter_state() - in 3.X and above