Fix dangling location on new location -> undo.
authornick_m <mainsbridge@gmail.com>
Fri, 10 Apr 2015 18:45:45 +0000 (04:45 +1000)
committernick_m <mainsbridge@gmail.com>
Fri, 10 Apr 2015 18:45:45 +0000 (04:45 +1000)
libs/ardour/location.cc

index 2e9125126b4c69ea2e617abebdeb489a87a95e53..2c19ebd1e0c5752ec8340aa99b8c2f0a05ff013d 100644 (file)
@@ -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()) {