summaryrefslogtreecommitdiff
path: root/libs/ardour/session_transport.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2017-07-04 12:14:33 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2017-09-18 11:40:53 -0400
commit6fb212a6f64e88a8096d90512d93b18dd6745dea (patch)
treef3c9ffa982a59005e6b1cb01de9e520ed5f1c6aa /libs/ardour/session_transport.cc
parent58ea3d3d8c2d9802c52605a1baadb8fb4cce65f8 (diff)
restart non-RT locate if a new request has been processed by RT context since we started
Diffstat (limited to 'libs/ardour/session_transport.cc')
-rw-r--r--libs/ardour/session_transport.cc15
1 files changed, 15 insertions, 0 deletions
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index b9e8714d17..4a81e0e798 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -584,9 +584,24 @@ Session::non_realtime_locate ()
{
boost::shared_ptr<RouteList> rl = routes.reader();
+
+ restart:
+ const framepos_t tf = _transport_frame;
+
+ cerr << "\n\n >>> START Non-RT locate on routes to " << tf << "\n\n";
+
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
(*i)->non_realtime_locate (_transport_frame);
+ if (tf != _transport_frame) {
+ /* new locate request arrived while processing
+ this one. start over.
+ */
+ cerr << "\n\n\n\n RESTART LOCATE @ " << _transport_frame << endl;
+ goto restart;
+ }
}
+
+ cerr << "\n\n <<< DONE Non-RT locate on routes\n\n";
}
{
VCAList v = _vca_manager->vcas ();