Pool<T>: Allow a maximum pool size
This commit is contained in:
parent
e292144d46
commit
d5626bf4c1
4 changed files with 74 additions and 33 deletions
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue