in the release code of 12.11
void CompilerGCC::PrepareCompileFilePM(wxFileName& file)
{
// we 're called from a menu in ProjectManager
// let's check the selected project...
[color=red]FileTreeData* ftd = DoSwitchProjectTemporarily();[/color]
ProjectFile* pf = ftd->GetProjectFile();
if (!pf)
return;
file = pf->file;
CheckProject();
}
the ftd pointer here is malloc in DoSwitchProjectTemporarily function, but no use here, so it MUST be deleted, or it will result in a memory leak!
This patch should fix the problem. I'll wait for a few day and if there are no objections I'll commit it.
Index: src/plugins/compilergcc/compilergcc.cpp
===================================================================
--- src/plugins/compilergcc/compilergcc.cpp (revision 9609)
+++ src/plugins/compilergcc/compilergcc.cpp (working copy)
@@ -1073,16 +1073,14 @@ FileTreeData* CompilerGCC::DoSwitchProjectTemporarily()
ProjectManager* manager = Manager::Get()->GetProjectManager();
wxTreeCtrl* tree = manager->GetUI().GetTree();
wxTreeItemId sel = manager->GetUI().GetTreeSelection();
- FileTreeData* ftd = sel.IsOk() ? (FileTreeData*)tree->GetItemData(sel) : 0;
+ FileTreeData* ftd = sel.IsOk() ? (FileTreeData*)tree->GetItemData(sel) : nullptr;
if (!ftd)
- return 0L;
- // copy ftd to a new instance, because after the SetProject() call
- // that follows, ftd will no longer be valid...
- FileTreeData* newFtd = new FileTreeData(*ftd);
+ return nullptr;
+ // We're not rebuilding the tree, so the ftd pointer is still valid after the call.
Manager::Get()->GetProjectManager()->SetProject(ftd->GetProject(), false);
AskForActiveProject();
- return newFtd;
+ return ftd;
}
void CompilerGCC::AddToCommandQueue(const wxArrayString& commands)