From d79a1aaa98d1fde820a74960ca1138d42aa37a2e Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Thu, 2 Jun 2022 00:19:32 +0200 Subject: [PATCH] Fix mixer-scene signaling Mixer-scenes are session objects, and the signal must not be connected across session instances. This fixes a read-lock after write-lock when switching snapshots: Session::set_state -> MixerScene::set_state -> MixerScene::set_name -> Change(); /* emit signal */ ... -> Mixer_UI::update_scene_buttons -> Session::nth_mixer_scene --- gtk2_ardour/mixer_ui.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 572e4baa49..fbfd6f07aa 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -1241,7 +1241,6 @@ Mixer_UI::set_session (Session* sess) } update_scene_buttons(); - MixerScene::Change.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::update_scene_buttons, this), gui_context()); refill_favorite_plugins(); @@ -1271,6 +1270,8 @@ Mixer_UI::set_session (Session* sess) _session->vca_manager().VCAAdded.connect (_session_connections, invalidator (*this), boost::bind (&Mixer_UI::add_masters, this, _1), gui_context()); _session->vca_manager().VCACreated.connect (_session_connections, invalidator (*this), boost::bind (&Mixer_UI::new_masters_created, this), gui_context()); + MixerScene::Change.connect (_session_connections, invalidator (*this), boost::bind (&Mixer_UI::update_scene_buttons, this), gui_context()); + Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::parameter_changed, this, _1), gui_context ()); route_groups_changed ();