summaryrefslogtreecommitdiff
path: root/libs/ardour/audio_playlist.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2007-10-23 12:50:25 +0000
committerCarl Hetherington <carl@carlh.net>2007-10-23 12:50:25 +0000
commit20db119cd3086c32e7e7e8efe12ace4ce1e2dadf (patch)
tree46dc68c6bb9d733f6e592a2fcc71a87d0619eaa7 /libs/ardour/audio_playlist.cc
parent669289873299e55d7ecb896e66690d25bb388309 (diff)
Fix crash due to invalidated shared_ptr, as suggested by Paul
git-svn-id: svn://localhost/ardour2/trunk@2565 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/audio_playlist.cc')
-rw-r--r--libs/ardour/audio_playlist.cc11
1 files changed, 6 insertions, 5 deletions
diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc
index d5c6120946..f4c10cbc12 100644
--- a/libs/ardour/audio_playlist.cc
+++ b/libs/ardour/audio_playlist.cc
@@ -271,11 +271,12 @@ AudioPlaylist::refresh_dependents (boost::shared_ptr<Region> r)
if ((*x)->involves (ar)) {
- if (find (updated.begin(), updated.end(), *x) == updated.end()) {
- try {
- if ((*x)->refresh ()) {
- updated.insert (*x);
- }
+ pair<set<boost::shared_ptr<Crossfade> >::iterator, bool> const u = updated.insert (*x);
+
+ if (u.second) {
+ /* x was successfully inserted into the set, so it has not already been updated */
+ try {
+ (*x)->refresh ();
}
catch (Crossfade::NoCrossfadeHere& err) {