void ConnectionImpl::refresh(Milliseconds timeout, RefreshCallback cb) { _refreshCallback = std::move(cb); _timer.setTimeout( timeout, [this] { _refreshCallback(this, Status(ErrorCodes::ExceededTimeLimit, "timeout")); }); _refreshQueue.push_back(this); if (_pushRefreshQueue.size()) { _refreshQueue.front()->_refreshCallback(_refreshQueue.front(), _pushRefreshQueue.front()()); _refreshQueue.pop_front(); _pushRefreshQueue.pop_front(); } }
void ConnectionImpl::refresh(Milliseconds timeout, RefreshCallback cb) { _refreshCallback = std::move(cb); _timer.setTimeout(timeout, [this] { _refreshCallback(this, Status(ErrorCodes::NetworkInterfaceExceededTimeLimit, "timeout")); }); _refreshQueue.push_back(this); if (_pushRefreshQueue.size()) { auto connPtr = _refreshQueue.front(); auto callback = _pushRefreshQueue.front(); _refreshQueue.pop_front(); _pushRefreshQueue.pop_front(); auto refreshCb = connPtr->_refreshCallback; connPtr->indicateUsed(); refreshCb(connPtr, callback()); } }