summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2020-01-21 21:50:18 -0700
committerPaul Davis <paul@linuxaudiosystems.com>2020-01-21 21:50:35 -0700
commit61e7f3176bfd8e423f72fc3f7d56d00ac930b796 (patch)
tree11351e1a59dba769a6a7f6b3d7e9eca4b602c516 /libs/ardour
parenta765e52b47169a585993915c1725cf15e961ab59 (diff)
do not clear any PostTransportWork flags in butler thread
doing this was causing the TFSM to get stuck in "WaitingForButler"
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/session_transport.cc20
1 files 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