diff options
author | Robin Gareus <robin@gareus.org> | 2015-11-20 22:57:13 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-11-20 22:58:00 +0100 |
commit | 619727ef73445e8217d78af257e820e46072f10b (patch) | |
tree | 169553e1ab2970f0baf705d703a00399bb58856f /libs | |
parent | 602839ffea8963c8683298bc13a13ac371a1d4b7 (diff) |
prevent deletion of playlists on frozen tracks:
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.
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/audio_track.cc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc index 3ed7e9387e..97f43ebd7c 100644 --- a/libs/ardour/audio_track.cc +++ b/libs/ardour/audio_track.cc @@ -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); |