aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/misc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore/misc.cc')
-rw-r--r--src/libstore/misc.cc17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/libstore/misc.cc b/src/libstore/misc.cc
index a82aa4e9c..adcce026f 100644
--- a/src/libstore/misc.cc
+++ b/src/libstore/misc.cc
@@ -33,9 +33,11 @@ void Store::computeFSClosure(const PathSet & startPaths,
state->pending++;
}
- queryPathInfo(path,
- [&, path](ref<ValidPathInfo> info) {
- // FIXME: calls to isValidPath() should be async
+ queryPathInfo(path, {[&, path](std::future<ref<ValidPathInfo>> fut) {
+ // FIXME: calls to isValidPath() should be async
+
+ try {
+ auto info = fut.get();
if (flipDirection) {
@@ -75,14 +77,13 @@ void Store::computeFSClosure(const PathSet & startPaths,
if (!--state->pending) done.notify_one();
}
- },
-
- [&, path](std::exception_ptr exc) {
+ } catch (...) {
auto state(state_.lock());
- if (!state->exc) state->exc = exc;
+ if (!state->exc) state->exc = std::current_exception();
assert(state->pending);
if (!--state->pending) done.notify_one();
- });
+ };
+ }});
};
for (auto & startPath : startPaths)