summaryrefslogtreecommitdiff
path: root/libs/ardour
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
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')
-rw-r--r--libs/ardour/ardour/session.h2
-rw-r--r--libs/ardour/session.cc8
2 files changed, 4 insertions, 6 deletions
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 14eecbae6a..9326c9b948 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -805,7 +805,7 @@ public:
int cleanup_sources (CleanupReport&);
int cleanup_trash_sources (CleanupReport&);
- int destroy_sources (std::list<boost::shared_ptr<Source> >);
+ int destroy_sources (std::list<boost::shared_ptr<Source> > const&);
int remove_last_capture ();
void get_last_capture_sources (std::list<boost::shared_ptr<Source> >&);
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;