diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index 959448881f..61a40fe201 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -384,11 +384,14 @@ public: MultiOut = 0x2, }; - static PBD::Signal3, boost::shared_ptr, PluginSetupOptions > PluginSetup; + /** ask GUI about port-count, fan-out when adding instrument */ + static PBD::Signal3, boost::shared_ptr, PluginSetupOptions > PluginSetup; + + /** used to signal the GUI to fan-out (track-creation) */ + static PBD::Signal1 > FanOut; /** the processors have changed; the parameter indicates what changed */ PBD::Signal1 processors_changed; - PBD::Signal0 fan_out; // used to signal the GUI to fan-out (track-creation) PBD::Signal1 record_enable_changed; /** a processor's latency has changed * (emitted from PluginInsert::latency_changed) diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index af7e0890e7..36620d8adf 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -103,6 +103,8 @@ using namespace PBD; PBD::Signal3, boost::shared_ptr, Route::PluginSetupOptions > Route::PluginSetup; +PBD::Signal1 > Route::FanOut; + /** Base class for all routable/mixable objects (tracks and busses) */ Route::Route (Session& sess, string name, PresentationInfo::Flag flag, DataType default_type) : Stripable (sess, name, PresentationInfo (flag)) @@ -1151,7 +1153,9 @@ Route::add_processors (const ProcessorList& others, boost::shared_ptr if (fanout && fanout->configured () && fanout->output_streams().n_audio() > 2 && boost::dynamic_pointer_cast (the_instrument ()) == fanout) { - fan_out (); /* EMIT SIGNAL */ + /* This adds new tracks or busses, and changes connections. + * This cannot be done here, and needs to be delegated to the GUI thread. */ + FanOut (boost::dynamic_pointer_cast(shared_from_this())); /* EMIT SIGNAL */ } return 0; }