diff options
author | Robin Gareus <robin@gareus.org> | 2019-12-25 17:57:10 +0100 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2019-12-25 17:57:10 +0100 |
commit | df17e3f041ab8f94fcc730dada2b53b57ac9113d (patch) | |
tree | 8236ae2bf93652005bad8bef1ae98bb88c6fb43b | |
parent | c9c8cd2777706d15e2e9df56dabc15b7f472dfcb (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.
-rw-r--r-- | libs/ardour/ardour/session.h | 2 | ||||
-rw-r--r-- | libs/ardour/session.cc | 8 |
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; |