[master] f7cc84a7c Fix request body reference count assertion
Nils Goroll
nils.goroll at uplex.de
Sat Oct 10 11:02:06 UTC 2020
commit f7cc84a7ce699e068997d77f35118925fef8481d
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Sat Oct 10 12:58:17 2020 +0200
Fix request body reference count assertion
Test case by Reza, thank you
Fixes #3433
Closes #3434
diff --git a/bin/varnishd/cache/cache_req_body.c b/bin/varnishd/cache/cache_req_body.c
index a3a771163..ecb78d769 100644
--- a/bin/varnishd/cache/cache_req_body.c
+++ b/bin/varnishd/cache/cache_req_body.c
@@ -268,8 +268,9 @@ VRB_Free(struct req *req)
r = HSH_DerefObjCore(req->wrk, &req->body_oc, 0);
- // a busyobj may have gained a reference
- assert (r == 0 || r == 1);
+
+ // each busyobj may have gained a reference
+ assert (r <= req->restarts + 1);
}
/*----------------------------------------------------------------------
diff --git a/bin/varnishtest/tests/r03433.vtc b/bin/varnishtest/tests/r03433.vtc
new file mode 100644
index 000000000..0ebbb5d9b
--- /dev/null
+++ b/bin/varnishtest/tests/r03433.vtc
@@ -0,0 +1,41 @@
+varnishtest "req.body and restarts"
+
+server s1 -repeat 4 {
+ rxreq
+ txresp -bodylen 1000
+} -start
+
+varnish v1 -vcl+backend {
+ import std;
+ import vtc;
+
+ sub vcl_recv {
+ std.cache_req_body(1MB);
+ return (hash);
+ }
+
+ sub vcl_backend_response {
+ set beresp.ttl = 0.1s;
+ }
+
+ sub vcl_deliver {
+ if (!req.restarts) {
+ set req.url = "/2";
+ return (restart);
+ }
+ }
+} -start
+
+client c1 {
+ txreq -req PUT -url /1 -bodylen 250000
+ rxresp
+ expect resp.status == 200
+
+ delay 0.2
+
+ txreq -req PUT -url /1 -bodylen 250000
+ rxresp
+ expect resp.status == 200
+} -run
+
+delay 0.2
More information about the varnish-commit
mailing list