[master] 91c675e Clear the objcore attributes flags when (re)initializing an stv object

Nils Goroll nils.goroll at uplex.de
Wed Nov 15 13:16:05 UTC 2017


commit 91c675e74336dd768c5315806811c97b4469ee31
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Wed Nov 15 14:08:36 2017 +0100

    Clear the objcore attributes flags when (re)initializing an stv object
    
    The oa_present member acts as a filter at the level above the stevedore
    to check set attributes efficiently.
    
    We missed to clear it when recreating freeing an abandoned backend
    fetch object in vcl_backend_error.
    
    Fixes #2319

diff --git a/bin/varnishd/storage/stevedore.c b/bin/varnishd/storage/stevedore.c
index 393486d..7790351 100644
--- a/bin/varnishd/storage/stevedore.c
+++ b/bin/varnishd/storage/stevedore.c
@@ -86,7 +86,7 @@ STV_NewObject(struct worker *wrk, struct objcore *oc,
 	AN(stv->allocobj);
 	if (stv->allocobj(wrk, stv, oc, wsl) == 0)
 		return (0);
-
+	oc->oa_present = 0;
 	wrk->stats->n_object++;
 	VSLb(wrk->vsl, SLT_Storage, "%s %s",
 	    oc->stobj->stevedore->name, oc->stobj->stevedore->ident);
diff --git a/bin/varnishtest/tests/r02319.vtc b/bin/varnishtest/tests/r02319.vtc
new file mode 100644
index 0000000..d49e176
--- /dev/null
+++ b/bin/varnishtest/tests/r02319.vtc
@@ -0,0 +1,37 @@
+varnishtest "Test that oc->oa_present is cleared when we create a new object"
+
+server s1 {
+	rxreq
+	txresp -hdr "Vary: buzz" -nolen -hdr "Content-Length: 10240" \
+	       -body 1024
+} -start
+
+varnish v1 -arg "-p max_retries=1" -vcl+backend {
+	import vtc;
+
+	sub vcl_backend_fetch {
+		set bereq.between_bytes_timeout = 0.0001s;
+	}
+	sub vcl_backend_response {
+		set beresp.do_stream = false;
+	}
+	sub vcl_backend_error {
+		set beresp.storage = storage.Transient;
+		set beresp.status = 200;
+		set beresp.http.source = "vbe";
+		synthetic("synth");
+		set beresp.ttl = 1h;
+		return (deliver);
+	}
+} -start
+
+client c1 {
+	txreq -url "/"
+	rxresp
+	expect resp.status == 200
+} -run
+client c2 {
+	txreq -url "/"
+	rxresp
+	expect resp.status == 200
+} -run


More information about the varnish-commit mailing list