diff options
Diffstat (limited to 'src/libstore/remote-store.cc')
-rw-r--r-- | src/libstore/remote-store.cc | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/libstore/remote-store.cc b/src/libstore/remote-store.cc index 1af84cff5ba8..b9076c0474d6 100644 --- a/src/libstore/remote-store.cc +++ b/src/libstore/remote-store.cc @@ -45,7 +45,13 @@ RemoteStore::RemoteStore(const Params & params) , connections(make_ref<Pool<Connection>>( std::max(1, (int) maxConnections), [this]() { return openConnectionWrapper(); }, - [](const ref<Connection> & r) { return r->to.good() && r->from.good(); } + [this](const ref<Connection> & r) { + return + r->to.good() + && r->from.good() + && std::chrono::duration_cast<std::chrono::seconds>( + std::chrono::steady_clock::now() - r->startTime).count() < maxConnectionAge; + } )) { } @@ -106,6 +112,8 @@ ref<RemoteStore::Connection> UDSRemoteStore::openConnection() conn->from.fd = conn->fd.get(); conn->to.fd = conn->fd.get(); + conn->startTime = std::chrono::steady_clock::now(); + initConnection(*conn); return conn; @@ -619,6 +627,12 @@ void RemoteStore::connect() } +void RemoteStore::flushBadConnections() +{ + connections->flushBad(); +} + + RemoteStore::Connection::~Connection() { try { |