diff --git a/cs/sdk/src/Proton.Drive.Sdk/Nodes/TransferQueue.cs b/cs/sdk/src/Proton.Drive.Sdk/Nodes/TransferQueue.cs index ead6b27c..f1b2e853 100644 --- a/cs/sdk/src/Proton.Drive.Sdk/Nodes/TransferQueue.cs +++ b/cs/sdk/src/Proton.Drive.Sdk/Nodes/TransferQueue.cs @@ -86,7 +86,10 @@ internal sealed partial class TransferQueue(int maxDegreeOfParallelism, ILogger return queuePosition; } - public void SetFileTotalBlockCount(long queueToken, int total) + /// + /// Increases the total and remaining block counts for a file if the given total is greater than the current one. + /// + public void ApplyFileMinimumTotalBlockCount(long queueToken, int total) { lock (_fileBlocksLock) { @@ -95,16 +98,14 @@ internal sealed partial class TransferQueue(int maxDegreeOfParallelism, ILogger : throw new InvalidOperationException($"Queue token {queueToken} not found in transfer queue."); var delta = total - currentTotal; + if (delta <= 0) + { + return; + } - if (delta > 0) - { - FileQueueSemaphore.DecreaseCount(delta); - LogDecreasedFileQueueSemaphoreCount(delta, FileQueueSemaphore.CurrentCount); - } - else - { - RemoveBlocksFromFileQueue(-delta); - } + FileQueueSemaphore.DecreaseCount(delta); + + LogDecreasedFileQueueSemaphoreCount(delta, FileQueueSemaphore.CurrentCount); _fileBlocks[queueToken] = (currentRemaining + delta, total); } diff --git a/cs/sdk/src/Proton.Drive.Sdk/Nodes/Upload/RevisionWriter.cs b/cs/sdk/src/Proton.Drive.Sdk/Nodes/Upload/RevisionWriter.cs index b5df09b2..e36bdba6 100644 --- a/cs/sdk/src/Proton.Drive.Sdk/Nodes/Upload/RevisionWriter.cs +++ b/cs/sdk/src/Proton.Drive.Sdk/Nodes/Upload/RevisionWriter.cs @@ -399,7 +399,7 @@ internal sealed partial class RevisionWriter currentBlockNumber = newBlockNumber; - _client.UploadQueue.SetFileTotalBlockCount(_queueToken, currentBlockNumber.Value + expectedThumbnailBlockCount); + _client.UploadQueue.ApplyFileMinimumTotalBlockCount(_queueToken, currentBlockNumber.Value + expectedThumbnailBlockCount); // ReSharper disable once PossiblyMistakenUseOfCancellationToken await WaitForBlockUploaderAsync(uploadTasks, cancellationToken).ConfigureAwait(false);