aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/http-binary-cache-store.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstore/http-binary-cache-store.cc')
-rw-r--r--src/libstore/http-binary-cache-store.cc12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/libstore/http-binary-cache-store.cc b/src/libstore/http-binary-cache-store.cc
index df2fb9332..e631d95f0 100644
--- a/src/libstore/http-binary-cache-store.cc
+++ b/src/libstore/http-binary-cache-store.cc
@@ -137,17 +137,19 @@ protected:
auto request(makeRequest(path));
+ auto callbackPtr = std::make_shared<decltype(callback)>(std::move(callback));
+
getDownloader()->enqueueDownload(request,
- {[callback, this](std::future<DownloadResult> result) {
+ {[callbackPtr, this](std::future<DownloadResult> result) {
try {
- callback(result.get().data);
+ (*callbackPtr)(result.get().data);
} catch (DownloadError & e) {
if (e.error == Downloader::NotFound || e.error == Downloader::Forbidden)
- return callback(std::shared_ptr<std::string>());
+ return (*callbackPtr)(std::shared_ptr<std::string>());
maybeDisable();
- callback.rethrow();
+ callbackPtr->rethrow();
} catch (...) {
- callback.rethrow();
+ callbackPtr->rethrow();
}
}});
}