[7.4] 976185106 http2_proto: Send GOAWAY before leaving the rx loop

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


commit 97618510697aa89ad28f11aed01d55b890351d3e
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date:   Thu Nov 16 17:30:17 2023 +0100

    http2_proto: Send GOAWAY before leaving the rx loop

diff --git a/bin/varnishd/http2/cache_http2_proto.c b/bin/varnishd/http2/cache_http2_proto.c
index 42fd37484..7fe14591a 100644
--- a/bin/varnishd/http2/cache_http2_proto.c
+++ b/bin/varnishd/http2/cache_http2_proto.c
@@ -410,7 +410,7 @@ h2_tx_goaway(struct worker *wrk, struct h2_sess *h2, h2_error h2e)
 	ASSERT_RXTHR(h2);
 	AN(h2e);
 
-	if (h2->goaway)
+	if (h2->goaway || !h2e->send_goaway)
 		return;
 
 	h2->goaway = 1;
@@ -1465,6 +1465,7 @@ h2_rxframe(struct worker *wrk, struct h2_sess *h2)
 
 	if (h2e != NULL && h2e->connection) {
 		h2->error = h2e;
+		h2_tx_goaway(wrk, h2, h2e);
 		return (0);
 	}
 
diff --git a/bin/varnishtest/tests/t02003.vtc b/bin/varnishtest/tests/t02003.vtc
index 1d62ac986..fe30e8243 100644
--- a/bin/varnishtest/tests/t02003.vtc
+++ b/bin/varnishtest/tests/t02003.vtc
@@ -233,17 +233,28 @@ client c1 {
 } -run
 
 client c1 {
+	stream 0 {
+		rxgoaway
+		expect goaway.err == NO_ERROR
+		expect goaway.laststream == 3
+	} -start
 	stream 1 {
-		txreq -nohdrend
+		txreq -nostrend
 		txrst -err 2
 	} -run
 	stream 3 {
-		txreq -nohdrend
+		txreq -nostrend
 		txrst -err 0x666
 	} -run
+	stream 0 -wait
 } -run
 
 client c1 {
+	stream 0 {
+		rxgoaway
+		expect goaway.err == NO_ERROR
+		expect goaway.laststream == 1
+	} -start
 	stream 1 {
 		txreq
 		rxresp
@@ -252,6 +263,7 @@ client c1 {
 		# RST_STREAM on closed stream
 		txrst
 	} -run
+	stream 0 -wait
 } -run
 
 
diff --git a/bin/varnishtest/tests/t02005.vtc b/bin/varnishtest/tests/t02005.vtc
index 616e4c039..c5176f725 100644
--- a/bin/varnishtest/tests/t02005.vtc
+++ b/bin/varnishtest/tests/t02005.vtc
@@ -32,7 +32,7 @@ varnish v1 -cliok "param.set debug +syncvsl"
 
 logexpect l1 -v v1 -g raw {
 	expect	* 1001 ReqAcct	"80 7 87 78 8 86"
-	expect	* 1000 ReqAcct	"45 8 53 54 20 74"
+	expect	* 1000 ReqAcct	"45 8 53 63 28 91"
 } -start
 
 client c1 {
diff --git a/bin/varnishtest/tests/t02025.vtc b/bin/varnishtest/tests/t02025.vtc
index 4b83fe95b..39f987a06 100644
--- a/bin/varnishtest/tests/t02025.vtc
+++ b/bin/varnishtest/tests/t02025.vtc
@@ -25,12 +25,17 @@ logexpect l1 -v v1 -g raw -i Debug {
 } -start
 
 client c1 {
+	stream 0 {
+		rxgoaway
+		expect goaway.err == NO_ERROR
+		expect goaway.laststream == 1
+	} -start
 	stream 1 {
 		txreq
 		barrier b1 sync
 		txrst
 	} -run
-	expect_close
+	stream 0 -wait
 } -start
 
 logexpect l1 -wait


More information about the varnish-commit mailing list