Fix uninitialised tempo section variable
authornick_m <mainsbridge@gmail.com>
Thu, 8 Jun 2017 12:18:57 +0000 (22:18 +1000)
committernick_m <mainsbridge@gmail.com>
Thu, 8 Jun 2017 12:18:57 +0000 (22:18 +1000)
Should fix 7390.

libs/ardour/ardour/tempo.h
libs/ardour/tempo.cc

index fd49037307064e1f0fe482df1ce28d796c29963e..197c8c5f8f3807ea6c5ea8e4dbacd460222aab4e 100644 (file)
@@ -249,7 +249,6 @@ class LIBARDOUR_API TempoSection : public MetricSection, public Tempo {
        framepos_t frame_at_pulse (const double& pulse) const;
 
        Timecode::BBT_Time legacy_bbt () { return _legacy_bbt; }
-       bool legacy_end () { return _legacy_end; }
 
   private:
 
@@ -283,7 +282,6 @@ class LIBARDOUR_API TempoSection : public MetricSection, public Tempo {
        bool _locked_to_meter;
        bool _clamped;
        Timecode::BBT_Time _legacy_bbt;
-       bool _legacy_end;
 };
 
 typedef std::list<MetricSection*> Metrics;
index 240be1b9e10994ed5b23eb63bb17714e2d7d0c1c..c04f6803fd345fa45f8ddd844647b23b2d77831f 100644 (file)
@@ -158,7 +158,6 @@ TempoSection::TempoSection (const XMLNode& node, framecnt_t sample_rate)
        , _active (true)
        , _locked_to_meter (false)
        , _clamped (false)
-       , _legacy_end (false)
 {
        LocaleGuard lg;
 
@@ -201,19 +200,22 @@ TempoSection::TempoSection (const XMLNode& node, framecnt_t sample_rate)
 
        if (node.get_property ("end-beats-per-minute", _end_note_types_per_minute)) {
                if (_end_note_types_per_minute < 0.0) {
-                       info << _("TempoSection XML node has an illegal \"in-beats-per-minute\" value") << endmsg;
-                       //throw failed_constructor();
-                       _end_note_types_per_minute = _note_types_per_minute;
-                       _legacy_end = true;
+                       info << _("TempoSection XML node has an illegal \"end-beats-per-minute\" value") << endmsg;
+                       throw failed_constructor();
                }
-       } else {
-               _legacy_end = true;
        }
 
        TempoSection::Type old_type;
        if (!node.get_property ("tempo-type", old_type)) {
+               /* sessions with a tempo-type node contain no end-beats-per-minute.
+                  if the legacy node indicates a constant tempo, simply fill this in with the
+                  start tempo. otherwise we need the next neighbour to know what it will be.
+               */
+
                if (old_type == TempoSection::Constant) {
                        _end_note_types_per_minute = _note_types_per_minute;
+               } else {
+                       _end_note_types_per_minute = -1.0;
                }
        }
 
@@ -4649,7 +4651,7 @@ TempoMap::set_state (const XMLNode& node, int /*version*/)
                                        break;
                                }
 
-                               if (t->legacy_end()) {
+                               if (t->end_note_types_per_minute() < 0.0) {
                                        fix_legacy_end_session();
                                        break;
                                }