DNSClient: reorder timeout check

Check completion before timeout, so that complete requests which have
also exceeded their timeout don’t crash
This commit is contained in:
James Turner 2022-09-09 12:03:43 +01:00
parent cc3fab04a3
commit b2666c40f7

View File

@ -285,12 +285,19 @@ void Client::update(int waitTimeout)
// and cancel any which timed out
auto it = std::remove_if(d->_activeRequests.begin(), d->_activeRequests.end(),
[this](const Request_ptr& r) {
// check complete-ness before timeout,
// since both can be true, but cancelling
// a completed request breaks udns
if (r->isComplete()) {
return true;
}
if (r->isTimeout()) {
dns_cancel(d->ctx, reinterpret_cast<struct dns_query*>(r->_query));
return true;
}
return r->isComplete();
return false;
});
d->_activeRequests.erase(it, d->_activeRequests.end());
}