conn->d_pendingResponses[conn->d_currentQuery.d_idstate.origID] = std::move(conn->d_currentQuery);
conn->d_currentQuery.d_buffer.clear();
+ if (!conn->d_usedForXFR) {
+ ++conn->d_ds->outstanding;
+ }
+
return IOState::Done;
}
else {
}
if (connectionDied) {
+
bool reconnected = false;
DEBUGLOG("connection died, number of failures is "<<conn->d_downstreamFailures<<", retries is "<<conn->d_ds->retries);
/* we need to resend the queries that were in flight, if any */
for (auto& pending : conn->d_pendingResponses) {
conn->d_pendingQueries.push_back(std::move(pending.second));
+ if (!conn->d_usedForXFR) {
+ --conn->d_ds->outstanding;
+ }
}
conn->d_pendingResponses.clear();
conn->d_currentPos = 0;
{
d_connectionDied = true;
+ if (!d_usedForXFR) {
+ d_ds->outstanding -= d_pendingResponses.size();
+ }
+
auto& clientConn = d_clientConn;
if (!clientConn->active()) {
// a client timeout occured, or something like that */
// a client timeout occured, or something like that */
d_connectionDied = true;
d_clientConn.reset();
+
+ if (!conn->d_usedForXFR) {
+ --conn->d_ds->outstanding;
+ }
+
return IOState::Done;
}
return IOState::Done;
}
+ if (!conn->d_usedForXFR) {
+ --conn->d_ds->outstanding;
+ }
+
auto ids = std::move(it->second.d_idstate);
d_pendingResponses.erase(it);
DEBUGLOG("passing response to client connection for "<<ids.qname);