[master] 86d73a6 Cleanup

Poul-Henning Kamp phk at FreeBSD.org
Tue Jan 5 12:53:38 CET 2016


commit 86d73a65b52359e82f5eb42204c7249c7d236754
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Tue Jan 5 11:53:29 2016 +0000

    Cleanup

diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index cc93d97..709a03b 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -779,18 +779,14 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo)
 	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
 	CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
 	CHECK_OBJ_NOTNULL(bo->fetch_objcore, OBJCORE_MAGIC);
+	AN(bo->fetch_objcore->flags & OC_F_BUSY);
 	assert(bo->director_state == DIR_S_NULL);
 
-	if(bo->fetch_objcore->stobj->stevedore != NULL)
-		ObjFreeObj(bo->wrk, bo->fetch_objcore);
-
 	now = W_TIM_real(wrk);
 	VSLb_ts_busyobj(bo, "Error", now);
 
-	AN(bo->fetch_objcore->flags & OC_F_BUSY);
-
-	synth_body = VSB_new_auto();
-	AN(synth_body);
+	if(bo->fetch_objcore->stobj->stevedore != NULL)
+		ObjFreeObj(bo->wrk, bo->fetch_objcore);
 
 	// XXX: reset all beresp flags ?
 
@@ -802,26 +798,23 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo)
 	EXP_Clr(&bo->fetch_objcore->exp);
 	bo->fetch_objcore->exp.t_origin = bo->t_prev;
 
+	synth_body = VSB_new_auto();
+	AN(synth_body);
+
 	VCL_backend_error_method(bo->vcl, wrk, NULL, bo, synth_body);
 
 	AZ(VSB_finish(synth_body));
 
-	if (wrk->handling == VCL_RET_RETRY ||
-	    wrk->handling == VCL_RET_ABANDON) {
+	if (wrk->handling == VCL_RET_ABANDON) {
 		VSB_delete(synth_body);
+		return (F_STP_FAIL);
+	}
 
-		if (bo->director_state != DIR_S_NULL) {
-			bo->htc->doclose = SC_RESP_CLOSE;
-			VDI_Finish(bo->wrk, bo);
-		}
-
-		if (wrk->handling == VCL_RET_RETRY) {
-			if (bo->retries++ < cache_param->max_retries)
-				return (F_STP_RETRY);
-			VSLb(bo->vsl, SLT_VCL_Error,
-			    "Too many retries, delivering 503");
-		}
-
+	if (wrk->handling == VCL_RET_RETRY) {
+		VSB_delete(synth_body);
+		if (bo->retries++ < cache_param->max_retries)
+			return (F_STP_RETRY);
+		VSLb(bo->vsl, SLT_VCL_Error, "Too many retries, failing");
 		return (F_STP_FAIL);
 	}
 
diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c
index 85da4f0..dd03596 100644
--- a/bin/varnishd/cache/cache_hash.c
+++ b/bin/varnishd/cache/cache_hash.c
@@ -814,6 +814,7 @@ HSH_DerefObjHead(struct worker *wrk, struct objhead **poh)
 	CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC);
 
 	if (oh == private_oh) {
+		AZ(oh->waitinglist);
 		Lck_Lock(&oh->mtx);
 		assert(oh->refcnt > 1);
 		oh->refcnt--;



More information about the varnish-commit mailing list