]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/quic_conn: fix stream counting
authorFrantisek Tobias <frantisek.tobias@nic.cz>
Thu, 27 Nov 2025 10:43:41 +0000 (11:43 +0100)
committerFrantisek Tobias <frantisek.tobias@nic.cz>
Wed, 7 Jan 2026 13:40:28 +0000 (14:40 +0100)
daemon/quic_conn.c

index 9fdf83060ab30aec893eb57585d1238b91a93401..b730d6bf5bab5f64c9e3351108e206ffbc9c22c8 100644 (file)
@@ -897,19 +897,22 @@ static int pl_quic_conn_sess_deinit(struct session2 *session, void *sess_data)
        struct pl_quic_conn_sess_data *conn = sess_data;
        while (session2_tasklist_del_first(session, false) != NULL);
 
-       kr_log_info(DOQ, "Closing connection, %s useful, served %zu streams\n",
-                       conn->finished_streams ? "was" : "wasn't",
-                       conn->finished_streams);
-
        struct pl_quic_stream_sess_data *s_node;
        WALK_LIST_FIRST(s_node, conn->streams) {
                struct pl_quic_stream_sess_data *s =
                        container_of(s_node, struct pl_quic_stream_sess_data, list_node);
                rem_node(&s->list_node);
                session2_close(s->h.session);
+               /* These streams die with the connection, stream_close_cb
+                * will not be called so adjust counters here. */
                --conn->streams_count;
+               ++conn->finished_streams;
        }
 
+       kr_log_info(DOQ, "Closing connection, %s useful, served %zu streams\n",
+                       conn->finished_streams ? "was" : "wasn't",
+                       conn->finished_streams);
+
        if (conn->priority) {
                gnutls_priority_deinit(conn->priority);
        }