fix deadlock when removing subgroup bus w/sends.
authorRobin Gareus <robin@gareus.org>
Thu, 15 Oct 2015 11:49:35 +0000 (13:49 +0200)
committerRobin Gareus <robin@gareus.org>
Thu, 15 Oct 2015 11:50:19 +0000 (13:50 +0200)
...and potentially other route removals that involve
processor changes.

libs/ardour/session.cc

index 479b433f2937b95f9b33ec6da9b565df73b4570f..1231212d2ebdd7ea2e1e0a21a07dedabfa56b20d 100644 (file)
@@ -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 ();