* only return an error if locking a file fails when the file is already

locked, but not when another error occurs (such as EsysNOLCK, because
    this error may always be returned if the kernel doesn't support
    locking, in which case programs such as fpcmake no longer work on
    such systems)

git-svn-id: trunk@14350 -
This commit is contained in:
Jonas Maebe 2009-12-07 13:30:19 +00:00
parent 4fd2aa297a
commit 722d48c8c2

View File

@ -343,6 +343,7 @@ var
lockop: cint;
lockres: cint;
closeres: cint;
lockerr: cint;
begin
DoFileLocking:=Handle;
{$ifdef beos}
@ -392,7 +393,13 @@ begin
lockres:=fpflock(Handle,lockop);
until (lockres=0) or
(fpgeterrno<>ESysEIntr);
if (lockres<>0) then
lockerr:=fpgeterrno;
{ Only return an error if locks are working and the file was already
locked. Not if locks are simply unsupported (e.g., on Angstrom Linux
you always get ESysNOLCK in the default configuration) }
if (lockres<>0) and
((lockerr=ESysEAGAIN) or
(lockerr=EsysEDEADLK)) then
begin
repeat
closeres:=FpClose(Handle);