summaryrefslogtreecommitdiff
path: root/libs/ardour/session.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-12-25 17:57:10 +0100
committerRobin Gareus <robin@gareus.org>2019-12-25 17:57:10 +0100
commitdf17e3f041ab8f94fcc730dada2b53b57ac9113d (patch)
tree8236ae2bf93652005bad8bef1ae98bb88c6fb43b /libs/ardour/session.cc
parentc9c8cd2777706d15e2e9df56dabc15b7f472dfcb (diff)
Prevent copy-construction of sources to be destroyed list
destroy_sources () is only called from Session::remove_last_capture (). The list of sources to be destroyed is the local scope of that method and will hold a reference to the object. copy-construct the list and removing elements one by one from the copy is only unnecessary overhead.
Diffstat (limited to 'libs/ardour/session.cc')
-rw-r--r--libs/ardour/session.cc8
1 files changed, 3 insertions, 5 deletions
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 09e5634f5e..499cf73379 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -4242,11 +4242,11 @@ Session::find_whole_file_parent (boost::shared_ptr<Region const> child) const
}
int
-Session::destroy_sources (list<boost::shared_ptr<Source> > srcs)
+Session::destroy_sources (list<boost::shared_ptr<Source> > const& srcs)
{
set<boost::shared_ptr<Region> > relevant_regions;
- for (list<boost::shared_ptr<Source> >::iterator s = srcs.begin(); s != srcs.end(); ++s) {
+ for (list<boost::shared_ptr<Source> >::const_iterator s = srcs.begin(); s != srcs.end(); ++s) {
RegionFactory::get_regions_using_source (*s, relevant_regions);
}
@@ -4267,7 +4267,7 @@ Session::destroy_sources (list<boost::shared_ptr<Source> > srcs)
r = tmp;
}
- for (list<boost::shared_ptr<Source> >::iterator s = srcs.begin(); s != srcs.end(); ) {
+ for (list<boost::shared_ptr<Source> >::const_iterator s = srcs.begin(); s != srcs.end(); ++s) {
{
Glib::Threads::Mutex::Lock ls (source_lock);
@@ -4278,8 +4278,6 @@ Session::destroy_sources (list<boost::shared_ptr<Source> > srcs)
(*s)->mark_for_remove ();
(*s)->drop_references ();
SourceRemoved(*s);
-
- s = srcs.erase (s);
}
return 0;