diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index 3b5318d087..c8e5cd47a3 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -193,6 +193,23 @@ StreamView::remove_region_view (std::weak_ptr weak_r) return; } + bool clear_rec_rects = false; + for (list,RegionView*> >::iterator i = rec_regions.begin(); i != rec_regions.end();) { + if (i->first == r) { + i = rec_regions.erase (i); + clear_rec_rects = true; + } else { + ++i; + } + } + + if (clear_rec_rects) { + for (auto const& i : rec_rects) { + delete i.rectangle; + } + rec_rects.clear(); + } + for (list::iterator i = region_views.begin(); i != region_views.end(); ++i) { if (((*i)->region()) == r) { RegionView* rv = *i; @@ -477,7 +494,8 @@ StreamView::cleanup_rec_box () rec_active = false; /* remove temp regions */ - for (auto const& i : rec_regions) { + auto rr (rec_regions); + for (auto const& i : rr) { i.first->drop_references (); }