[master] 32c8acb Handle 'return (abandon);' in vcl_backend_response.

Dag Haavi Finstad daghf at varnish-software.com
Mon Mar 24 15:12:44 CET 2014


commit 32c8acbf89a0ce4f3a6fe1ed16b08ae7e9af7564
Author: Dag Haavi Finstad <daghf at varnish-software.com>
Date:   Mon Mar 24 14:54:30 2014 +0100

    Handle 'return (abandon);' in vcl_backend_response.
    
    Test case by: Federico G. Schwindt
    
    Fixes: #1417

diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index 5b5be58..93be439 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -341,6 +341,9 @@ vbf_stp_startfetch(struct worker *wrk, struct busyobj *bo)
 
 	VCL_backend_response_method(bo->vcl, wrk, NULL, bo, bo->beresp->ws);
 
+	if (wrk->handling == VCL_RET_ABANDON)
+		return (F_STP_FAIL);
+
 	if (wrk->handling == VCL_RET_RETRY) {
 		AN (bo->vbc);
 		VDI_CloseFd(&bo->vbc);
diff --git a/bin/varnishtest/tests/r01417.vtc b/bin/varnishtest/tests/r01417.vtc
new file mode 100644
index 0000000..60263c7
--- /dev/null
+++ b/bin/varnishtest/tests/r01417.vtc
@@ -0,0 +1,18 @@
+varnishtest "vcl_backend_response abandon"
+
+server s1 {
+	rxreq
+	txresp
+} -start
+
+varnish v1 -vcl+backend {
+	sub vcl_backend_response {
+		return (abandon);
+	}
+} -start
+
+client c1 {
+	txreq
+	rxresp
+	expect resp.status == 503
+} -run



More information about the varnish-commit mailing list