unwind(8) gives the most preferred resolver strategy a bit more time
(200ms) to answer before trying the next strategy. However, we need to
skip strategies that are not available. In the default configuration,
without a config file, unwind(8) would give DoT 200ms more time, but no
DoT forwarders are known, so this is useless.
OK?
diff --git resolver.c resolver.c
index 81485b230fa..1eb505512e4 100644
--- resolver.c
+++ resolver.c
@@ -772,6 +772,7 @@ try_next_resolver(struct running_query *rq)
struct timespec tp, elapsed;
struct timeval tv = {0, 0};
int64_t ms;
+ int i;
while(rq->next_resolver < rq->res_pref.len &&
((res = resolvers[rq->res_pref.types[rq->next_resolver]]) == NULL ||
@@ -804,7 +805,12 @@ try_next_resolver(struct running_query *rq)
ms = res->median;
if (ms > NEXT_RES_MAX)
ms = NEXT_RES_MAX;
- if (res->type == resolver_conf->res_pref.types[0])
+
+ /* skip over unavailable resolvers in preferences */
+ for (i = 0; i < resolver_conf->res_pref.len &&
+resolvers[resolver_conf->res_pref.types[i]] == NULL; i++)
+ ;
+ if (res->type == resolver_conf->res_pref.types[i])
tv.tv_usec = 1000 * (PREF_RESOLVER_MEDIAN_SKEW + ms);
else
tv.tv_usec = 1000 * ms;
--
I'm not entirely sure you are real.