diff --git a/bin/varnishd/cache_center.c b/bin/varnishd/cache_center.c index 23183ed9f3..ea0a9618a2 100644 --- a/bin/varnishd/cache_center.c +++ b/bin/varnishd/cache_center.c @@ -930,13 +930,13 @@ cnt_streambody(struct sess *sp) AZ(sp->vbc); AN(sp->director); - if (!i && sp->obj->objcore != NULL) { + if (i) + sp->doclose = "Stream error"; + else if (sp->obj->objcore != NULL) { EXP_Insert(sp->obj); AN(sp->obj->objcore); AN(sp->obj->objcore->ban); HSH_Unbusy(sp); - } else { - sp->doclose = "Stream error"; } sp->wrk->acct_tmp.fetch++; sp->director = NULL; diff --git a/bin/varnishtest/tests/r01157.vtc b/bin/varnishtest/tests/r01157.vtc new file mode 100644 index 0000000000..9cecd9a2c1 --- /dev/null +++ b/bin/varnishtest/tests/r01157.vtc @@ -0,0 +1,26 @@ +varnishtest "#1157 - Connection close on pass and do_stream" + +server s1 { + rxreq + txresp + expect req.url == "/" + + rxreq + txresp + expect req.url == "/" +} -start + +varnish v1 -vcl+backend { + sub vcl_recv { return (pass); } + sub vcl_fetch { set beresp.do_stream = true; } +} -start + +client c1 { + txreq -url / + rxresp + expect resp.status == 200 + + txreq -url / + rxresp + expect resp.status == 200 +} -run