From 7beda284d20e501c469e4493ea72eb082f2bae64 Mon Sep 17 00:00:00 2001 From: Aram Sargsyan Date: Mon, 12 Dec 2022 12:12:13 +0000 Subject: [PATCH] Do not resend TCP requests The req_response() function is using 'udpcount' variable to resend the request 'udpcount' times on timeout even for TCP requests, which does not make sense, as it would use the same connection. Add a condition to use the resend logic only for UDP requests. (cherry picked from commit edcdb881da9aefaaadb9b6e4de2ff372ed395ab0) --- lib/dns/request.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/dns/request.c b/lib/dns/request.c index 8f53d37812..b2b7b119b9 100644 --- a/lib/dns/request.c +++ b/lib/dns/request.c @@ -1061,7 +1061,9 @@ req_response(isc_result_t result, isc_region_t *region, void *arg) { if (result == ISC_R_TIMEDOUT) { LOCK(&request->requestmgr->locks[request->hash]); - if (request->udpcount > 1) { + if (request->udpcount > 1 && + (request->flags & DNS_REQUEST_F_TCP) == 0) + { request->udpcount -= 1; dns_dispatch_resume(request->dispentry, request->timeout);