diff options
author | Robin Gareus <robin@gareus.org> | 2015-08-28 15:45:52 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-08-28 15:45:52 +0200 |
commit | b0147a7767d7b2fde9dd8357515b8bc8018b5c65 (patch) | |
tree | 458eb4586011b9e22acb76ae8676de59d71d6393 /libs | |
parent | b6f51b2497bcb78f3ba335995386910fc0bad1f0 (diff) |
fix possible deadlock on session-close
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/route.cc | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index ce5570057b..55e1be2662 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -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; + } } } } |