diff --git a/gtk2_ardour/rta_manager.cc b/gtk2_ardour/rta_manager.cc index e9dc3789ee..2c37b95ef5 100644 --- a/gtk2_ardour/rta_manager.cc +++ b/gtk2_ardour/rta_manager.cc @@ -20,6 +20,7 @@ #include "gtk2ardour-config.h" #endif +#include "pbd/unwind.h" #include "pbd/types_convert.h" #include "ardour/rt_safe_delete.h" @@ -49,6 +50,7 @@ RTAManager::RTAManager () : _active (false) , _speed (ARDOUR::DSP::PerceptualAnalyzer::Moderate) , _warp (ARDOUR::DSP::PerceptualAnalyzer::Medium) + , _clearing (false) { } @@ -187,6 +189,9 @@ RTAManager::attach (std::shared_ptr route) void RTAManager::remove (std::shared_ptr route) { + if (_clearing) { + return; + } _rta.remove_if ([route] (RTAManager::RTA const& r) { return r.route () == route; }); route->gui_changed ("rta", this); /* EMIT SIGNAL */ @@ -198,6 +203,8 @@ RTAManager::remove (std::shared_ptr route) void RTAManager::clear () { + PBD::Unwinder uw (_clearing, true); + std::list::iterator i = _rta.begin (); while (i != _rta.end ()) { std::shared_ptr route = i->route (); diff --git a/gtk2_ardour/rta_manager.h b/gtk2_ardour/rta_manager.h index 9082b5b2a9..8f3a275088 100644 --- a/gtk2_ardour/rta_manager.h +++ b/gtk2_ardour/rta_manager.h @@ -120,6 +120,6 @@ private: bool _active; ARDOUR::DSP::PerceptualAnalyzer::Speed _speed; ARDOUR::DSP::PerceptualAnalyzer::Warp _warp; - + bool _clearing; sigc::connection _update_connection; };