aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-03-24 11:10:05 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2016-03-24 11:10:05 +0100
commit8b7839b608c9d92d432154fd717b77953efe447c (patch)
treeb9550a82b40ba404efff68e13c2d163263139714
parentc7d44bad000d5f431c05f6c27718d26d2b93bb0f (diff)
HttpBinaryCacheStore: Make thread-safe
-rw-r--r--src/libstore/http-binary-cache-store.cc8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/libstore/http-binary-cache-store.cc b/src/libstore/http-binary-cache-store.cc
index 1d707c043..0aafd0a11 100644
--- a/src/libstore/http-binary-cache-store.cc
+++ b/src/libstore/http-binary-cache-store.cc
@@ -10,7 +10,7 @@ private:
Path cacheUri;
- ref<Downloader> downloader;
+ Pool<Downloader> downloaders;
public:
@@ -18,7 +18,9 @@ public:
const Path & secretKeyFile, const Path & _cacheUri)
: BinaryCacheStore(localStore, secretKeyFile)
, cacheUri(_cacheUri)
- , downloader(makeDownloader())
+ , downloaders(
+ std::numeric_limits<size_t>::max(),
+ []() { return makeDownloader(); })
{
if (cacheUri.back() == '/')
cacheUri.pop_back();
@@ -36,6 +38,7 @@ protected:
bool fileExists(const std::string & path) override
{
try {
+ auto downloader(downloaders.get());
DownloadOptions options;
options.showProgress = DownloadOptions::no;
options.head = true;
@@ -55,6 +58,7 @@ protected:
std::string getFile(const std::string & path) override
{
+ auto downloader(downloaders.get());
DownloadOptions options;
options.showProgress = DownloadOptions::no;
return downloader->download(cacheUri + "/" + path, options).data;