From: Grigorii Demidov Date: Wed, 12 Dec 2018 13:32:17 +0000 (+0100) Subject: daemon/io: additional integrity check X-Git-Tag: v3.2.0~10^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=56b643ecbbe7e748d1f07b5e723937b50cc64f38;p=thirdparty%2Fknot-resolver.git daemon/io: additional integrity check --- diff --git a/daemon/io.c b/daemon/io.c index f7086ca53..7bb19b040 100644 --- a/daemon/io.c +++ b/daemon/io.c @@ -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;