From b2be7cb6bd797f40d998a80d61cc88a75632b193 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Tue, 28 Jun 2016 16:05:35 -0400 Subject: remove debug output and add a few suggestive comments --- libs/ardour/playlist.cc | 8 +++++++- libs/ardour/region.cc | 16 ++++++++-------- libs/ardour/session_playlists.cc | 8 ++++---- 3 files changed, 19 insertions(+), 13 deletions(-) (limited to 'libs') diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 7267ec8cdf..58405e4755 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -2675,7 +2675,13 @@ Playlist::uses_source (boost::shared_ptr src, bool shallow) const RegionReadLock rlock (const_cast (this)); for (set >::const_iterator r = all_regions.begin(); r != all_regions.end(); ++r) { - if ((*r)->uses_source (src, true)) { + /* Note: passing the second argument as false can cause at best + incredibly deep and time-consuming recursion, and at worst + cycles if the user has managed to create cycles of reference + between compound regions. We generally only this during + cleanup, and @param shallow is passed as true. + */ + if ((*r)->uses_source (src, shallow)) { return true; } } diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index 20cab959e7..ba18cbc62d 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -1531,15 +1531,15 @@ Region::deep_sources (std::set > & sources) const if (ps) { if (sources.find (ps) == sources.end()) { + /* (Playlist)Source not currently in + accumulating set, so recurse. + */ ps->playlist()->deep_sources (sources); - cerr << ps->name() << " new source\n"; - } else { - cerr << ps->name() << " already in source list\n"; } } + /* add this source */ sources.insert (*i); - cerr << "Added src " << (*i)->name() << endl; } for (SourceList::const_iterator i = _master_sources.begin(); i != _master_sources.end(); ++i) { @@ -1548,15 +1548,15 @@ Region::deep_sources (std::set > & sources) const if (ps) { if (sources.find (ps) == sources.end()) { + /* (Playlist)Source not currently in + accumulating set, so recurse. + */ ps->playlist()->deep_sources (sources); - cerr << ps->name() << " new source2\n"; - } else { - cerr << ps->name() << " already in source list2\n"; } } + /* add this source */ sources.insert (*i); - cerr << "Added master src " << (*i)->name() << endl; } } diff --git a/libs/ardour/session_playlists.cc b/libs/ardour/session_playlists.cc index c2e0461546..368b043ef7 100644 --- a/libs/ardour/session_playlists.cc +++ b/libs/ardour/session_playlists.cc @@ -244,7 +244,6 @@ SessionPlaylists::destroy_region (boost::shared_ptr r) } } - void SessionPlaylists::find_equivalent_playlist_regions (boost::shared_ptr region, vector >& result) { @@ -260,7 +259,10 @@ SessionPlaylists::source_use_count (boost::shared_ptr src) const { uint32_t count = 0; - cerr << "\t\tcheck " << playlists.size() << " playlists\n"; + /* XXXX this can go wildly wrong in the presence of circular references + * between compound regions. + */ + for (List::const_iterator p = playlists.begin(); p != playlists.end(); ++p) { if ((*p)->uses_source (src)) { ++count; @@ -268,7 +270,6 @@ SessionPlaylists::source_use_count (boost::shared_ptr src) const } } - cerr << "\t\tcheck " << playlists.size() << " unused playlists\n"; for (List::const_iterator p = unused_playlists.begin(); p != unused_playlists.end(); ++p) { if ((*p)->uses_source (src)) { ++count; @@ -518,4 +519,3 @@ SessionPlaylists::foreach (boost::function