[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