summaryrefslogtreecommitdiff
path: root/libs/ardour/audio_playlist.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/audio_playlist.cc')
-rw-r--r--libs/ardour/audio_playlist.cc23
1 files changed, 18 insertions, 5 deletions
diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc
index 94b80df178..335cb020ae 100644
--- a/libs/ardour/audio_playlist.cc
+++ b/libs/ardour/audio_playlist.cc
@@ -546,7 +546,7 @@ AudioPlaylist::set_state (const XMLNode& node)
}
thaw ();
- in_set_state++;
+ in_set_state--;
return 0;
}
@@ -639,12 +639,10 @@ AudioPlaylist::destroy_region (boost::shared_ptr<Region> region)
{
RegionLock rlock (this);
- RegionList::iterator i;
- RegionList::iterator tmp;
- for (i = regions.begin(); i != regions.end(); ) {
+ for (RegionList::iterator i = regions.begin(); i != regions.end(); ) {
- tmp = i;
+ RegionList::iterator tmp = i;
++tmp;
if ((*i) == region) {
@@ -654,6 +652,21 @@ AudioPlaylist::destroy_region (boost::shared_ptr<Region> region)
i = tmp;
}
+
+ for (set<boost::shared_ptr<Region> >::iterator x = all_regions.begin(); x != all_regions.end(); ) {
+
+ set<boost::shared_ptr<Region> >::iterator xtmp = x;
+ ++xtmp;
+
+ if ((*x) == region) {
+ all_regions.erase (x);
+ changed = true;
+ }
+
+ x = xtmp;
+ }
+
+ region->set_playlist (0);
}
for (c = _crossfades.begin(); c != _crossfades.end(); ) {