summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-10-15 13:49:35 +0200
committerRobin Gareus <robin@gareus.org>2015-10-15 13:50:19 +0200
commit159d23be9f1aa9e389b2bca8aec1bb673e2e2549 (patch)
tree4e1f6e98b151f3605ae607935d2955777d96085e
parent696b89b71a895dff732c734cdaa30a2e119292c8 (diff)
fix deadlock when removing subgroup bus w/sends.
...and potentially other route removals that involve processor changes.
-rw-r--r--libs/ardour/session.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 479b433f29..1231212d2e 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -2064,6 +2064,10 @@ Session::resort_routes ()
return;
}
+ if (_route_deletion_in_progress) {
+ return;
+ }
+
{
RCUWriter<RouteList> writer (routes);
boost::shared_ptr<RouteList> r = writer.get_copy ();
@@ -3363,9 +3367,8 @@ Session::add_internal_send (boost::shared_ptr<Route> dest, boost::shared_ptr<Pro
void
Session::remove_routes (boost::shared_ptr<RouteList> routes_to_remove)
{
- PBD::Unwinder<bool> uw_flag (_route_deletion_in_progress, true);
-
{ // RCU Writer scope
+ PBD::Unwinder<bool> uw_flag (_route_deletion_in_progress, true);
RCUWriter<RouteList> writer (routes);
boost::shared_ptr<RouteList> rs = writer.get_copy ();