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;