Pool<T>: Allow a maximum pool size

This commit is contained in:
Eelco Dolstra 2016-02-23 16:40:16 +01:00
parent e292144d46
commit d5626bf4c1
4 changed files with 74 additions and 33 deletions

View file

@ -14,8 +14,8 @@
#include <sys/un.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
#include <cstring>
namespace nix {
@ -39,8 +39,8 @@ template<class T> T readStorePaths(Source & from)
template PathSet readStorePaths(Source & from);
RemoteStore::RemoteStore()
: connections(make_ref<Pool<Connection>>([this]() { return openConnection(); }))
RemoteStore::RemoteStore(size_t maxConnections)
: connections(make_ref<Pool<Connection>>(maxConnections, [this]() { return openConnection(); }))
{
}
@ -116,18 +116,6 @@ ref<RemoteStore::Connection> RemoteStore::openConnection(bool reserveSpace)
}
RemoteStore::~RemoteStore()
{
try {
//to.flush();
//fdSocket.close();
// FIXME: close pool
} catch (...) {
ignoreException();
}
}
void RemoteStore::setOptions(ref<Connection> conn)
{
conn->to << wopSetOptions
@ -568,6 +556,18 @@ bool RemoteStore::verifyStore(bool checkContents, bool repair)
return readInt(conn->from) != 0;
}
RemoteStore::Connection::~Connection()
{
try {
to.flush();
fd.close();
} catch (...) {
ignoreException();
}
}
void RemoteStore::Connection::processStderr(Sink * sink, Source * source)
{
to.flush();

View file

@ -1,5 +1,6 @@
#pragma once
#include <limits>
#include <string>
#include "store-api.hh"
@ -19,9 +20,7 @@ class RemoteStore : public Store
{
public:
RemoteStore();
~RemoteStore();
RemoteStore(size_t maxConnections = std::numeric_limits<size_t>::max());
/* Implementations of abstract store API methods. */
@ -100,6 +99,8 @@ private:
FdSource from;
unsigned int daemonVersion;
~Connection();
void processStderr(Sink * sink = 0, Source * source = 0);
};