From 61e7f3176bfd8e423f72fc3f7d56d00ac930b796 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 21 Jan 2020 21:50:18 -0700 Subject: do not clear any PostTransportWork flags in butler thread doing this was causing the TFSM to get stuck in "WaitingForButler" --- libs/ardour/session_transport.cc | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc index da6655a696..6f23b67047 100644 --- a/libs/ardour/session_transport.cc +++ b/libs/ardour/session_transport.cc @@ -722,7 +722,18 @@ Session::butler_completed_transport_work () start_after_butler_done_msg = true; } - ptw = PostTransportWork (ptw & ~(PostTransportAdjustPlaybackBuffering|PostTransportAdjustCaptureBuffering|PostTransportOverWrite|PostTransportReverse|PostTransportRoll)); + /* the butler finished its work so clear all PostTransportWork flags + * reflecting things it may have done. + */ + + ptw = PostTransportWork (ptw & ~(PostTransportAdjustPlaybackBuffering| + PostTransportAdjustCaptureBuffering| + PostTransportOverWrite| + PostTransportReverse| + PostTransportRoll| + PostTransportAbort| + PostTransportStop| + PostTransportClearSubstate)); set_post_transport_work (ptw); set_next_event (); @@ -1239,7 +1250,7 @@ Session::butler_transport_work () g_atomic_int_dec_and_test (&_butler->should_do_transport_work); - DEBUG_TRACE (DEBUG::Transport, string_compose (X_("Butler transport work all done after %1 usecs @ %2 trw = %3\n"), g_get_monotonic_time() - before, _transport_sample, _butler->transport_work_requested())); + DEBUG_TRACE (DEBUG::Transport, string_compose (X_("Butler transport work all done after %1 usecs @ %2 ptw %3 trw = %4\n"), g_get_monotonic_time() - before, _transport_sample, enum_2_string (post_transport_work()), _butler->transport_work_requested())); } void @@ -1513,8 +1524,6 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished) } } - /* this for() block can be put inside the previous if() and has the effect of ... ??? what */ - { DEBUG_TRACE (DEBUG::Transport, X_("Butler PTW: locate\n")); for (RouteList::iterator i = r->begin(); i != r->end(); ++i) { @@ -1584,9 +1593,6 @@ Session::non_realtime_stop (bool abort, int on_entry, bool& finished) DEBUG_TRACE (DEBUG::Transport, string_compose ("send TSC with speed = %1\n", _transport_speed)); TransportStateChange (); /* EMIT SIGNAL */ AutomationWatch::instance().transport_stop_automation_watches (_transport_sample); - - ptw = PostTransportWork (ptw & ~(PostTransportAbort|PostTransportStop|PostTransportClearSubstate)); - set_post_transport_work (ptw); } void -- cgit v1.2.3