Memory leaks fixed

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5697 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
gbamber
2017-01-25 09:33:15 +00:00
parent 7b7bf9aa54
commit ca3030d268
7 changed files with 440 additions and 360 deletions

View File

@ -23,10 +23,10 @@
<VersionInfo>
<UseVersionInfo Value="True"/>
<MinorVersionNr Value="1"/>
<RevisionNr Value="13"/>
<RevisionNr Value="14"/>
<StringTable CompanyName="minesadorada" FileDescription="Tray app that works with LazAutoUpdate apps" InternalName="lazautoupdater" LegalCopyright="LGPLv2" LegalTrademarks="(c)2014 Gordon Bamber" OriginalFilename="trayupdater" ProductName="Lazarus 1.x FPC 2.6.x" ProductVersion="0.1.11.2"/>
</VersionInfo>
<BuildModes Count="4">
<BuildModes Count="5">
<Item1 Name="Win32 Release" Default="True"/>
<Item2 Name="Win64 Release">
<CompilerOptions>
@ -101,6 +101,9 @@
</Linking>
<Other>
<CustomOptions Value="-FcUTF8"/>
<OtherDefines Count="1">
<Define0 Value="DEBUGMODE"/>
</OtherDefines>
</Other>
</CompilerOptions>
</Item3>
@ -143,6 +146,58 @@
</Other>
</CompilerOptions>
</Item4>
<Item5 Name="Win64 Debug">
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="compiled\win64debug\lautraynotifywin64"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<OtherUnitFiles Value="..\packagesource"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<IncludeAssertionCode Value="True"/>
</SyntaxOptions>
</Parsing>
<CodeGeneration>
<SmartLinkUnit Value="True"/>
<Checks>
<IOChecks Value="True"/>
<RangeChecks Value="True"/>
<OverflowChecks Value="True"/>
<StackChecks Value="True"/>
</Checks>
<VerifyObjMethodCallValidity Value="True"/>
<TargetCPU Value="x86_64"/>
<TargetOS Value="win64"/>
<Optimizations>
<OptimizationLevel Value="3"/>
</Optimizations>
</CodeGeneration>
<Linking>
<Debugging>
<UseHeaptrc Value="True"/>
</Debugging>
<LinkSmart Value="True"/>
<Options>
<Win32>
<GraphicApplication Value="True"/>
</Win32>
</Options>
</Linking>
<Other>
<CustomOptions Value="-FcUTF8
-dDEBUGMODE"/>
<OtherDefines Count="1">
<Define0 Value="DEBUGMODE"/>
</OtherDefines>
</Other>
</CompilerOptions>
</Item5>
</BuildModes>
<PublishOptions>
<Version Value="2"/>

View File

