From 382824c475e921f065c4e1a339a2577cbac21808 Mon Sep 17 00:00:00 2001 From: Baptiste Assmann Date: Wed, 6 Jan 2016 01:53:46 +0100 Subject: [PATCH] BUG/MINOR: dns: inapropriate way out after a resolution timeout A bug leading HAProxy to stop DNS resolution when multiple servers are configured and one is in timeout, the request is not resent. Current code fix this issue. backport status: 1.6 and above --- src/dns.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/dns.c b/src/dns.c index 1ce786dc5..97f9f0ac0 100644 --- a/src/dns.c +++ b/src/dns.c @@ -1188,21 +1188,19 @@ struct task *dns_process_resolve(struct task *t) /* notify the result to the requester */ resolution->requester_error_cb(resolution, DNS_RESP_TIMEOUT); + goto out; } resolution->try -= 1; - /* check current resolution status */ - if (resolution->step == RSLV_STEP_RUNNING) { - /* resend the DNS query */ - dns_send_query(resolution); + /* resend the DNS query */ + dns_send_query(resolution); - /* check if we have more than one resolution in the list */ - if (dns_check_resolution_queue(resolvers) > 1) { - /* move the rsolution to the end of the list */ - LIST_DEL(&resolution->list); - LIST_ADDQ(&resolvers->curr_resolution, &resolution->list); - } + /* check if we have more than one resolution in the list */ + if (dns_check_resolution_queue(resolvers) > 1) { + /* move the rsolution to the end of the list */ + LIST_DEL(&resolution->list); + LIST_ADDQ(&resolvers->curr_resolution, &resolution->list); } }