summaryrefslogtreecommitdiff
path: root/libs/ardour/session_transport.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-02-17 11:21:41 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2015-02-17 11:21:41 -0500
commit58137b83262208bb317c3dbd08f95698b409f254 (patch)
treedd8e92686634c98ca0f140424c984702303d4d80 /libs/ardour/session_transport.cc
parentb72d37a45f77f43233cd883a0e78d38fef975786 (diff)
try to restore original semantics for scheduling butler transport work in Session::locate()
Diffstat (limited to 'libs/ardour/session_transport.cc')
-rw-r--r--libs/ardour/session_transport.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index 449349996f..be4cc8112c 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -973,6 +973,8 @@ Session::micro_locate (framecnt_t distance)
void
Session::locate (framepos_t target_frame, bool with_roll, bool with_flush, bool for_seamless_loop, bool force, bool with_mmc)
{
+ bool need_butler = false;
+
/* Locates for seamless looping are fairly different from other
* locates. They assume that the diskstream buffers for each track
* already have the correct data in them, and thus there is no need to
@@ -1048,7 +1050,8 @@ Session::locate (framepos_t target_frame, bool with_roll, bool with_flush, bool
}
add_post_transport_work (todo);
-
+ need_butler = true;
+
} else {
/* this is functionally what clear_clicks() does but with a tentative lock */
@@ -1115,6 +1118,7 @@ Session::locate (framepos_t target_frame, bool with_roll, bool with_flush, bool
* end.
*/
add_post_transport_work (PostTransportLocate);
+ need_butler = true;
}
}
@@ -1139,7 +1143,9 @@ Session::locate (framepos_t target_frame, bool with_roll, bool with_flush, bool
}
}
- _butler->schedule_transport_work ();
+ if (need_butler) {
+ _butler->schedule_transport_work ();
+ }
loop_changing = false;