From 070d8f5ee1473baab294fdfb21e1dda73995b444 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Mon, 30 Mar 2020 21:19:31 +0200 Subject: [PATCH] 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 --- gtk2_ardour/audio_region_view.cc | 15 ++++++++++++--- 1 file 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::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 ();