aboutsummaryrefslogtreecommitdiff
path: root/src/zen/cmds/builds_cmd.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-04-11 19:22:21 +0200
committerGitHub Enterprise <[email protected]>2025-04-11 19:22:21 +0200
commitdec3f27c488a1dda8a2f1133361e2fda9315e0d2 (patch)
tree0aec5d833245bb5d65a84a65a1e4deda3241d222 /src/zen/cmds/builds_cmd.cpp
parentxmake updatefrontend (diff)
downloadarchived-zen-dec3f27c488a1dda8a2f1133361e2fda9315e0d2.tar.xz
archived-zen-dec3f27c488a1dda8a2f1133361e2fda9315e0d2.zip
fix race condition in multipart download (#358)
Diffstat (limited to 'src/zen/cmds/builds_cmd.cpp')
-rw-r--r--src/zen/cmds/builds_cmd.cpp26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/zen/cmds/builds_cmd.cpp b/src/zen/cmds/builds_cmd.cpp
index f7f9e3abb..cdcd79f58 100644
--- a/src/zen/cmds/builds_cmd.cpp
+++ b/src/zen/cmds/builds_cmd.cpp
@@ -1843,25 +1843,25 @@ namespace {
BuildId,
ChunkHash,
PreferredMultipartChunkSize,
- [Workload, &DownloadStats, OnDownloadComplete = std::move(OnDownloadComplete)](uint64_t Offset,
- const IoBuffer& Chunk,
- uint64_t BytesRemaining) {
+ [Workload, &DownloadStats](uint64_t Offset, const IoBuffer& Chunk) {
DownloadStats.DownloadedChunkByteCount += Chunk.GetSize();
if (!AbortFlag.load())
{
ZEN_TRACE_CPU("DownloadLargeBlob_Save");
Workload->TempFile.Write(Chunk.GetView(), Offset);
- if (Chunk.GetSize() == BytesRemaining)
- {
- DownloadStats.DownloadedChunkCount++;
- uint64_t PayloadSize = Workload->TempFile.FileSize();
- void* FileHandle = Workload->TempFile.Detach();
- ZEN_ASSERT(FileHandle != nullptr);
- IoBuffer Payload(IoBuffer::File, FileHandle, 0, PayloadSize, true);
- Payload.SetDeleteOnClose(true);
- OnDownloadComplete(std::move(Payload));
- }
+ }
+ },
+ [Workload, &DownloadStats, OnDownloadComplete = std::move(OnDownloadComplete)]() {
+ DownloadStats.DownloadedChunkCount++;
+ if (!AbortFlag.load())
+ {
+ uint64_t PayloadSize = Workload->TempFile.FileSize();
+ void* FileHandle = Workload->TempFile.Detach();
+ ZEN_ASSERT(FileHandle != nullptr);
+ IoBuffer Payload(IoBuffer::File, FileHandle, 0, PayloadSize, true);
+ Payload.SetDeleteOnClose(true);
+ OnDownloadComplete(std::move(Payload));
}
});
if (!WorkItems.empty())