From e9bafde628ef237e6f429a0511112d81e22a8a86 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 21 Oct 2022 20:40:15 +0200 Subject: [PATCH] Catch manual removal of subgroup bus (#9022) --- libs/ardour/ardour/route_group.h | 1 + libs/ardour/route_group.cc | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/libs/ardour/ardour/route_group.h b/libs/ardour/ardour/route_group.h index a6998ccdec..f1a95ccf9b 100644 --- a/libs/ardour/ardour/route_group.h +++ b/libs/ardour/ardour/route_group.h @@ -189,6 +189,7 @@ private: boost::shared_ptr _monitoring_group; void remove_when_going_away (boost::weak_ptr); + void unset_subgroup_bus (); int set_state_2X (const XMLNode&, int); void post_set (PBD::PropertyChange const &); diff --git a/libs/ardour/route_group.cc b/libs/ardour/route_group.cc index a5aa8500ba..29799f0b8a 100644 --- a/libs/ardour/route_group.cc +++ b/libs/ardour/route_group.cc @@ -208,6 +208,15 @@ RouteGroup::remove_when_going_away (boost::weak_ptr wr) } } +void +RouteGroup::unset_subgroup_bus () +{ + if (_session.deletion_in_progress()) { + return; + } + _subgroup_bus.reset (); +} + int RouteGroup::remove (boost::shared_ptr r) { @@ -316,6 +325,7 @@ RouteGroup::set_state (const XMLNode& node, int version) boost::shared_ptr r = _session.route_by_id (subgroup_id); if (r) { _subgroup_bus = r; + _subgroup_bus->DropReferences.connect_same_thread (*this, boost::bind (&RouteGroup::unset_subgroup_bus, this)); } } @@ -565,6 +575,7 @@ RouteGroup::make_subgroup (bool aux, Placement placement) _subgroup_bus = rl.front(); _subgroup_bus->set_name (_name); + _subgroup_bus->DropReferences.connect_same_thread (*this, boost::bind (&RouteGroup::unset_subgroup_bus, this)); if (aux) {