diff options
Diffstat (limited to 'src/zenstore/compactcas.cpp')
| -rw-r--r-- | src/zenstore/compactcas.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/zenstore/compactcas.cpp b/src/zenstore/compactcas.cpp index 26af5b4b1..e1f17fbb9 100644 --- a/src/zenstore/compactcas.cpp +++ b/src/zenstore/compactcas.cpp @@ -1664,19 +1664,21 @@ TEST_CASE("compactcas.threadedinsert") HashKeySet Deleted; GcStats Stats; GcStoreCompactor* Compactor = - Pruner->RemoveUnreferencedData(Ctx, Stats, [&](std::span<IoHash> References) -> std::span<IoHash> { - std::vector<IoHash> Unreferenced; - HashKeySet Retain; + Pruner->RemoveUnreferencedData(Ctx, Stats, [&](const std::span<IoHash> References) -> std::span<IoHash> { + HashKeySet Retain; Retain.AddHashesToSet(KeepHashes); + + auto WriteIt = References.begin(); for (const IoHash& ChunkHash : References) { if (!Retain.ContainsHash(ChunkHash)) { - Unreferenced.push_back(ChunkHash); + *WriteIt++ = ChunkHash; } } - Deleted.AddHashesToSet(Unreferenced); - return Unreferenced; + const std::span<IoHash> UnusedReferences = References.subspan(0, std::distance(References.begin(), WriteIt)); + Deleted.AddHashesToSet(UnusedReferences); + return UnusedReferences; }); if (Compactor) { |