From 7d2d94f3e15e568e94329278432700627fcd4921 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Fri, 20 Nov 2020 15:02:30 +0100 Subject: [PATCH] host-resolver: Don't wait for a reply if there are no threads Without threads handling the resolution, there is no point waiting for a reply. If no subsequent resolution successfully starts a thread (there might not even be one), we'd wait indefinitely. Fixes #3634. --- src/libstrongswan/networking/host_resolver.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/libstrongswan/networking/host_resolver.c b/src/libstrongswan/networking/host_resolver.c index 580931e1f..8326a1d9c 100644 --- a/src/libstrongswan/networking/host_resolver.c +++ b/src/libstrongswan/networking/host_resolver.c @@ -287,7 +287,20 @@ METHOD(host_resolver_t, resolve, host_t*, this->pool->insert_last(this->pool, thread); } } - query->done->wait(query->done, this->mutex); + if (this->threads) + { + query->done->wait(query->done, this->mutex); + } + else + { + DBG1(DBG_LIB, "resolving '%s' failed: no resolver threads", query->name); + /* this should always be the case if we end up here, but make sure */ + if (query->refcount == 1) + { + this->queries->remove(this->queries, query); + this->queue->remove_last(this->queue, (void**)&query); + } + } this->mutex->unlock(this->mutex); result = query->result ? query->result->clone(query->result) : NULL;