fix broken-ness caused by bad initialization of a StopTransport event in TransportFSM
authorPaul Davis <paul@linuxaudiosystems.com>
Sun, 19 Jan 2020 00:59:44 +0000 (17:59 -0700)
committerPaul Davis <paul@linuxaudiosystems.com>
Sun, 19 Jan 2020 02:59:24 +0000 (19:59 -0700)
libs/ardour/ardour/transport_fsm.h
libs/ardour/transport_fsm.cc

index 54ceac230446963685aa863a697d95fa501b8ffd..86133e77c5605a4f5fda6b1f3f2937402dc77e9a 100644 (file)
@@ -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;
index 05d4757e95425a97adfbff0bad3aa1d3581a906b..8e3ef98cfac9bdbe9c66194a50f6ae95c70570cf 100644 (file)
@@ -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