summaryrefslogtreecommitdiff
path: root/libs/ardour/audio_track.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-11-20 22:57:13 +0100
committerRobin Gareus <robin@gareus.org>2015-11-20 22:58:00 +0100
commit619727ef73445e8217d78af257e820e46072f10b (patch)
tree169553e1ab2970f0baf705d703a00399bb58856f /libs/ardour/audio_track.cc
parent602839ffea8963c8683298bc13a13ac371a1d4b7 (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/ardour/audio_track.cc')
-rw-r--r--libs/ardour/audio_track.cc6
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);