From 9aa45a9f290b3e43c3939622c55017075862965f Mon Sep 17 00:00:00 2001 From: Dridi Boukelmoune Date: Thu, 16 Nov 2023 17:30:17 +0100 Subject: [PATCH] http2_proto: Send GOAWAY before leaving the rx loop --- bin/varnishd/http2/cache_http2_proto.c | 3 ++- bin/varnishtest/tests/t02003.vtc | 16 ++++++++++++++-- bin/varnishtest/tests/t02005.vtc | 2 +- bin/varnishtest/tests/t02025.vtc | 7 ++++++- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/bin/varnishd/http2/cache_http2_proto.c b/bin/varnishd/http2/cache_http2_proto.c index b9d03d47c5..1ae72410cf 100644 --- a/bin/varnishd/http2/cache_http2_proto.c +++ b/bin/varnishd/http2/cache_http2_proto.c @@ -412,7 +412,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; @@ -1469,6 +1469,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 1d62ac9860..fe30e82437 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 616e4c0399..c5176f7253 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 4b83fe95b8..39f987a068 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