From 97ffab3695929853362301a8c36e6ee5e90d67d2 Mon Sep 17 00:00:00 2001 From: vincents Date: Wed, 4 Jun 2008 07:37:32 +0000 Subject: [PATCH] IDE: fixed AV and memleak when closing Lazarus with an open fpdoc edit window git-svn-id: trunk@15302 - --- ide/codehelp.pas | 10 ++++++++++ ide/fpdoceditwindow.pas | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ide/codehelp.pas b/ide/codehelp.pas index 91bc9ef152..c0fb9480e7 100644 --- a/ide/codehelp.pas +++ b/ide/codehelp.pas @@ -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; diff --git a/ide/fpdoceditwindow.pas b/ide/fpdoceditwindow.pas index 1fa6c594ae..7a381b3684 100644 --- a/ide/fpdoceditwindow.pas +++ b/ide/fpdoceditwindow.pas @@ -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;