Commit 88963bb2 authored by Dridi Boukelmoune's avatar Dridi Boukelmoune Committed by Simon Stridsberg

http2_send: Track bankrupt streams

Conflicts:
	bin/varnishd/http2/cache_http2.h
parent 9dfb893d
...@@ -162,6 +162,8 @@ struct h2_sess { ...@@ -162,6 +162,8 @@ struct h2_sess {
struct sess *sess; struct sess *sess;
int refcnt; int refcnt;
int open_streams;
int winup_streams;
uint32_t highest_stream; uint32_t highest_stream;
int goaway; int goaway;
int bogosity; int bogosity;
...@@ -193,7 +195,6 @@ struct h2_sess { ...@@ -193,7 +195,6 @@ struct h2_sess {
VTAILQ_HEAD(,h2_req) txqueue; VTAILQ_HEAD(,h2_req) txqueue;
h2_error error; h2_error error;
int open_streams;
// rst rate limit parameters, copied from h2_* parameters // rst rate limit parameters, copied from h2_* parameters
vtim_dur rapid_reset; vtim_dur rapid_reset;
......
...@@ -268,6 +268,9 @@ h2_do_window(struct worker *wrk, struct h2_req *r2, ...@@ -268,6 +268,9 @@ h2_do_window(struct worker *wrk, struct h2_req *r2,
r2->t_winupd = VTIM_real(); r2->t_winupd = VTIM_real();
h2_send_rel_locked(h2, r2); h2_send_rel_locked(h2, r2);
assert(h2->winup_streams >= 0);
h2->winup_streams++;
while (r2->t_window <= 0 && h2_errcheck(r2, h2) == NULL) { while (r2->t_window <= 0 && h2_errcheck(r2, h2) == NULL) {
r2->cond = &wrk->cond; r2->cond = &wrk->cond;
(void)h2_cond_wait(r2->cond, h2, r2); (void)h2_cond_wait(r2->cond, h2, r2);
...@@ -282,6 +285,10 @@ h2_do_window(struct worker *wrk, struct h2_req *r2, ...@@ -282,6 +285,10 @@ h2_do_window(struct worker *wrk, struct h2_req *r2,
h2_win_charge(r2, h2, w); h2_win_charge(r2, h2, w);
assert (w > 0); assert (w > 0);
} }
assert(h2->winup_streams > 0);
h2->winup_streams--;
h2_send_get_locked(wrk, h2, r2); h2_send_get_locked(wrk, h2, r2);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment