|
@@ -343,6 +343,7 @@ var
|
|
lockop: cint;
|
|
lockop: cint;
|
|
lockres: cint;
|
|
lockres: cint;
|
|
closeres: cint;
|
|
closeres: cint;
|
|
|
|
+ lockerr: cint;
|
|
begin
|
|
begin
|
|
DoFileLocking:=Handle;
|
|
DoFileLocking:=Handle;
|
|
{$ifdef beos}
|
|
{$ifdef beos}
|
|
@@ -392,7 +393,13 @@ begin
|
|
lockres:=fpflock(Handle,lockop);
|
|
lockres:=fpflock(Handle,lockop);
|
|
until (lockres=0) or
|
|
until (lockres=0) or
|
|
(fpgeterrno<>ESysEIntr);
|
|
(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
|
|
begin
|
|
repeat
|
|
repeat
|
|
closeres:=FpClose(Handle);
|
|
closeres:=FpClose(Handle);
|