@ -3,16 +3,17 @@
<ProjectSession>
<PathDelim Value="\"/>
<Version Value="10"/>
<BuildModes Active="Win64 Release"/>
<BuildModes Active="Win64 Debug"/>
<Units Count="30">
<Unit0>
<Filename Value="trayupdater.lpr"/>
<IsPartOfProject Value="True"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="2"/>
<WindowIndex Value="1"/>
<TopLine Value="21"/>
<CursorPos X="58" Y="41"/>
<UsageCount Value="181"/>
<TopLine Value="3"/>
<CursorPos X="19" Y="10"/>
<UsageCount Value="182"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
@ -21,14 +22,18 @@
<ComponentName Value="mainform"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/>
<WindowIndex Value="1"/>
<TopLine Value="540"/>
<CursorPos X="50" Y="552"/>
<CursorPos Y="23"/>
<ExtraEditorCount Value="1"/>
<ExtraEditor1>
<IsVisibleTab Value="True"/>
<TopLine Value="92"/>
<CursorPos X="52" Y="119"/>
</ExtraEditor1>
<ComponentState Value="1"/>
<UsageCount Value="181"/>
<UsageCount Value="182"/>
<Bookmarks Count="1">
<Item0 X="3" Y="480" ID="2"/>
<Item0 X="3" Y="481" ID="2"/>
</Bookmarks>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
@ -41,9 +46,8 @@
<ResourceBaseClass Value="Form"/>
<EditorIndex Value="3"/>
<WindowIndex Value="1"/>
<TopLine Value="150"/>
<CursorPos X="37" Y="224"/>
<UsageCount Value="177"/>
<CursorPos X="2" Y="22"/>
<UsageCount Value="178"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
</Unit2>
@ -251,126 +255,129 @@
<OtherDefines Count="1">
<Define0 Value="DEBUGMODE"/>
</OtherDefines>
<General>
<ActiveWindowIndexAtStart Value="1"/>
</General>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="trayupdater.lpr"/>
<Caret Line="63" TopLine="14"/>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Column="17"/>
</Position1>
<Position2>
<Filename Value="trayupdater.lpr"/>
<Caret Line="57" Column="30" TopLine="19"/>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="852" Column="20" TopLine="814"/>
</Position2>
<Position3>
<Filename Value="umainform.pas"/>
<Caret Line="593" Column="31" TopLine="587"/>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="932" Column="16" TopLine="894"/>
</Position3>
<Position4>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1482" Column="40" TopLine="1460"/>
<Caret Line="1120" Column="18" TopLine="1083"/>
</Position4>
<Position5>
<Filename Value="umainform.pas"/>
<Caret Line="137" TopLine="109"/>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1327" Column="18" TopLine="1290"/>
</Position5>
<Position6>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="2296" Column="87" TopLine="2285"/>
<Caret Line="1460" Column="16" TopLine="1422"/>
</Position6>
<Position7>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Column="17"/>
<Caret Line="1528" Column="16" TopLine="1490"/>
</Position7>
<Position8>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="852" Column="20" TopLine="814"/>
<Caret Line="1572" Column="20" TopLine="1535"/>
</Position8>
<Position9>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="932" Column="16" TopLine="894"/>
<Caret Line="1611" Column="20" TopLine="1573"/>
</Position9>
<Position10>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1120" Column="18" TopLine="1083"/>
<Caret Line="1696" Column="16" TopLine="1659"/>
</Position10>
<Position11>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1327" Column="18" TopLine="1290"/>
<Caret Line="1729" Column="20" TopLine="1692"/>
</Position11>
<Position12>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1460" Column="16" TopLine="1422"/>
<Caret Line="1820" Column="22" TopLine="1783"/>
</Position12>
<Position13>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1528" Column="16" TopLine="1490"/>
<Caret Line="1857" Column="25" TopLine="1820"/>
</Position13>
<Position14>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1572" Column="20" TopLine="1535"/>
<Caret Line="1892" Column="27" TopLine="1855"/>
</Position14>
<Position15>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1611" Column="20" TopLine="1573"/>
<Caret Line="1976" Column="22" TopLine="1939"/>
</Position15>
<Position16>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1696" Column="16" TopLine="1659"/>
<Caret Line="2030" Column="25" TopLine="1993"/>
</Position16>
<Position17>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1729" Column="20" TopLine="1692"/>
<Caret Line="2071" Column="27" TopLine="2034"/>
</Position17>
<Position18>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1820" Column="22" TopLine="1783"/>
<Filename Value="umainform.pas"/>
<Caret Line="407" Column="36" TopLine="386"/>
</Position18>
<Position19>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1857" Column="25" TopLine="1820"/>
<Filename Value="umainform.pas"/>
<Caret Line="496" Column="46" TopLine="468"/>
</Position19>
<Position20>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1892" Column="27" TopLine="1855"/>
<Filename Value="umainform.pas"/>
<Caret Line="497" Column="37" TopLine="468"/>
</Position20>
<Position21>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="1976" Column="22" TopLine="1939"/>
<Filename Value="umainform.pas"/>
<Caret Line="502" Column="46" TopLine="468"/>
</Position21>
<Position22>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="2030" Column="25" TopLine="1993"/>
<Filename Value="umainform.pas"/>
<Caret Line="73" Column="12" TopLine="50"/>
</Position22>
<Position23>
<Filename Value="..\ulazautoupdate.pas"/>
<Caret Line="2071" Column="27" TopLine="2034"/>
<Filename Value="umainform.pas"/>
<Caret Line="563" Column="9" TopLine="540"/>
</Position23>
<Position24>
<Filename Value="umainform.pas"/>
<Caret Line="407" Column="36" TopLine="386"/>
<Caret Line="572" Column="15" TopLine="540"/>
</Position24>
<Position25>
<Filename Value="umainform.pas"/>
<Caret Line="496" Column="46" TopLine="468"/>
<Caret Line="735" Column="27" TopLine="715"/>
</Position25>
<Position26>
<Filename Value="umainform.pas"/>
<Caret Line="497" Column="37" TopLine="468"/>
<Caret Line="77" Column="73" TopLine="50"/>
</Position26>
<Position27>
<Filename Value="umainform.pas"/>
<Caret Line="502" Column="46" TopLine="468"/>
<Caret Line="664" Column="3" TopLine="677"/>
</Position27>
<Position28>
<Filename Value="umainform.pas"/>
<Caret Line="73" Column="12" TopLine="50"/>
<Caret Line="746" Column="26" TopLine="715"/>
</Position28>
<Position29>
<Filename Value="umainform.pas"/>
<Caret Line="563" Column="9" TopLine="540"/>
<Filename Value="trayupdater.lpr"/>
<Caret Line="36" Column="30" TopLine="21"/>
</Position29>
<Position30>
<Filename Value="umainform.pas"/>
<Caret Line="572" Column="15" TopLine="540"/>
<Caret Line="743" Column="48" TopLine="719"/>
</Position30>
</JumpHistory>
</ProjectSession>

