From 1bd702919e16af3bfc9a08c7f9ff658b35d88a28 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= Date: Tue, 3 Nov 2020 12:34:04 +0100 Subject: [PATCH] daemon/worker: allow dropping even on non-XDP During testing it was sending me SERVFAIL, which was weird. There's no use case so far, but if it was decided to drop the answer, it should really happen regardless of the transport. --- daemon/worker.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/daemon/worker.c b/daemon/worker.c index 2b13ef24f..17292a93a 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1265,8 +1265,6 @@ static int xdp_push(struct qr_task *task, const uv_handle_t *src_handle) { #if ENABLE_XDP struct request_ctx *ctx = task->ctx; - if (unlikely(ctx->req.answer == NULL)) /* meant to be dropped */ - return kr_ok(); knot_xdp_msg_t msg; const struct sockaddr *ip_from = &ctx->source.dst_addr.ip; const struct sockaddr *ip_to = &ctx->source.addr.ip; @@ -1307,6 +1305,11 @@ static int qr_task_finalize(struct qr_task *task, int state) return state == KR_STATE_DONE ? kr_ok() : kr_error(EIO); } + if (unlikely(ctx->req.answer == NULL)) { /* meant to be dropped */ + (void) qr_task_on_send(task, NULL, kr_ok()); + return kr_ok(); + } + if (session_flags(source_session)->closing || ctx->source.addr.ip.sa_family == AF_UNSPEC) return kr_error(EINVAL); -- 2.47.2