From b2666c40f700c87d30adbbe6a43996c72a0eae46 Mon Sep 17 00:00:00 2001 From: James Turner Date: Fri, 9 Sep 2022 12:03:43 +0100 Subject: [PATCH] DNSClient: reorder timeout check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Check completion before timeout, so that complete requests which have also exceeded their timeout don’t crash --- simgear/io/DNSClient.cxx | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/simgear/io/DNSClient.cxx b/simgear/io/DNSClient.cxx index 268f0a82..e542f127 100644 --- a/simgear/io/DNSClient.cxx +++ b/simgear/io/DNSClient.cxx @@ -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(r->_query)); return true; } - return r->isComplete(); + return false; }); d->_activeRequests.erase(it, d->_activeRequests.end()); }