summaryrefslogtreecommitdiff
path: root/gtk2_ardour/audio_region_view.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-03-30 21:19:31 +0200
committerRobin Gareus <robin@gareus.org>2020-03-30 21:19:43 +0200
commit070d8f5ee1473baab294fdfb21e1dda73995b444 (patch)
tree8ed66153a2a3915e247f1999daf9155eab033cc0 /gtk2_ardour/audio_region_view.cc
parent7701e5ecb995ab6a3b4159e94e7cec8c4d9abbc5 (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.cc15
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 ();