summaryrefslogtreecommitdiff
path: root/libs/canvas
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2015-03-24 23:35:43 +1100
committernick_m <mainsbridge@gmail.com>2015-03-24 23:35:43 +1100
commiteff25b06f5feae81e1fb9bd323a555611f900eaf (patch)
tree82acd4519a08309b137185974249a6ef1be3f22f /libs/canvas
parent5bbea60546967a315a14ff5f53193a7171271d1b (diff)
Fix 0006183 (waveview crash).
Should fix crash when audiosource disappears. Reworked from submitted patch from tlat.
Diffstat (limited to 'libs/canvas')
-rw-r--r--libs/canvas/wave_view.cc17
1 files changed, 15 insertions, 2 deletions
diff --git a/libs/canvas/wave_view.cc b/libs/canvas/wave_view.cc
index 5e6ff700b5..3521ef33cd 100644
--- a/libs/canvas/wave_view.cc
+++ b/libs/canvas/wave_view.cc
@@ -211,6 +211,21 @@ WaveView::invalidate_image_cache ()
vector <uint32_t> deletion_list;
vector <CacheEntry> caches;
+ /* The source may have disappeared in the case of rec regions.*/
+ if (_region->n_channels() == 0) {
+ std::map <boost::shared_ptr<ARDOUR::AudioSource>, std::vector <CacheEntry> >::iterator i;
+ for (i = _image_cache.begin(); i != _image_cache.end(); ++i) {
+ if (i->first.unique()) {
+ for (uint32_t n = 0; n < (*i).second.size (); ++n) {
+ (*i).second[n].image.clear ();
+ }
+ (*i).second.clear ();
+ _image_cache.erase(i->first);
+ }
+ }
+ return;
+ }
+
if (_image_cache.find (_region->audio_source ()) != _image_cache.end ()) {
caches = _image_cache.find (_region->audio_source ())->second;
} else {
@@ -228,7 +243,6 @@ WaveView::invalidate_image_cache ()
}
deletion_list.push_back (i);
-
}
while (deletion_list.size() > 0) {
@@ -242,7 +256,6 @@ WaveView::invalidate_image_cache ()
} else {
_image_cache[_region->audio_source ()] = caches;
}
-
}
void