IDE: fixed AV and memleak when closing Lazarus with an open fpdoc edit window

git-svn-id: trunk@15302 -
This commit is contained in:
vincents 2008-06-04 07:37:32 +00:00
parent 6b86d276a7
commit 97ffab3695
2 changed files with 12 additions and 1 deletions

View File

@ -181,6 +181,7 @@ type
const AMethod: TMethod; AsLast: boolean = false);
procedure RemoveHandler(HandlerType: TCodeHelpManagerHandler;
const AMethod: TMethod);
procedure FreeHandlers;
procedure CallDocChangeEvents(HandlerType: TCodeHelpManagerHandler;
Doc: TLazFPDocFile);
function DoCreateFPDocFileForSource(const SrcFilename: string;
@ -707,6 +708,14 @@ begin
FHandlers[HandlerType].Remove(AMethod);
end;
procedure TCodeHelpManager.FreeHandlers;
var
HandlerType: TCodeHelpManagerHandler;
begin
for HandlerType:=Low(TCodeHelpManagerHandler) to High(TCodeHelpManagerHandler) do
FreeThenNil(FHandlers[HandlerType]);
end;
procedure TCodeHelpManager.CallDocChangeEvents(HandlerType: TCodeHelpManagerHandler;
Doc: TLazFPDocFile);
var
@ -922,6 +931,7 @@ begin
FreeAndNil(FDocs);
FreeAndNil(FSrcToDocMap);
FreeAndNil(FDeclarationCache);
FreeHandlers;
inherited Destroy;
end;

View File

@ -292,7 +292,8 @@ procedure TFPDocEditor.FormDestroy(Sender: TObject);
begin
Reset;
FreeAndNil(fChain);
CodeHelpBoss.RemoveAllHandlersOfObject(Self);
if assigned(CodeHelpBoss) then
CodeHelpBoss.RemoveAllHandlersOfObject(Self);
Application.RemoveAllHandlersOfObject(Self);
end;