[6.0] 88963bb2e http2_send: Track bankrupt streams

Simon Stridsberg simon.stridsberg at varnish-software.com
Mon Mar 18 18:20:06 UTC 2024


commit 88963bb2e3dcf0ee5710ca367543156ce6347a42
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date:   Mon Oct 23 17:15:20 2023 +0200

    http2_send: Track bankrupt streams
    
    Conflicts:
            bin/varnishd/http2/cache_http2.h

diff --git a/bin/varnishd/http2/cache_http2.h b/bin/varnishd/http2/cache_http2.h
index d0dbb4e35..3c30d17e9 100644
--- a/bin/varnishd/http2/cache_http2.h
+++ b/bin/varnishd/http2/cache_http2.h
@@ -162,6 +162,8 @@ struct h2_sess {
 
 	struct sess			*sess;
 	int				refcnt;
+	int				open_streams;
+	int				winup_streams;
 	uint32_t			highest_stream;
 	int				goaway;
 	int				bogosity;
@@ -193,7 +195,6 @@ struct h2_sess {
 	VTAILQ_HEAD(,h2_req)		txqueue;
 
 	h2_error			error;
-	int				open_streams;
 
 	// rst rate limit parameters, copied from h2_* parameters
 	vtim_dur			rapid_reset;
diff --git a/bin/varnishd/http2/cache_http2_send.c b/bin/varnishd/http2/cache_http2_send.c
index cdb77c643..eb6d0170c 100644
--- a/bin/varnishd/http2/cache_http2_send.c
+++ b/bin/varnishd/http2/cache_http2_send.c
@@ -268,6 +268,9 @@ h2_do_window(struct worker *wrk, struct h2_req *r2,
 		r2->t_winupd = VTIM_real();
 		h2_send_rel_locked(h2, r2);
 
+		assert(h2->winup_streams >= 0);
+		h2->winup_streams++;
+
 		while (r2->t_window <= 0 && h2_errcheck(r2, h2) == NULL) {
 			r2->cond = &wrk->cond;
 			(void)h2_cond_wait(r2->cond, h2, r2);
@@ -282,6 +285,10 @@ h2_do_window(struct worker *wrk, struct h2_req *r2,
 			h2_win_charge(r2, h2, w);
 			assert (w > 0);
 		}
+
+		assert(h2->winup_streams > 0);
+		h2->winup_streams--;
+
 		h2_send_get_locked(wrk, h2, r2);
 	}
 


More information about the varnish-commit mailing list