]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/worker: always try multiple upstreams even if sending fails
authorMarek Vavruša <mvavrusa@cloudflare.com>
Tue, 1 May 2018 06:20:27 +0000 (23:20 -0700)
committerMarek Vavruša <mvavrusa@cloudflare.com>
Fri, 7 Sep 2018 17:45:21 +0000 (10:45 -0700)
Before no other upstreams were tried if qr_task_send or kr_resolve_checkout
failed, which isn't correct, as it doesn't allow blocking of outbound requests.

daemon/worker.c

index 983d133a29f00df606972103716598d319b7fce1..1422b751572cf207984ceda844515c343ec6190f 100644 (file)
@@ -1389,9 +1389,11 @@ static uv_handle_t *retransmit(struct qr_task *task)
                if (!choice) {
                        return ret;
                }
-               /* Checkout answer before sending it */
+
+               /* Checkout query before sending it */
                struct request_ctx *ctx = task->ctx;
                if (kr_resolve_checkout(&ctx->req, NULL, (struct sockaddr *)choice, SOCK_DGRAM, task->pktbuf) != 0) {
+                       task->addrlist_turn = (task->addrlist_turn + 1) % task->addrlist_count; /* Round robin */
                        return ret;
                }
                ret = ioreq_spawn(task, SOCK_DGRAM, choice->sin6_family);
@@ -1411,6 +1413,7 @@ static uv_handle_t *retransmit(struct qr_task *task)
                        ret = NULL;
                }
        }
+
        return ret;
 }