void ConnectionPool::_cleanUpOlderThan_inlock(Date_t now, ConnectionList* hostConns) { ConnectionList::iterator iter = hostConns->begin(); while (iter != hostConns->end()) { if (_shouldKeepConnection(now, *iter)) { ++iter; } else { _destroyConnection_inlock(hostConns, iter++); } } }
void ConnectionPool::releaseConnection(ConnectionList::iterator iter, const Date_t now) { boost::lock_guard<boost::mutex> lk(_mutex); if (!_shouldKeepConnection(now, *iter)) { _destroyConnection_inlock(&_inUseConnections, iter); return; } ConnectionList& hostConns = _connections[iter->conn->getServerHostAndPort()]; _cleanUpOlderThan_inlock(now, &hostConns); hostConns.splice(hostConns.begin(), _inUseConnections, iter); _lastUsedHosts[iter->conn->getServerHostAndPort()] = now; }