fix broken-ness caused by bad initialization of a StopTransport event in TransportFSM
This commit is contained in:
@@ -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<Event> EventList;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user