Don’t use invalid iterator during cleanup. fixes #6403
[ardour.git] / libs / ardour / session_state.cc
index 2bf04d9ab2b3091285eee3d01250f571346128a3..6dc5462d58814f4b2a4839df0e9e0224026f9490 100644 (file)
@@ -398,14 +398,7 @@ Session::session_loaded ()
        /* Now, finally, we can fill the playback buffers */
        
        BootMessage (_("Filling playback buffers"));
-       
-       boost::shared_ptr<RouteList> rl = routes.reader();
-       for (RouteList::iterator r = rl->begin(); r != rl->end(); ++r) {
-               boost::shared_ptr<Track> trk = boost::dynamic_pointer_cast<Track> (*r);
-               if (trk && !trk->hidden()) {
-                       trk->seek (_transport_frame, true);
-               }
-       }
+       force_locate (_transport_frame, false);
 }
 
 string
@@ -2895,6 +2888,8 @@ Session::cleanup_sources (CleanupReport& rep)
                                           in the region list.
                                        */
                                        
+                                       std::string fpath = i->second->name ();
+
                                        RegionFactory::remove_regions_using_source (i->second);
                                        sources.erase (i);
                                        
@@ -2902,7 +2897,7 @@ Session::cleanup_sources (CleanupReport& rep)
                                        
                                        for (set<string>::iterator j = all_sources.begin(); j != all_sources.end(); ++j) {
                                                spath = Glib::path_get_basename (*j);
-                                               if ( spath == i->second->name () ) {
+                                               if ( spath == fpath ) {
                                                        all_sources.erase (j);
                                                        break;
                                                }