ADD: Save to cache dirty limit

This commit is contained in:
Alexander Koblov 2022-11-09 22:20:17 +03:00
commit 9955b928c8
2 changed files with 22 additions and 0 deletions

View file

@ -49,6 +49,7 @@ type
function Flush: Boolean;
function Read(var Buffer; Count: LongInt): LongInt; override;
function Write(const Buffer; Count: LongInt): LongInt; override;
property DirtyLimit: Int64 read FDirtyLimit write FDirtyLimit;
property AutoSync: Boolean read FAutoSync write SetAutoSync;
property FileName: String read FFileName;
end;

View file

@ -92,6 +92,13 @@ type
FFileExistsOption: TFileSourceOperationOptionFileExists;
FDirExistsOption: TFileSourceOperationOptionDirectoryExists;
{$IF DEFINED(LINUX)}
FCache: record
Device: QWord;
DirtyLimit: Int64
end;
{$ENDIF}
FCurrentFile: TFile;
FCurrentTargetFilePath: String;
@ -505,6 +512,7 @@ var
bDeleteFile: Boolean = False;
{$IFDEF LINUX}
Sbfs: TStatFS;
Info: BaseUnix.Stat;
{$ENDIF}
procedure OpenSourceFile;
@ -756,7 +764,16 @@ begin
begin
case UInt32(Sbfs.fstype) of
NFS_SUPER_MAGIC:
begin
TargetFileStream.AutoSync:= True;
if (fpFStat(TargetFileStream.Handle, Info) = 0) then
begin
if FCache.Device = QWord(Info.st_dev) then
TargetFileStream.DirtyLimit:= FCache.DirtyLimit
else
FCache.Device:= QWord(Info.st_dev);
end;
end;
end;
end;
{$ENDIF}
@ -899,6 +916,10 @@ begin
if FVerify then Context.Free;
if Assigned(TargetFileStream) then
begin
{$IF DEFINED(LINUX)}
if TargetFileStream.AutoSync then
FCache.DirtyLimit:= TargetFileStream.DirtyLimit;
{$ENDIF}
FreeAndNil(TargetFileStream);
if TotalBytesToRead > 0 then
begin