lazbuild: fix memory leaks

git-svn-id: trunk@23612 -
This commit is contained in:
paul 2010-02-03 03:39:51 +00:00
parent bc1fd18141
commit c831cad6e0
3 changed files with 21 additions and 9 deletions

View File

@ -961,7 +961,12 @@ destructor TLazBuildApplication.Destroy;
begin begin
CloseProject(Project1); CloseProject(Project1);
FreeThenNil(PackageGraph); if Assigned(PackageGraph) then
begin
PackageGraph.FreeAutoInstallDependencies;
FreeThenNil(PackageGraph);
end;
FreeThenNil(PkgLinks); FreeThenNil(PkgLinks);
FreeThenNil(TheCompiler); FreeThenNil(TheCompiler);
FreeThenNil(TheOutputFilter); FreeThenNil(TheOutputFilter);

View File

@ -299,6 +299,7 @@ type
var InheritedOptionStrings: TInheritedCompOptsStrings): string; var InheritedOptionStrings: TInheritedCompOptsStrings): string;
function SaveAutoInstallConfig: TModalResult;// for the uses section function SaveAutoInstallConfig: TModalResult;// for the uses section
function IsStaticBasePackage(PackageName: string): boolean; function IsStaticBasePackage(PackageName: string): boolean;
procedure FreeAutoInstallDependencies;
public public
// registration // registration
procedure RegisterUnitHandler(const TheUnitName: string; procedure RegisterUnitHandler(const TheUnitName: string;
@ -1963,6 +1964,19 @@ begin
or (PackageName='codetools'); or (PackageName='codetools');
end; end;
procedure TLazPackageGraph.FreeAutoInstallDependencies;
var
Dependency: TPkgDependency;
begin
while Assigned(PackageGraph.FirstAutoInstallDependency) do
begin
Dependency:=PackageGraph.FirstAutoInstallDependency;
Dependency.RequiredPackage:=nil;
Dependency.RemoveFromList(PackageGraph.FirstAutoInstallDependency,pdlRequires);
Dependency.Free;
end;
end;
procedure TLazPackageGraph.ClosePackage(APackage: TLazPackage); procedure TLazPackageGraph.ClosePackage(APackage: TLazPackage);
begin begin
if (lpfDestroying in APackage.Flags) or PackageIsNeeded(APackage) then exit; if (lpfDestroying in APackage.Flags) or PackageIsNeeded(APackage) then exit;

View File

@ -1806,18 +1806,11 @@ begin
end; end;
destructor TPkgManager.Destroy; destructor TPkgManager.Destroy;
var
Dependency: TPkgDependency;
begin begin
if IDEComponentPalette<>nil then if IDEComponentPalette<>nil then
TComponentPalette(IDEComponentPalette).Notebook:=nil; TComponentPalette(IDEComponentPalette).Notebook:=nil;
FreeThenNil(LazPackageDescriptors); FreeThenNil(LazPackageDescriptors);
while PackageGraph.FirstAutoInstallDependency<>nil do begin PackageGraph.FreeAutoInstallDependencies;
Dependency:=PackageGraph.FirstAutoInstallDependency;
Dependency.RequiredPackage:=nil;
Dependency.RemoveFromList(PackageGraph.FirstAutoInstallDependency,pdlRequires);
Dependency.Free;
end;
FreeThenNil(PackageGraphExplorer); FreeThenNil(PackageGraphExplorer);
FreeThenNil(PackageEditors); FreeThenNil(PackageEditors);
FreeThenNil(PackageGraph); FreeThenNil(PackageGraph);