* SimpleIPC, avoid stale server state files (Unix). Patch by Andrew, Mantis #21289

git-svn-id: trunk@20385 -
This commit is contained in:
marco 2012-02-20 11:17:02 +00:00
parent 48d780b920
commit 99892a7e45

View File

@ -155,8 +155,27 @@ begin
end;
function TPipeClientComm.ServerRunning: Boolean;
var
fd: cint;
begin
Result:=FileExists(FFileName);
// it's possible to have a stale file that is not open for reading which will
// cause fpOpen to hang/block later when .Active is set to true while it
// wait's for the pipe to be opened on the other end
if Result then
begin
// O_WRONLY | O_NONBLOCK causes fpOpen to return -1 if the file is not open for reading
// so in fact the 'server' is not running
fd := FpOpen(FFileName, O_WRONLY or O_NONBLOCK);
if fd = -1 then
begin
Result := False;
// delete the named pipe since it's orphaned
FpUnlink(FFileName);
end
else
FpClose(fd);
end;
end;
@ -282,4 +301,4 @@ initialization
Finalization
IPCDone;
end.
{$endif}
{$endif}