prevent deletion of playlists on frozen tracks:
authorRobin Gareus <robin@gareus.org>
Fri, 20 Nov 2015 21:57:13 +0000 (22:57 +0100)
committerRobin Gareus <robin@gareus.org>
Fri, 20 Nov 2015 21:58:00 +0000 (22:58 +0100)
bug:
1) freeze a track
2) Session Cleanup > Cleanup unused sources
2a) confirm playlist deletion
3) quit, reload ->  track is no longer frozen
  because _freeze_record.playlist is missing.
  session is in an odd state.

libs/ardour/audio_track.cc

index 3ed7e9387e9d6f5c96426a3d8e30595140bb0468..97f43ebd7cd77ad9838ff61ce31d7cbf9ef706b8 100644 (file)
@@ -56,6 +56,9 @@ AudioTrack::AudioTrack (Session& sess, string name, Route::Flag flag, TrackMode
 
 AudioTrack::~AudioTrack ()
 {
+       if (_freeze_record.playlist) {
+               _freeze_record.playlist->release();
+       }
 }
 
 boost::shared_ptr<Diskstream>
@@ -287,6 +290,7 @@ AudioTrack::set_state_part_two ()
                        boost::shared_ptr<Playlist> pl = _session.playlists->by_name (prop->value());
                        if (pl) {
                                _freeze_record.playlist = boost::dynamic_pointer_cast<AudioPlaylist> (pl);
+                               _freeze_record.playlist->use();
                        } else {
                                _freeze_record.playlist.reset ();
                                _freeze_record.state = NoFreeze;
@@ -621,6 +625,8 @@ AudioTrack::freeze_me (InterThreadInfo& itt)
        diskstream->use_playlist (boost::dynamic_pointer_cast<AudioPlaylist>(new_playlist));
        diskstream->set_record_enabled (false);
 
+       _freeze_record.playlist->use(); // prevent deletion
+
        /* reset stuff that has already been accounted for in the freeze process */
 
        set_gain (GAIN_COEFF_UNITY, this);