]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/io: additional integrity check
authorGrigorii Demidov <grigorii.demidov@nic.cz>
Wed, 12 Dec 2018 13:32:17 +0000 (14:32 +0100)
committerGrigorii Demidov <grigorii.demidov@nic.cz>
Wed, 12 Dec 2018 13:32:17 +0000 (14:32 +0100)
daemon/io.c

index f7086ca533e1aa85ffc5fecf8fc8b5de2b60a24f..7bb19b040a57bc9ffc35bd91809317b4a355435f 100644 (file)
@@ -145,7 +145,6 @@ void tcp_timeout_trigger(uv_timer_t *timer)
        struct session *s = timer->data;
 
        assert(!session_flags(s)->closing);
-       assert(session_waitinglist_is_empty(s));
 
        struct worker_ctx *worker = timer->loop->data;
 
@@ -166,6 +165,17 @@ void tcp_timeout_trigger(uv_timer_t *timer)
                                    KR_RESOLVE_TIME_LIMIT / 2,
                                    KR_RESOLVE_TIME_LIMIT / 2);
        } else {
+               /* Normally it should not happen,
+                * but better to check if there anything in this list. */
+               while (!session_waitinglist_is_empty(s)) {
+                       struct qr_task *t = session_waitinglist_pop(s, false);
+                       worker_task_finalize(t, KR_STATE_FAIL);
+                       worker_task_unref(t);
+                       worker->stats.timeout += 1;
+                       if (session_flags(s)->closing) {
+                               return;
+                       }
+               }
                const struct engine *engine = worker->engine;
                const struct network *net = &engine->net;
                uint64_t idle_in_timeout = net->tcp.in_idle_timeout;