View File

@ -172,7 +172,6 @@ object configform: Tconfigform
ClientHeight = 223
ClientWidth = 600
TabOrder = 1
OnClick = grp_updateintervalClick
object cmd_Close: TBitBtn
Left = 228
Height = 30

View File

@ -1,18 +1,38 @@
unit uconfigform;
{ LazAutoUpdater Tray Updater
Copyright (C)2014 Gordon Bamber minesadorada@charcodelvalle.com
An example of using LazAutoUpdate as a silent updater
This source is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option)
any later version.
This code is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
A copy of the GNU General Public License is available on the World Wide Web
at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by writing
to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA.
}
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Dialogs, Buttons,
StdCtrls, EditBtn;
SysUtils, Forms, Controls, Dialogs, Buttons,
StdCtrls, EditBtn;
type
{ Tconfigform }
{ Tconfigform }
Tconfigform = class(TForm)
Tconfigform = class(TForm)
cmd_DeleteAppProfile: TButton;
cmd_SaveChanges: TBitBtn;
chk_Update: TCheckBox;
@ -53,25 +73,24 @@ Tconfigform = class(TForm)
procedure cmb_IntervalTypeChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure grp_updateintervalClick(Sender: TObject);
private
private
{ private declarations }
procedure DoInitialiseCombobox;
procedure DoDisplayProfile(AIndex: integer);
procedure DoSaveAllChanges;
procedure DoEnableDisableIntervalCombos;
public
public
{ public declarations }
bDetailsChanged: boolean;
end;
end;
var
configform : Tconfigform;
configform: Tconfigform;
implementation
uses
umainform;
umainform;
{$R *.lfm}
@ -164,7 +183,7 @@ end;
procedure Tconfigform.chk_UpdateClick(Sender: TObject);
begin
mainform.AppRecArray[cmb_AppProfile.ItemIndex].Update := chk_Update.Checked;
// mainform.LongTimerArray[cmb_AppProfile.ItemIndex].Enabled := chk_Update.Checked;
// mainform.LongTimerArray[cmb_AppProfile.ItemIndex].Enabled := chk_Update.Checked;
end;
procedure Tconfigform.cmb_AppProfileClick(Sender: TObject);
@ -187,8 +206,8 @@ procedure Tconfigform.cmd_DeleteAppProfileClick(Sender: TObject);
// Copy the temp copy back to AppRecArray
// Delete the INIFile section
var
TempAppRecArray : array of TAppRec;
i, iLastIndex : integer;
TempAppRecArray: array of TAppRec;
i, iLastIndex: integer;
begin
if High(mainform.AppRecArray) = 0 then
begin
@ -225,8 +244,8 @@ end;
procedure Tconfigform.cmd_NewAppProfileClick(Sender: TObject);
var
szProfileName : string;
iLastIndex : integer;
szProfileName: string;
iLastIndex: integer;
begin
if InputQuery('New Profile', 'New Profile', False, szProfileName) then
begin
@ -253,7 +272,7 @@ end;
procedure Tconfigform.DoInitialiseCombobox;
var
i : integer;
i: integer;
begin
if (Length(mainform.AppRecArray) = 0) then
begin
@ -280,9 +299,4 @@ begin
bDetailsChanged := False;
end;
procedure Tconfigform.grp_updateintervalClick(Sender: TObject);
begin
end;
end.

View File

@ -7,7 +7,6 @@ object mainform: Tmainform
Caption = 'mainform'
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnShow = FormShow
OnWindowStateChange = FormWindowStateChange
Position = poScreenCenter
ShowInTaskBar = stNever
@ -80,7 +79,7 @@ object mainform: Tmainform
Left = 128
Top = 16
end
object EventLog1: TEventLog
object Logger: TEventLog
AppendContent = False
LogType = ltFile
Active = False

View File

