keep port-matrix in sync when deleting ports. and fix segfault on session close with io-matrix visible

This commit is contained in:
Robin Gareus 2013-08-02 17:40:58 +02:00
parent 5143a42b31
commit 23f738c699

View file

@ -152,6 +152,7 @@ PortMatrix::init ()
/* and also bundles */ /* and also bundles */
_session->BundleAdded.connect (_session_connections, invalidator (*this), boost::bind (&PortMatrix::setup_global_ports, this), gui_context()); _session->BundleAdded.connect (_session_connections, invalidator (*this), boost::bind (&PortMatrix::setup_global_ports, this), gui_context());
_session->BundleRemoved.connect (_session_connections, invalidator (*this), boost::bind (&PortMatrix::setup_global_ports, this), gui_context());
/* and also ports */ /* and also ports */
_session->engine().PortRegisteredOrUnregistered.connect (_session_connections, invalidator (*this), boost::bind (&PortMatrix::setup_global_ports, this), gui_context()); _session->engine().PortRegisteredOrUnregistered.connect (_session_connections, invalidator (*this), boost::bind (&PortMatrix::setup_global_ports, this), gui_context());
@ -180,6 +181,7 @@ PortMatrix::reconnect_to_routes ()
boost::shared_ptr<RouteList> routes = _session->get_routes (); boost::shared_ptr<RouteList> routes = _session->get_routes ();
for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) { for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
(*i)->processors_changed.connect (_route_connections, invalidator (*this), boost::bind (&PortMatrix::route_processors_changed, this, _1), gui_context()); (*i)->processors_changed.connect (_route_connections, invalidator (*this), boost::bind (&PortMatrix::route_processors_changed, this, _1), gui_context());
(*i)->DropReferences.connect (_route_connections, invalidator (*this), boost::bind (&PortMatrix::routes_changed, this), gui_context());
} }
} }
@ -198,6 +200,7 @@ PortMatrix::route_processors_changed (RouteProcessorChange c)
void void
PortMatrix::routes_changed () PortMatrix::routes_changed ()
{ {
if (!_session) return;
reconnect_to_routes (); reconnect_to_routes ();
setup_global_ports (); setup_global_ports ();
} }
@ -206,7 +209,10 @@ PortMatrix::routes_changed ()
void void
PortMatrix::setup () PortMatrix::setup ()
{ {
if (!_session) return; // session went away if (!_session) {
_route_connections.drop_connections ();
return; // session went away
}
/* this needs to be done first, as the visible_ports() method uses the /* this needs to be done first, as the visible_ports() method uses the
notebook state to decide which ports are being shown */ notebook state to decide which ports are being shown */