]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/quic: move ngtcp2_conn_extend_max_streams_bidi to session data deinit
authorFrantisek Tobias <frantisek.tobias@nic.cz>
Wed, 3 Jun 2026 13:23:19 +0000 (15:23 +0200)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Wed, 22 Jul 2026 04:50:45 +0000 (06:50 +0200)
This prevents superfluous resource consumption since the concurent stream limits are raised once the stream is actually terminated and all it's memory is freed.

daemon/quic_conn.c
daemon/quic_stream.c

index daef519c4f721357df3b0d1c2f2ebc6ce1359605..3b69d373db90fea54572eb4d9111be7893a5375f 100644 (file)
@@ -267,8 +267,6 @@ static int stream_close_cb(ngtcp2_conn *ngconn, uint32_t flags,
                int64_t stream_id, uint64_t app_error_code,
                void *user_data, void *stream_user_data)
 {
-       ngtcp2_conn_extend_max_streams_bidi(ngconn, 1);
-
        struct pl_quic_conn_sess_data *conn = user_data;
        struct pl_quic_stream_sess_data *stream = stream_user_data;
        session2_close(stream->h.session);
index fa6c6f2c5b69cb2842d69f29913078a7f1481cae..ac5208b3062c1a62e4713a8dceb2652bd3cb400c 100644 (file)
@@ -233,8 +233,14 @@ void kr_quic_stream_ack_data(struct pl_quic_stream_sess_data *stream,
 static int pl_quic_stream_sess_deinit(struct session2 *session, void *sess_data)
 {
        struct pl_quic_stream_sess_data *stream = sess_data;
-       if (stream->conn) {
-               ngtcp2_conn_shutdown_stream(stream->conn, 0, stream->stream_id, 0);
+
+       if (stream->ngtcp2_stream_active) {
+               if (!stream->conn) {
+                       kr_log_debug(DOQ, "Stream missing connection pointer, cannot update ngtcp2 stream limits\n");
+               } else {
+                       stream->ngtcp2_stream_active = false;
+                       ngtcp2_conn_extend_max_streams_bidi(stream->conn, 1);
+               }
        }
 
        if (!session2_tasklist_is_empty(session)) {