@ -39,19 +39,21 @@ VERSION HISTORY
0.1.12: Commit to svn
0.1.13: Updated January 2017
Ini filename uses C_PFX
0.1.14: Memory leaks fixed
0.1.15: ??
}
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LazFileUtils,Forms, Controls, Graphics, Dialogs, ExtCtrls,
Menus, uLongTimer, ulazautoupdate, inifiles, eventlog, strUtils, uconfigform
Classes, SysUtils, FileUtil, LazFileUtils, Forms, Dialogs, ExtCtrls,
Menus, uLongTimer, ulazautoupdate, inifiles, eventlog, strUtils, uconfigform
{$IFDEF WINDOWS}, registry{$ENDIF};
type
{ TAppRec - in-memory storage for all settings }
TAppRec = record
{ TAppRec - in-memory storage for all settings }
TAppRec = record
AppPrettyName: string;
AppPath: string;
INIPath: string;
@ -66,10 +68,10 @@ TAppRec = record
IntervalHour: word;
Update: boolean;
LastCheckDateTime: TDateTime;
end;
end;
{ Tmainform }
Tmainform = class(TForm)
{ Tmainform }
Tmainform = class(TForm)
Logger: TEventLog;
idleReminder: TIdleTimer;
LazAutoUpdate1: TLazAutoUpdate;
@ -82,7 +84,6 @@ Tmainform = class(TForm)
TrayIcon1: TTrayIcon;
procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormWindowStateChange(Sender: TObject);
procedure idleReminderTimer(Sender: TObject);
procedure LazAutoUpdate1DebugEvent(Sender: TObject; WhereAt, Message: string);
@ -95,7 +96,7 @@ Tmainform = class(TForm)
function UT_DateTimeToStr(TheDate: TDateTime): string;
function UT_StrToDate(str: string): TDateTime;
private
private
{ private declarations }
szImportINIPath: string;
DebugMode: boolean;
@ -112,7 +113,7 @@ private
procedure DoLongTimerEvent(Sender: TObject);
// Do a silent check/install for this AppRecArray member
procedure CheckAndUpdate(ARecIndex: integer);
public
public
{ public declarations }
INI: TIniFile;
AppRecArray: array of TAppRec; // Dynamic array
@ -120,12 +121,12 @@ public
iCurrentRecIndex: integer;
// Transfers info from AppRecArray to local INI
procedure DoWriteAppRecArrayIntoINI;
end;
end;
var
mainform : Tmainform;
mainform: Tmainform;
Const
const
{$IFDEF WINDOWS}
C_OS = 'win';
{$ELSE}
@ -137,16 +138,16 @@ Const
C_BITNESS = '64';
{$ENDIF}
C_PFX = C_OS + C_BITNESS;
C_LAUTRayINI = 'lauimport.ini';
C_INIFilename = 'trayupdater' + C_PFX + '.ini';
C_LAUTRayINI = 'lauimport.ini';
C_INIFilename = 'trayupdater' + C_PFX + '.ini';
implementation
resourcestring
rs_balloontitle = '%s service';
rs_trayloaded = '%s Loaded';
rs_newversionavailable = 'A new version of %s (v%s) is available';
rs_balloontitle = '%s service';
rs_trayloaded = '%s Loaded';
rs_newversionavailable = 'A new version of %s (v%s) is available';
// TODO: Put all the other strings here
{$R *.lfm}
@ -154,8 +155,8 @@ rs_newversionavailable = 'A new version of %s (v%s) is available';
procedure Tmainform.DoWriteAppRecArrayIntoINI;
// AppRecArray is an in-memory copy of the INI file
var
i : integer;
szSection : string;
i: integer;
szSection: string;
begin
if High(AppRecArray) = 0 then
Exit;
@ -192,7 +193,7 @@ procedure Tmainform.DoLongTimerEvent(Sender: TObject);
// All LongTimerArray.OnTimer events go here
// The Tag property is the same as the AppRecArray entry it relates to
var
iTag : integer;
iTag: integer;
begin
iTag := 0;
// Assertion check
@ -217,7 +218,7 @@ procedure Tmainform.DoSetupLongTimerArray;
// 2. Iterate through the AppRecArray, setting up a new LongTimer for each element
// 3. Enable the LongTimers for which AppArray.Update=TRUE
var
i, iArrayElement : integer;
i, iArrayElement: integer;
begin
// Start with an empty array
for i := Low(LongTimerArray) to High(LongTimerArray) do
@ -262,7 +263,7 @@ end;
function Tmainform.UT_DateTimeToStr(TheDate: TDateTime): string;
var
frmstg : TFormatSettings;
frmstg: TFormatSettings;
// Ensures consitent String dates across platforms
begin
//GetLocaleFormatSettings(0, frmstg);
@ -275,7 +276,7 @@ end;
function Tmainform.UT_StrToDate(str: string): TDateTime;
var
frmstg : TFormatSettings;
frmstg: TFormatSettings;
// Ensures consitent String dates across platforms
begin
//GetLocaleFormatSettings(0, frmstg);
@ -290,9 +291,9 @@ end;
procedure Tmainform.DoReadINIIntoAppRecArray;
// AppRecArray is an in-memory copy of the INI file
var
SectionStringList : TStringList;
szSection : string;
i, iArrayElement : integer;
SectionStringList: TStringList;
szSection: string;
i, iArrayElement: integer;
begin
SetLength(AppRecArray, 0); // Zeros the array
SectionStringList := TStringList.Create;
@ -354,7 +355,7 @@ end;
procedure Tmainform.PopulateOwnProfile;
// Only called when app is first run
var
szSection, szOSsuffix : string;
szSection, szOSsuffix: string;
begin
szSection := Application.Title;
szOSsuffix := LowerCase(
@ -399,10 +400,10 @@ function Tmainform.ImportINIFile: boolean;
// Sets Update=TRUE
// into C_INIFilename then deletes source ini
var
ImportINI : TIniFile;
SectionStringList, SectionContents : TStringList;
i : integer;
szSection, szKey, szLocation, szAppPath : string;
ImportINI: TIniFile;
SectionStringList, SectionContents: TStringList;
i: integer;
szSection, szKey, szLocation, szAppPath: string;
begin
{TODO: Preserve user Logtimer settings?}
Result := False;
@ -513,7 +514,7 @@ end;
procedure Tmainform.mnu_AboutClick(Sender: TObject);
var
sz : string;
sz: string;
begin
LazAutoUpdate1.ResetAppVersion;
sz := Application.Title + ' system tray application' + LineEnding;
@ -547,7 +548,7 @@ end;
procedure Tmainform.mnu_startAtOSStartUpClick(Sender: TObject);
{$IFDEF WINDOWS}
var
Reg : TRegistry;
Reg: TRegistry;
{$ENDIF}
begin
{$IFDEF WINDOWS}
@ -665,13 +666,15 @@ begin
DebugMode := True
else
DebugMode := False;
{$IFDEF DEBUGMODE}DebugMode := True;{$ENDIF}
{$IFDEF DEBUGMODE}
DebugMode := True;
{$ENDIF}
// Initialise the App's main INI file
Try
try
INI := TIniFile.Create(GetAppConfigDirUTF8(False) + C_INIFilename);
Except
except
sleep(4000);
If (INI = Nil) then
if (INI = nil) then
INI := TIniFile.Create(GetAppConfigDirUTF8(False) + C_INIFilename);
end;
INI.CacheUpdates := False;
@ -702,7 +705,8 @@ begin
// Logger.Identification := Application.Title;
// Fetch the location of any trayicon INI on the users system
szImportINIPath := GetAppConfigDirUTF8(False, True);
szImportINIPath := AnsiReplaceText(szImportINIPath, Application.Title, 'updatehm' + C_PFX);
szImportINIPath := AnsiReplaceText(szImportINIPath, Application.Title,
'updatehm' + C_PFX);
szImportINIPath := AppendPathDelim(szImportINIPath) + C_LAUTRayINI;
if DebugMode then
Logger.Debug('szImportINIPath=' + szImportINIPath);
@ -724,13 +728,9 @@ begin
mnu_SelfCheck.Visible := DebugMode;
end;
procedure Tmainform.FormShow(Sender: TObject);
begin
end;
procedure Tmainform.FormCloseQuery(Sender: TObject; var CanClose: boolean);
var
i : integer;
i: integer;
begin
if LazAutoUpdate1.DownloadInprogress then
begin
@ -738,11 +738,14 @@ begin
CanClose := False;
end
else
// Clean up memory No leaks (V0.1.14)
begin
if DebugMode then
begin
Logger.Log('User closed application');
if DebugMode then
Logger.Active := False;
FreeAndNil(Logger);
end;
CanClose := True;
end;
if CanClose then
@ -754,6 +757,9 @@ begin
LongTimerArray[i].Enabled := False;
FreeAndNil(LongTimerArray[i]);
end;
SetLength(AppRecArray, 0);
FreeAndNil(AppRecArray);
FreeAndNil(INI);
end;
end;