[master] 4460caa Properly handle END_STREAM for HEADERS+CONTINUATION
Dag Haavi Finstad
daghf at varnish-software.com
Tue Aug 8 15:49:06 CEST 2017
commit 4460caa89ec340e07284917b6b6085c4f960fa87
Author: Dag Haavi Finstad <daghf at varnish-software.com>
Date: Thu Jul 13 17:35:37 2017 +0200
Properly handle END_STREAM for HEADERS+CONTINUATION
In a sequence of HEADERS and CONTINUATION frames, the END_STREAM flag is
set in the HEADERS frame, and the END_HEADERS flag is set in the last
CONTINUATION frame.
diff --git a/bin/varnishd/http2/cache_http2_proto.c b/bin/varnishd/http2/cache_http2_proto.c
index a264626..25c18a2 100644
--- a/bin/varnishd/http2/cache_http2_proto.c
+++ b/bin/varnishd/http2/cache_http2_proto.c
@@ -526,9 +526,6 @@ h2_end_headers(struct worker *wrk, const struct h2_sess *h2,
}
VSLb_ts_req(req, "Req", req->t_req);
- if (h2->rxf_flags & H2FF_HEADERS_END_STREAM)
- req->req_body_status = REQ_BODY_NONE;
-
req->req_step = R_STP_TRANSPORT;
req->task.func = h2_do_req;
req->task.priv = req;
@@ -602,6 +599,10 @@ h2_rx_headers(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
h2_del_req(wrk, r2);
return (h2e);
}
+
+ if (h2->rxf_flags & H2FF_HEADERS_END_STREAM)
+ req->req_body_status = REQ_BODY_NONE;
+
if (h2->rxf_flags & H2FF_HEADERS_END_HEADERS)
return (h2_end_headers(wrk, h2, req, r2));
return (0);
diff --git a/bin/varnishtest/tests/t02003.vtc b/bin/varnishtest/tests/t02003.vtc
index 86417a0..34b88c2 100644
--- a/bin/varnishtest/tests/t02003.vtc
+++ b/bin/varnishtest/tests/t02003.vtc
@@ -445,6 +445,15 @@ client c1 {
} -run
} -run
+client c1 {
+ stream 1 {
+ txreq -nohdrend
+ txcont -hdr "bar" "foo"
+ rxresp
+ expect resp.status == 200
+ } -run
+} -run
+
varnish v1 -vsl_catchup
varnish v1 -expect MEMPOOL.req0.live == 0
More information about the varnish-commit
mailing list