]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon: restart client's tcp session timeout timer right after answer
authorGrigorii Demidov <grigorii.demidov@nic.cz>
Wed, 31 Jan 2018 08:30:17 +0000 (09:30 +0100)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Wed, 31 Jan 2018 13:00:49 +0000 (14:00 +0100)
daemon/io.c
daemon/worker.c

index 64de774c2d495cf6f315188b6af8f76010ebf257..6a59a5ac0b276127823fb750560e4ef536ceacbc 100644 (file)
@@ -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);
        }
index 29e335df733901286cde750fcd24c4af2a31a7b8..7f099741fc8f8809a11271b03c3d254c954f2dc7 100644 (file)
@@ -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));
        }