From d83cd0588278ac23b320694762e8fffd347fb4ad Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 18 Jan 2020 17:59:44 -0700 Subject: [PATCH] fix broken-ness caused by bad initialization of a StopTransport event in TransportFSM --- libs/ardour/ardour/transport_fsm.h | 8 +++++--- libs/ardour/transport_fsm.cc | 9 ++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/libs/ardour/ardour/transport_fsm.h b/libs/ardour/ardour/transport_fsm.h index 54ceac2304..86133e77c5 100644 --- a/libs/ardour/ardour/transport_fsm.h +++ b/libs/ardour/ardour/transport_fsm.h @@ -64,7 +64,10 @@ struct TransportFSM , target (0) , for_loop_end (false) , force (false) - {} + { + assert (t != StopTransport); + assert (t != Locate); + } Event (EventType t, bool ab, bool cl) : type (t) , abort (ab) @@ -131,7 +134,7 @@ struct TransportFSM void schedule_butler_for_transport_work () const; void start_playback (); - void stop_playback (); + void stop_playback (Event const &); void start_locate_after_declick () const; void locate_for_loop (Event const &); void roll_after_locate () const; @@ -163,7 +166,6 @@ struct TransportFSM bool process_event (Event&, bool was_deferred, bool& deferred); Event _last_locate; - Event _last_stop; TransportAPI* api; typedef boost::intrusive::list EventList; diff --git a/libs/ardour/transport_fsm.cc b/libs/ardour/transport_fsm.cc index 05d4757e95..8e3ef98cfa 100644 --- a/libs/ardour/transport_fsm.cc +++ b/libs/ardour/transport_fsm.cc @@ -54,8 +54,7 @@ TransportFSM::Event::operator delete (void *ptr, size_t /*size*/) } TransportFSM::TransportFSM (TransportAPI& tapi) - : _last_locate (Locate) - , _last_stop (StopTransport) + : _last_locate (Locate, 0, MustRoll, false, false, false) /* all but first argument don't matter */ , api (&tapi) , processing (0) { @@ -232,7 +231,7 @@ TransportFSM::process_event (Event& ev, bool already_deferred, bool& deferred) switch (_motion_state) { case Rolling: transition (DeclickToStop); - stop_playback (); + stop_playback (ev); break; case Stopped: break; @@ -369,14 +368,14 @@ TransportFSM::start_playback () } void -TransportFSM::stop_playback () +TransportFSM::stop_playback (Event const & s) { DEBUG_TRACE (DEBUG::TFSMEvents, "stop_playback\n"); _last_locate.target = max_samplepos; current_roll_after_locate_status = boost::none; - api->stop_transport (_last_stop.abort, _last_stop.clear_state); + api->stop_transport (s.abort, s.clear_state); } void