From 9ab625ee0ef37e7894b569bd20cf84c2d0cdf31e Mon Sep 17 00:00:00 2001 From: repojohnray <8113421+repojohnray@users.noreply.github.com> Date: Mon, 16 Jan 2023 13:09:31 +0100 Subject: [CGUIDialogContextMenu] fix memory leak This memory leak is happening when a context menu is opened. This change addresses two issues: - Missing delete. - Group list not defined (the behavior is changed). --- xbmc/dialogs/GUIDialogContextMenu.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/xbmc/dialogs/GUIDialogContextMenu.cpp b/xbmc/dialogs/GUIDialogContextMenu.cpp index 76ceefc287..dcc9edec34 100644 --- a/xbmc/dialogs/GUIDialogContextMenu.cpp +++ b/xbmc/dialogs/GUIDialogContextMenu.cpp @@ -126,17 +126,17 @@ void CGUIDialogContextMenu::SetupButtons() CGUIControlGroupList* pGroupList = dynamic_cast(GetControl(GROUP_LIST)); // add our buttons - for (unsigned int i = 0; i < m_buttons.size(); i++) + if (pGroupList) { - CGUIButtonControl *pButton = new CGUIButtonControl(*pButtonTemplate); - if (pButton) - { // set the button's ID and position - int id = BUTTON_START + i; - pButton->SetID(id); - pButton->SetVisible(true); - pButton->SetLabel(m_buttons[i].second); - if (pGroupList) - { + for (unsigned int i = 0; i < m_buttons.size(); i++) + { + CGUIButtonControl* pButton = new CGUIButtonControl(*pButtonTemplate); + if (pButton) + { // set the button's ID and position + int id = BUTTON_START + i; + pButton->SetID(id); + pButton->SetVisible(true); + pButton->SetLabel(m_buttons[i].second); pButton->SetPosition(pButtonTemplate->GetXPosition(), pButtonTemplate->GetYPosition()); // try inserting context buttons at position specified by template // button, if template button is not in grouplist fallback to adding @@ -591,7 +591,10 @@ void CGUIDialogContextMenu::OnDeinitWindow(int nextWindowID) { const CGUIControl *control = GetControl(BUTTON_START + i); if (control) + { RemoveControl(control); + delete control; + } } m_buttons.clear(); -- cgit v1.2.3