diff --git a/libs/ardour/ardour/port_manager.h b/libs/ardour/ardour/port_manager.h index e000d8da0a..01d620db30 100644 --- a/libs/ardour/ardour/port_manager.h +++ b/libs/ardour/ardour/port_manager.h @@ -146,7 +146,7 @@ public: int disconnect (std::shared_ptr); int disconnect (std::string const&); int reestablish_ports (); - int reconnect_ports (); + int reconnect_ports (Session* s = nullptr); bool connected (const std::string&); bool physically_connected (const std::string&); diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc index 697476d90f..e5a160327e 100644 --- a/libs/ardour/port_manager.cc +++ b/libs/ardour/port_manager.cc @@ -920,7 +920,7 @@ PortManager::set_pretty_names (std::vector const& port_names, DataT } int -PortManager::reconnect_ports () +PortManager::reconnect_ports (Session* s) { std::shared_ptr p = _ports.reader (); @@ -928,7 +928,10 @@ PortManager::reconnect_ports () DEBUG_TRACE (DEBUG::Ports, string_compose ("reconnect %1 ports\n", p->size ())); - Session* s = AudioEngine::instance ()->session (); + if (!s) { + s = AudioEngine::instance ()->session (); + } + if (s && s->master_out() && !s->master_out ()->output()->has_ext_connection()) { s->auto_connect_master_bus (); } diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 7646a13321..d95d7f8c26 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -1670,7 +1670,7 @@ Session::hookup_io () /* Get everything connected */ - AudioEngine::instance()->reconnect_ports (); + AudioEngine::instance()->reconnect_ports (this); AfterConnect (); /* EMIT SIGNAL */