diff options
author | Robin Gareus <robin@gareus.org> | 2020-03-30 21:19:31 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2020-03-30 21:19:43 +0200 |
commit | 070d8f5ee1473baab294fdfb21e1dda73995b444 (patch) | |
tree | 8ed66153a2a3915e247f1999daf9155eab033cc0 /gtk2_ardour/audio_region_view.cc | |
parent | 7701e5ecb995ab6a3b4159e94e7cec8c4d9abbc5 (diff) |
Fix SesionhandlRef when rebuilding peak-files
Since rebuilding peaks does not call drop-references, the WaveView
is not explicitly released. and ArdourWaveView::WaveView
keeps a shared pointer reference to the AudioRegion.
This also fixes a memory leak, waves, tmp_waves store C++ pointers,
not shared pointers. Explicit delete is required
Diffstat (limited to 'gtk2_ardour/audio_region_view.cc')
-rw-r--r-- | gtk2_ardour/audio_region_view.cc | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc index b736f29416..8748acc16d 100644 --- a/gtk2_ardour/audio_region_view.cc +++ b/gtk2_ardour/audio_region_view.cc @@ -1156,9 +1156,14 @@ AudioRegionView::delete_waves () for (vector<ArdourWaveView::WaveView*>::iterator w = waves.begin(); w != waves.end(); ++w) { group->remove(*w); + delete *w; } waves.clear(); - tmp_waves.clear(); + + while (!tmp_waves.empty ()) { + delete tmp_waves.back (); + tmp_waves.pop_back (); + } pending_peak_data->show (); } @@ -1304,8 +1309,12 @@ AudioRegionView::create_one_wave (uint32_t which, bool /*direct*/) /* all waves are ready */ tmp_waves.resize(nwaves); - waves = tmp_waves; - tmp_waves.clear (); + waves.swap(tmp_waves); + + while (!tmp_waves.empty ()) { + delete tmp_waves.back (); + tmp_waves.pop_back (); + } /* indicate peak-completed */ pending_peak_data->hide (); |