From c75fa0077e6cf418d66936b4041bc6d95a2fcecf Mon Sep 17 00:00:00 2001 From: Jim Broadus Date: Thu, 9 Jul 2020 00:10:00 -0700 Subject: [PATCH] Fix playlist memory leak When the current playlist is changed, PlaylistContainer::SetViewModel is called to set the new list. This calls PlaylistView::SetItemDelegates, which allocates several objects that are never freed. Instead, move the call to SetItemDelegates to PlaylistContainer::SetApplication, which is only called once. --- src/playlist/playlistcontainer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/playlist/playlistcontainer.cpp b/src/playlist/playlistcontainer.cpp index ad92e3edc..33fffc818 100644 --- a/src/playlist/playlistcontainer.cpp +++ b/src/playlist/playlistcontainer.cpp @@ -123,6 +123,8 @@ void PlaylistContainer::SetApplication(Application* app) { app_ = app; SetManager(app_->playlist_manager()); ui_->playlist->SetApplication(app_); + // This should not be called before SetApplication. + view()->SetItemDelegates(manager_->library_backend()); connect(app_, SIGNAL(SaveSettings(QSettings*)), SLOT(Save(QSettings*))); } @@ -200,7 +202,6 @@ void PlaylistContainer::SetViewModel(Playlist* playlist) { // Set the view playlist->IgnoreSorting(true); view()->setModel(playlist->proxy()); - view()->SetItemDelegates(manager_->library_backend()); view()->SetPlaylist(playlist); view()->selectionModel()->select(manager_->current_selection(), QItemSelectionModel::ClearAndSelect);