diff, prevent zombie proc + leak

This commit is contained in:
Basile Burg 2017-03-05 10:03:44 +01:00
parent e7ca586d77
commit 40505e9a58
No known key found for this signature in database
GPG Key ID: 1868039F415CB8CF
1 changed files with 27 additions and 20 deletions

View File

@ -35,30 +35,37 @@ begin
inherited create(nil);
p := TProcess.Create(self);
p.Executable:= 'diff' + exeExt;
try
p.Executable:= 'diff' + exeExt;
lbl.Caption:= 'The file: "' + fname2 + '" has been modified by another program.'
+ LineEnding + 'Use the following diff to decide if the content should be '
+ 'reloaded.';
lbl.Caption:= 'The file: "' + fname2 + '" has been modified by another program.'
+ LineEnding + 'Use the following diff to decide if the content should be '
+ 'reloaded.';
if exeInSysPath(p.Executable) then
begin
p.Parameters.Add('-u');
p.Parameters.Add(fname1);
p.Parameters.Add(fname2);
p.Options:= [poUsePipes];
p.ShowWindow:= swoHIDE;
p.Execute;
if exeInSysPath(p.Executable) then
begin
p.Parameters.Add('-u');
p.Parameters.Add(fname1);
p.Parameters.Add(fname2);
p.Options:= [poUsePipes];
p.ShowWindow:= swoHIDE;
p.Execute;
r := TStringList.Create;
try
processOutputToStrings(p,r);
editor.Lines.Assign(r);
finally
r.Free;
end;
r := TStringList.Create;
try
processOutputToStrings(p,r);
editor.Lines.Assign(r);
finally
r.Free;
end;
while p.Running do
sleep(1);
end
else editor.Lines.Add('(The "diff" tool cannot be found)');
finally
p.Free;
end
else editor.Lines.Add('(The "diff" tool cannot be found)');
end;
end.