mirror of https://gitlab.com/basile.b/dexed.git
fix some leaks created by the marks and D-Scanner process wrapper
This commit is contained in:
parent
c257cb4284
commit
81aab07a83
|
@ -200,7 +200,14 @@ begin
|
||||||
fTerminateChecker.Enabled := false;
|
fTerminateChecker.Enabled := false;
|
||||||
if fDoneTerminated then exit;
|
if fDoneTerminated then exit;
|
||||||
fDoneTerminated := true;
|
fDoneTerminated := true;
|
||||||
//
|
|
||||||
|
// TODO-cbugfix: check that manual unhooking isn't an issue
|
||||||
|
// note: made to fix a leak in the process used by the linter
|
||||||
|
// onTerminate is sometimes determined by an internal timer
|
||||||
|
// and not the base method of TAsyncProcess (which usually unhooks)
|
||||||
|
UnhookPipeHandle;
|
||||||
|
UnhookProcessHandle;
|
||||||
|
|
||||||
fillOutputStack;
|
fillOutputStack;
|
||||||
if fRealOnTerminate <> nil then
|
if fRealOnTerminate <> nil then
|
||||||
fRealOnTerminate(self);
|
fRealOnTerminate(self);
|
||||||
|
|
|
@ -2277,7 +2277,7 @@ var
|
||||||
begin
|
begin
|
||||||
for i:= 0 to fList.Count-1 do
|
for i:= 0 to fList.Count-1 do
|
||||||
dispose(PDscannerResult(fList[i]));
|
dispose(PDscannerResult(fList[i]));
|
||||||
fList.Clear
|
fList.Clear;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TDscannerResults.push(const warning: string; line, column: integer);
|
procedure TDscannerResults.push(const warning: string; line, column: integer);
|
||||||
|
@ -2306,11 +2306,9 @@ begin
|
||||||
fDscannerTimer.Interval:=dsDelay;
|
fDscannerTimer.Interval:=dsDelay;
|
||||||
fDscannerEnabled := dsEnabled;
|
fDscannerEnabled := dsEnabled;
|
||||||
if not dsEnabled then
|
if not dsEnabled then
|
||||||
begin
|
removeDscannerWarnings
|
||||||
removeDscannerWarnings;
|
else
|
||||||
fDscannerResults.clear;
|
dscannerTimerEvent(nil);
|
||||||
end
|
|
||||||
else dscannerTimerEvent(nil);
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TCESynMemo.dscannerTimerEvent(sender: TObject);
|
procedure TCESynMemo.dscannerTimerEvent(sender: TObject);
|
||||||
|
@ -2321,9 +2319,7 @@ begin
|
||||||
or not fCanDscan then
|
or not fCanDscan then
|
||||||
exit;
|
exit;
|
||||||
|
|
||||||
fDscannerResults.clear;
|
|
||||||
removeDscannerWarnings;
|
removeDscannerWarnings;
|
||||||
Repaint();
|
|
||||||
fCanDscan := false;
|
fCanDscan := false;
|
||||||
fDScanner.execute;
|
fDScanner.execute;
|
||||||
s := Lines.strictText;
|
s := Lines.strictText;
|
||||||
|
@ -2356,7 +2352,6 @@ var
|
||||||
s: string;
|
s: string;
|
||||||
m: TStringList;
|
m: TStringList;
|
||||||
begin
|
begin
|
||||||
removeDscannerWarnings;
|
|
||||||
m := TStringList.Create;
|
m := TStringList.Create;
|
||||||
try
|
try
|
||||||
fDscanner.getFullLines(m);
|
fDscanner.getFullLines(m);
|
||||||
|
@ -2373,10 +2368,18 @@ end;
|
||||||
procedure TCESynMemo.removeDscannerWarnings;
|
procedure TCESynMemo.removeDscannerWarnings;
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
|
n: TSynEditMark;
|
||||||
begin
|
begin
|
||||||
|
IncPaintLock;
|
||||||
|
fDscannerResults.clear;
|
||||||
for i:= Marks.Count-1 downto 0 do
|
for i:= Marks.Count-1 downto 0 do
|
||||||
if marks.Items[i].ImageIndex = longint(giWarn) then
|
if marks.Items[i].ImageIndex = longint(giWarn) then
|
||||||
|
begin
|
||||||
|
n := marks.Items[i];
|
||||||
marks.Delete(i);
|
marks.Delete(i);
|
||||||
|
FreeAndNil(n);
|
||||||
|
end;
|
||||||
|
DecPaintLock;
|
||||||
repaint;
|
repaint;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -3084,11 +3087,13 @@ procedure TCESynMemo.removeDebugTimeMarks;
|
||||||
var
|
var
|
||||||
i: integer;
|
i: integer;
|
||||||
begin
|
begin
|
||||||
|
IncPaintLock;
|
||||||
for i:= marks.Count-1 downto 0 do
|
for i:= marks.Count-1 downto 0 do
|
||||||
begin
|
begin
|
||||||
if TGutterIcon(Marks.Items[i].ImageIndex) in debugTimeGutterIcons then
|
if TGutterIcon(Marks.Items[i].ImageIndex) in debugTimeGutterIcons then
|
||||||
Marks.Delete(i);
|
Marks.Delete(i);
|
||||||
end;
|
end;
|
||||||
|
DecPaintLock;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCESynMemo.findBreakPoint(line: integer): boolean;
|
function TCESynMemo.findBreakPoint(line: integer): boolean;
|
||||||
|
@ -3143,7 +3148,10 @@ begin
|
||||||
begin
|
begin
|
||||||
n := m.Items[i];
|
n := m.Items[i];
|
||||||
if n.ImageIndex = longint(value) then
|
if n.ImageIndex = longint(value) then
|
||||||
|
begin
|
||||||
m.Delete(i);
|
m.Delete(i);
|
||||||
|
FreeAndNil(n);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
Repaint;
|
Repaint;
|
||||||
end;
|
end;
|
||||||
|
|
Loading…
Reference in New Issue