fix possible deadlock on session-close
authorRobin Gareus <robin@gareus.org>
Fri, 28 Aug 2015 13:45:52 +0000 (15:45 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 28 Aug 2015 13:45:52 +0000 (15:45 +0200)
libs/ardour/route.cc

index ce5570057ba1422b4184a9bd6db2f9f0eca94747..55e1be26622b3b195939c955fc437769a8ded0ad 100644 (file)
@@ -3101,14 +3101,21 @@ Route::remove_aux_or_listen (boost::shared_ptr<Route> route)
                        
                        if (d && d->target_route() == route) {
                                rl.release ();
-                               remove_processor (*x, &err, false);
+                               if (remove_processor (*x, &err, false) > 0) {
+                                       rl.acquire ();
+                                       continue;
+                               }
                                rl.acquire ();
 
                                /* list could have been demolished while we dropped the lock
                                   so start over.
                                */
-                               
-                               goto again;
+                               if (_session.engine().connected()) {
+                                       /* i/o processors cannot be removed if the engine is not running
+                                        * so don't live-loop in case the engine is N/A or dies
+                                        */
+                                       goto again;
+                               }
                        }
                }
        }