From 49e2d109a3a6dd715b9f7c742da0679e0801983d Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Wed, 17 Oct 2012 18:04:33 +0200 Subject: [PATCH] Only create more threads if needed in host_resolver_t --- src/libstrongswan/host_resolver.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/libstrongswan/host_resolver.c b/src/libstrongswan/host_resolver.c index 8a9711825b..b7e990b425 100644 --- a/src/libstrongswan/host_resolver.c +++ b/src/libstrongswan/host_resolver.c @@ -69,6 +69,11 @@ struct private_host_resolver_t { */ u_int threads; + /** + * Current number of busy threads + */ + u_int busy_threads; + /** * TRUE if no new queries are accepted */ @@ -148,6 +153,7 @@ static job_requeue_t resolve_hosts(private_host_resolver_t *this) thread_cancelability(old); thread_cleanup_pop(FALSE); } + this->busy_threads++; this->mutex->unlock(this->mutex); memset(&hints, 0, sizeof(hints)); @@ -160,6 +166,7 @@ static job_requeue_t resolve_hosts(private_host_resolver_t *this) thread_cleanup_pop(FALSE); this->mutex->lock(this->mutex); + this->busy_threads--; if (error != 0) { DBG1(DBG_LIB, "resolving '%s' failed: %s", query->name, @@ -218,7 +225,8 @@ METHOD(host_resolver_t, resolve, host_t*, this->new_query->signal(this->new_query); } ref_get(&query->refcount); - if (this->threads < this->max_threads) + if (this->busy_threads == this->threads && + this->threads < this->max_threads) { this->threads++; lib->processor->queue_job(lib->processor,