From: Grigorii Demidov Date: Wed, 31 Jan 2018 08:30:17 +0000 (+0100) Subject: daemon: restart client's tcp session timeout timer right after answer X-Git-Tag: v2.0.0~1^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0674b78fde9114f1c72e08304e5ab33c17afa1cd;p=thirdparty%2Fknot-resolver.git daemon: restart client's tcp session timeout timer right after answer --- diff --git a/daemon/io.c b/daemon/io.c index 64de774c2..6a59a5ac0 100644 --- a/daemon/io.c +++ b/daemon/io.c @@ -213,7 +213,7 @@ static void tcp_timeout_trigger(uv_timer_t *timer) assert(session->outgoing == false); if (session->tasks.len > 0) { uv_timer_again(timer); - } else { + } else if (!session->closing) { uv_timer_stop(timer); worker_session_close(session); } diff --git a/daemon/worker.c b/daemon/worker.c index 29e335df7..7f099741f 100644 --- a/daemon/worker.c +++ b/daemon/worker.c @@ -1412,6 +1412,11 @@ static int qr_task_finalize(struct qr_task *task, int state) (void) qr_task_send(task, handle, (struct sockaddr *)&ctx->source.addr, ctx->req.answer); + if (handle->type == UV_TCP) { + /* Don't try to close source session at least + * retry_interval_for_timeout_timer milliseconds */ + uv_timer_again(&ctx->source.session->timeout); + } } else { (void) qr_task_on_send(task, NULL, kr_error(EIO)); }