]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon: TCP connection timeouting has changed; connection was closed after peer's...
authorGrigorii Demidov <grigorii.demidov@nic.cz>
Mon, 22 Oct 2018 08:48:51 +0000 (10:48 +0200)
committerGrigorii Demidov <grigorii.demidov@nic.cz>
Mon, 22 Oct 2018 08:48:51 +0000 (10:48 +0200)
daemon/io.c
daemon/session.c
daemon/session.h
daemon/worker.c

index 30d3723ce7076d80b29d6cc7651cc90c8f0a1a5e..9087f64fd855bf9cbdb65339a4b36ac27ecc6f96 100644 (file)
@@ -169,7 +169,7 @@ void tcp_timeout_trigger(uv_timer_t *timer)
                const struct engine *engine = worker->engine;
                const struct network *net = &engine->net;
                uint64_t idle_in_timeout = net->tcp.in_idle_timeout;
-               uint64_t last_activity = session_last_input_activity(s);
+               uint64_t last_activity = session_last_activity(s);
                uint64_t idle_time = kr_now() - last_activity;
                if (idle_time < idle_in_timeout) {
                        idle_in_timeout -= idle_time;
index 1756b630d1509ec29deda52e54265da16bd17524..a869d6db8133fb7976d9e018318cabf4a6c6ff02 100644 (file)
@@ -45,7 +45,8 @@ struct session {
        ssize_t wire_buf_size;        /**< Buffer size. */
        ssize_t wire_buf_start_idx;   /**< Data start offset in wire_buf. */
        ssize_t wire_buf_end_idx;     /**< Data end offset in wire_buf. */
-       uint64_t last_input_activity; /**< Either creatoion time or time of peer's last activity */
+       uint64_t last_activity;       /**< Time of last IO activity (if any occurs).
+                                      *   Otherwise session creation time. */
 };
 
 static void on_session_close(uv_handle_t *handle)
@@ -746,10 +747,10 @@ void session_kill_ioreq(struct session *s, struct qr_task *task)
 /** Update timestamp */
 void session_touch(struct session *s)
 {
-       s->last_input_activity = kr_now();
+       s->last_activity = kr_now();
 }
 
-uint64_t session_last_input_activity(struct session *s)
+uint64_t session_last_activity(struct session *s)
 {
-       return s->last_input_activity;
+       return s->last_activity;
 }
index 5855be0a198b752e0ca6e1616005307c62eb14a8..a537213e03372abf34024473768c1a63b5fbe7a8 100644 (file)
@@ -143,4 +143,6 @@ int session_discard_packet(struct session *session, const knot_pkt_t *pkt);
 void session_kill_ioreq(struct session *s, struct qr_task *task);
 /** Update timestamp */
 void session_touch(struct session *s);
-uint64_t session_last_input_activity(struct session *s);
+/** Returns either creation time or time of last IO activity if any occurs. */
+/* Used for TCP timeout calculation. */
+uint64_t session_last_activity(struct session *s);
index 4412305e1e1a2c5240dbaa4e4927ef78a8f3b051..8a885d228cf72b0c27158dc56ade0db045e374cd 100644 (file)
@@ -655,6 +655,7 @@ static int qr_task_send(struct qr_task *task, struct session *session,
        }
 
        if (ret == 0) {
+               session_touch(session);
                if (session_flags(session)->outgoing) {
                        session_tasklist_add(session, task);
                }