From 96431aa0d601cb0a5f391679186e14fac6ae7c2f Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 2 Aug 2025 02:24:45 +0200 Subject: [PATCH] Fix #9961, update saved port-name references when renaming ports Since internal connections are saved by port-name, renaming a port also needs to update references that other ports have. --- libs/ardour/ardour/port.h | 2 ++ libs/ardour/port.cc | 11 +++++++++++ libs/ardour/port_manager.cc | 3 +++ 3 files changed, 16 insertions(+) diff --git a/libs/ardour/ardour/port.h b/libs/ardour/ardour/port.h index a1205a5713..873b1e7c9f 100644 --- a/libs/ardour/ardour/port.h +++ b/libs/ardour/ardour/port.h @@ -135,6 +135,8 @@ public: uint32_t externally_connected () const { return _externally_connected; } uint32_t internally_connected () const { return _internally_connected; } + void rename_connected_port (std::string const&, std::string const&); + void increment_external_connections (); void decrement_external_connections (); diff --git a/libs/ardour/port.cc b/libs/ardour/port.cc index dd55f5cc35..33afac964a 100644 --- a/libs/ardour/port.cc +++ b/libs/ardour/port.cc @@ -224,6 +224,17 @@ Port::erase_connection (std::string const& pn) } } +void +Port::rename_connected_port (std::string const& old_name, std::string const& new_name) +{ + Glib::Threads::RWLock::WriterLock lm (_connections_lock); + if (_int_connections.find (old_name) == _int_connections.end()) { + return; + } + _int_connections.erase (old_name); + _int_connections.insert (new_name); +} + void Port::increment_external_connections () { diff --git a/libs/ardour/port_manager.cc b/libs/ardour/port_manager.cc index 41e9078bd1..7d49f83807 100644 --- a/libs/ardour/port_manager.cc +++ b/libs/ardour/port_manager.cc @@ -551,6 +551,9 @@ PortManager::port_renamed (const std::string& old_relative_name, const std::stri if (x != p->end ()) { std::shared_ptr port = x->second; p->erase (x); + for (auto& [pn, pt] : *p) { + pt->rename_connected_port (old_relative_name, new_relative_name); + } p->insert (make_pair (new_relative_name, port)); } }