diff options
author | nick_m <mainsbridge@gmail.com> | 2015-03-24 23:35:43 +1100 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2015-03-24 23:35:43 +1100 |
commit | eff25b06f5feae81e1fb9bd323a555611f900eaf (patch) | |
tree | 82acd4519a08309b137185974249a6ef1be3f22f /libs/canvas | |
parent | 5bbea60546967a315a14ff5f53193a7171271d1b (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.cc | 17 |
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 |