aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Jackson <patrick@jackson.dev>2023-03-30 18:05:53 -0700
committerPatrick Jackson <patrick@jackson.dev>2023-03-30 18:06:27 -0700
commit804180ad52cc855a77bc7901c033e1f441b65cdc (patch)
tree70d0a7b10f357f8cf4dcc8a4d347945cf2448831
parent309753ebb5f4d1cae64554fac8d4e49c2c28884c (diff)
Only lock once
-rw-r--r--src/libstore/store-api.cc7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index 6233768df..3cf4c801b 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -1103,7 +1103,7 @@ std::map<StorePath, StorePath> copyPaths(
};
// total is accessed by each copy, which are each handled in separate threads
- Sync<uint64_t> total = 0;
+ Sync<uint64_t> _total = 0;
for (auto & missingPath : sortedMissing) {
auto info = srcStore.queryPathInfo(missingPath);
@@ -1126,8 +1126,9 @@ std::map<StorePath, StorePath> copyPaths(
PushActivity pact(act.id);
LambdaSink progressSink([&](std::string_view data) {
- *total.lock() += data.size();
- act.progress(*total.lock(), info->narSize);
+ auto total(_total.lock());
+ *total += data.size();
+ act.progress(*total, info->narSize);
});
TeeSink tee { sink, progressSink };