aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/store-api.cc28
1 files changed, 21 insertions, 7 deletions
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index 55083e834..4e1fb4bd5 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -803,17 +803,31 @@ StorePathSet Store::queryValidPaths(const StorePathSet & paths, SubstituteFlag m
auto doQuery = [&](const StorePath & path) {
checkInterrupt();
- auto state(state_.lock());
+
+ bool exists = false;
+ std::exception_ptr newExc{};
+
try {
- auto info = queryPathInfo(path);
- state->valid.insert(path);
+ queryPathInfo(path);
+ exists = true;
} catch (InvalidPath &) {
} catch (...) {
- state->exc = std::current_exception();
+ newExc = std::current_exception();
+ }
+
+ {
+ auto state(state_.lock());
+
+ if (exists) {
+ state->valid.insert(path);
+ }
+ if (newExc != nullptr) {
+ state->exc = newExc;
+ }
+ assert(state->left);
+ if (!--state->left)
+ wakeup.notify_one();
}
- assert(state->left);
- if (!--state->left)
- wakeup.notify_one();
};
for (auto & path : paths)