const ChanCount& n_ports () const { return _ports.count(); }
- /** Emitted with the process lock held */
- PBD::Signal2<void,IOChange,void*> changed;
+ /* The process lock will be held on emission of this signal if
+ * IOChange contains ConfigurationChanged. In other cases,
+ * the process lock status is undefined.
+ */
+ PBD::Signal2<void, IOChange, void *> changed;
virtual XMLNode& state (bool full);
XMLNode& get_state (void);
return 0;
}
-/** Caller must hold process lock */
int
IO::connect (Port* our_port, string other_port, void* src)
{
_roll_delay = _initial_delay;
}
-/** Called with the process lock held */
+/** Called with the process lock held if change contains ConfigurationChanged */
void
Route::input_change_handler (IOChange change, void * /*src*/)
{
}
}
-/** Called with the process lock held */
+/** Called with the process lock held if change contains ConfigurationChanged */
void
Route::output_change_handler (IOChange change, void * /*src*/)
{
picks up the configuration of the route. During session
loading this normally happens in a different way.
*/
+
+ Glib::Mutex::Lock lm (AudioEngine::instance()->process_lock ());
+
IOChange change (IOChange::Type (IOChange::ConfigurationChanged | IOChange::ConnectionsChanged));
change.after = route->input()->n_ports();
route->input()->changed (change, this);