summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/location.cc24
1 files changed, 24 insertions, 0 deletions
diff --git a/libs/ardour/location.cc b/libs/ardour/location.cc
index 2e9125126b..2c19ebd1e0 100644
--- a/libs/ardour/location.cc
+++ b/libs/ardour/location.cc
@@ -1113,6 +1113,30 @@ Locations::set_state (const XMLNode& node, int version)
}
}
+ /* We may have some unused locations in the old list. */
+ for (LocationList::iterator i = locations.begin(); i != locations.end(); ) {
+ LocationList::iterator tmp = i;
+ ++tmp;
+
+ LocationList::iterator n = new_locations.begin();
+ bool found = false;
+
+ while (n != new_locations.end ()) {
+ if ((*i)->id() == (*n)->id()) {
+ found = true;
+ break;
+ }
+ ++n;
+ }
+
+ if (!found) {
+ delete *i;
+ locations.erase (i);
+ }
+
+ i = tmp;
+ }
+
locations = new_locations;
if (locations.size()) {