[master] 129be2f Various polish

Poul-Henning Kamp phk at varnish-cache.org
Wed Sep 4 08:41:28 CEST 2013


commit 129be2f9a9dd213d977edd7002432dcad1348e30
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed Sep 4 06:41:19 2013 +0000

    Various polish

diff --git a/bin/varnishd/cache/cache_ban.c b/bin/varnishd/cache/cache_ban.c
index 1229dfb..dbad851 100644
--- a/bin/varnishd/cache/cache_ban.c
+++ b/bin/varnishd/cache/cache_ban.c
@@ -1073,7 +1073,7 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl)
 			if (DO_DEBUG(DBG_LURKER))
 				VSLb(vsl, SLT_Debug, "lurker done: %p %u %u",
 				    oc, oc->flags & OC_F_LURK, pass);
-			(void)HSH_Deref(&wrk->stats, NULL, &o);
+			(void)HSH_DerefObj(&wrk->stats, &o);
 			VTIM_sleep(cache_param->ban_lurker_sleep);
 		}
 		Lck_AssertHeld(&ban_mtx);
diff --git a/bin/varnishd/cache/cache_busyobj.c b/bin/varnishd/cache/cache_busyobj.c
index 4b6c37f..063c49c 100644
--- a/bin/varnishd/cache/cache_busyobj.c
+++ b/bin/varnishd/cache/cache_busyobj.c
@@ -192,7 +192,7 @@ VBO_DerefBusyObj(struct worker *wrk, struct busyobj **pbo)
 
 	if (bo->fetch_objcore != NULL) {
 		AN(wrk);
-		(void)HSH_Deref(&wrk->stats, bo->fetch_objcore, NULL);
+		(void)HSH_DerefObjCore(&wrk->stats, &bo->fetch_objcore);
 	}
 
 	VCL_Rel(&bo->vcl);
diff --git a/bin/varnishd/cache/cache_expire.c b/bin/varnishd/cache/cache_expire.c
index 2271949..090a209 100644
--- a/bin/varnishd/cache/cache_expire.c
+++ b/bin/varnishd/cache/cache_expire.c
@@ -411,7 +411,7 @@ exp_timer(struct worker *wrk, void *priv)
 		VSLb(&vsl, SLT_ExpKill, "%u %.0f",
 		    oc_getxid(&wrk->stats, oc) & VSL_IDENTMASK,
 		    EXP_Ttl(NULL, o) - t);
-		(void)HSH_Deref(&wrk->stats, oc, NULL);
+		(void)HSH_DerefObjCore(&wrk->stats, &oc);
 	}
 	NEEDLESS_RETURN(NULL);
 }
@@ -457,7 +457,7 @@ EXP_NukeOne(struct busyobj *bo, struct lru *lru)
 	/* XXX: bad idea for -spersistent */
 	VSLb(bo->vsl, SLT_ExpKill, "%u LRU",
 	    oc_getxid(bo->stats, oc) & VSL_IDENTMASK);
-	(void)HSH_Deref(bo->stats, oc, NULL);
+	(void)HSH_DerefObjCore(bo->stats, &oc);
 	return (1);
 }
 
@@ -513,7 +513,7 @@ EXP_NukeLRU(struct worker *wrk, struct vsl_log *vsl, struct lru *lru)
 			    oc_getxid(&wrk->stats, oc) & VSL_IDENTMASK,
 			    EXP_Ttl(NULL, o) - t);
 			EXP_Set_ttl(&o->exp, 0.);
-			(void)HSH_Deref(&wrk->stats, oc, NULL);
+			(void)HSH_DerefObjCore(&wrk->stats, &oc);
 		}
 
 		Lck_Lock(&lru->mtx);
diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c
index ad63438..46ec3ba 100644
--- a/bin/varnishd/cache/cache_hash.c
+++ b/bin/varnishd/cache/cache_hash.c
@@ -605,7 +605,7 @@ HSH_Purge(struct worker *wrk, struct objhead *oh, double ttl, double grace)
 		o->exp.ttl = ttl;
 		o->exp.grace = grace;
 		EXP_Rearm(o);
-		(void)HSH_Deref(&wrk->stats, NULL, &o);
+		(void)HSH_DerefObj(&wrk->stats, &o);
 	}
 	WS_Release(wrk->aws, 0);
 }
@@ -623,7 +623,7 @@ HSH_Drop(struct worker *wrk, struct object **oo)
 	AN(oo);
 	CHECK_OBJ_NOTNULL(*oo, OBJECT_MAGIC);
 	(*oo)->exp.ttl = -1.;
-	AZ(HSH_Deref(&wrk->stats, NULL, oo));
+	AZ(HSH_DerefObj(&wrk->stats, oo));
 }
 
 /*---------------------------------------------------------------------
@@ -727,21 +727,30 @@ HSH_Ref(struct objcore *oc)
  */
 
 int
-HSH_Deref(struct dstat *ds, struct objcore *oc, struct object **oo)
+HSH_DerefObj(struct dstat *ds, struct object **oo)
 {
-	struct object *o = NULL;
+	struct object *o;
+	struct objcore *oc;
+
+	AN(oo);
+	o = *oo;
+	*oo = NULL;
+
+	CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
+	oc = o->objcore;
+	return (HSH_DerefObjCore(ds, &oc));
+}
+
+int
+HSH_DerefObjCore(struct dstat *ds, struct objcore **ocp)
+{
+	struct objcore *oc;
 	struct objhead *oh;
 	unsigned r;
 
-	/* Only one arg at a time */
-	assert(oc == NULL || oo == NULL);
-
-	if (oo != NULL) {
-		o = *oo;
-		*oo = NULL;
-		CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
-		oc = o->objcore;
-	}
+	AN(ocp);
+	oc = *ocp;
+	*ocp = NULL;
 
 	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
 	assert(oc->refcnt > 0);
diff --git a/bin/varnishd/cache/cache_req_fsm.c b/bin/varnishd/cache/cache_req_fsm.c
index c918ec1..5fc5171 100644
--- a/bin/varnishd/cache/cache_req_fsm.c
+++ b/bin/varnishd/cache/cache_req_fsm.c
@@ -119,7 +119,7 @@ cnt_stream(struct worker *wrk, struct req *req)
 	assert(bo->state >= BOS_FINISHED);
 
 	if (bo->state == BOS_FAILED) {
-		(void)HSH_Deref(&wrk->stats, NULL, &req->obj);
+		(void)HSH_DerefObj(&wrk->stats, &req->obj);
 		VBO_DerefBusyObj(wrk, &bo);
 		req->err_code = 503;
 		req->req_step = R_STP_ERROR;
@@ -136,7 +136,7 @@ cnt_stream(struct worker *wrk, struct req *req)
 		STV_Freestore(req->obj);
 
 	assert(WRW_IsReleased(wrk));
-	(void)HSH_Deref(&wrk->stats, NULL, &req->obj);
+	(void)HSH_DerefObj(&wrk->stats, &req->obj);
 	http_Teardown(req->resp);
 	return (REQ_FSM_DONE);
 }
@@ -164,6 +164,7 @@ cnt_deliver(struct worker *wrk, struct req *req)
 	CHECK_OBJ_NOTNULL(req->obj->objcore, OBJCORE_MAGIC);
 	CHECK_OBJ_NOTNULL(req->obj->objcore->objhead, OBJHEAD_MAGIC);
 	CHECK_OBJ_NOTNULL(req->vcl, VCL_CONF_MAGIC);
+	assert(WRW_IsReleased(wrk));
 
 	assert(req->obj->objcore->refcnt > 0);
 
@@ -231,7 +232,7 @@ cnt_deliver(struct worker *wrk, struct req *req)
 		wrk->handling = VCL_RET_DELIVER;
 
 	if (wrk->handling == VCL_RET_RESTART) {
-		(void)HSH_Deref(&wrk->stats, NULL, &req->obj);
+		(void)HSH_DerefObj(&wrk->stats, &req->obj);
 		AZ(req->obj);
 		http_Teardown(req->resp);
 		req->req_step = R_STP_RESTART;
@@ -247,7 +248,7 @@ cnt_deliver(struct worker *wrk, struct req *req)
 
 	assert(WRW_IsReleased(wrk));
 VSLb(req->vsl, SLT_Debug, "XXX REF %d", req->obj->objcore->refcnt);
-	(void)HSH_Deref(&wrk->stats, NULL, &req->obj);
+	(void)HSH_DerefObj(&wrk->stats, &req->obj);
 	http_Teardown(req->resp);
 	return (REQ_FSM_DONE);
 }
@@ -290,7 +291,7 @@ cnt_error(struct worker *wrk, struct req *req)
 	if (req->obj == NULL) {
 		req->doclose = SC_OVERLOAD;
 		req->director = NULL;
-		AZ(HSH_Deref(&wrk->stats, bo->fetch_objcore, NULL));
+		AZ(HSH_DerefObjCore(&wrk->stats, &bo->fetch_objcore));
 		bo->fetch_objcore = NULL;
 		http_Teardown(bo->beresp);
 		http_Teardown(bo->bereq);
@@ -369,24 +370,22 @@ cnt_fetch(struct worker *wrk, struct req *req)
 
 	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
 	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	AZ(req->obj);
 
 	req->acct_req.fetch++;
-	//assert(bo->refcount > 0);
 	(void)HTTP1_DiscardReqBody(req);
 
 	if (req->objcore->flags & OC_F_FAILED) {
 		req->err_code = 503;
 		req->req_step = R_STP_ERROR;
+		//XXX ? AZ(HSH_DerefObjCore(&wrk->stats, &req->objcore));
 		req->objcore = NULL;
 		return (REQ_FSM_MORE);
 	}
 
-	//assert (bo->state >= BOS_FETCHING);
 	req->obj = oc_getobj(&wrk->stats, req->objcore);
-	//assert(req->obj == bo->fetch_obj);
 	req->objcore = NULL;
 	req->err_code = req->obj->response;
-	assert(WRW_IsReleased(wrk));
 	req->req_step = R_STP_DELIVER;
 	return (REQ_FSM_MORE);
 }
@@ -477,7 +476,7 @@ cnt_lookup(struct worker *wrk, struct req *req)
 		/* Found a hit-for-pass */
 		VSLb(req->vsl, SLT_Debug, "XXXX HIT-FOR-PASS");
 		AZ(boc);
-		(void)HSH_Deref(&wrk->stats, oc, NULL);
+		(void)HSH_DerefObjCore(&wrk->stats, &oc);
 		req->objcore = NULL;
 		wrk->stats.cache_hitpass++;
 		req->req_step = R_STP_PASS;
@@ -506,7 +505,7 @@ cnt_lookup(struct worker *wrk, struct req *req)
 		req->req_step = R_STP_DELIVER;
 		return (REQ_FSM_MORE);
 	case VCL_RET_FETCH:
-		(void)HSH_Deref(&wrk->stats, NULL, &req->obj);
+		(void)HSH_DerefObj(&wrk->stats, &req->obj);
 		req->objcore = boc;
 		req->req_step = R_STP_MISS;
 		return (REQ_FSM_MORE);
@@ -525,11 +524,11 @@ cnt_lookup(struct worker *wrk, struct req *req)
 	}
 
 	/* Drop our object, we won't need it */
-	(void)HSH_Deref(&wrk->stats, NULL, &req->obj);
+	(void)HSH_DerefObj(&wrk->stats, &req->obj);
 	req->objcore = NULL;
 
 	if (boc != NULL) {
-		(void)HSH_Deref(&wrk->stats, boc, NULL);
+		(void)HSH_DerefObjCore(&wrk->stats, &boc);
 		free(req->vary_b);
 		req->vary_b = NULL;
 	}
@@ -563,35 +562,25 @@ cnt_miss(struct worker *wrk, struct req *req)
 
 	VCL_miss_method(req->vcl, wrk, req, NULL, req->http->ws);
 	switch (wrk->handling) {
+	case VCL_RET_FETCH:
+		wrk->stats.cache_miss++;
+		VBF_Fetch(wrk, req, req->objcore, VBF_NORMAL);
+		req->req_step = R_STP_FETCH;
+		return (REQ_FSM_MORE);
 	case VCL_RET_ERROR:
-		free(req->vary_b);
-		AZ(HSH_Deref(&wrk->stats, req->objcore, NULL));
-		req->objcore = NULL;
 		req->req_step = R_STP_ERROR;
-		return (REQ_FSM_MORE);
+		break;
 	case VCL_RET_RESTART:
-		free(req->vary_b);
-		AZ(HSH_Deref(&wrk->stats, req->objcore, NULL));
-		req->objcore = NULL;
 		req->req_step = R_STP_RESTART;
-		return (REQ_FSM_MORE);
+		break;
 	case VCL_RET_PASS:
-		free(req->vary_b);
-		AZ(HSH_Deref(&wrk->stats, req->objcore, NULL));
-		req->objcore = NULL;
 		req->req_step = R_STP_PASS;
-		return (REQ_FSM_MORE);
-	case VCL_RET_FETCH:
 		break;
 	default:
-		WRONG("wrong return from vcl_miss{}");
+		WRONG("Illegal return from vcl_miss{}");
 	}
-
-	wrk->stats.cache_miss++;
-
-	AN (req->objcore);
-	VBF_Fetch(wrk, req, req->objcore, VBF_NORMAL);
-	req->req_step = R_STP_FETCH;
+	free(req->vary_b);
+	AZ(HSH_DerefObjCore(&wrk->stats, &req->objcore));
 	return (REQ_FSM_MORE);
 }
 
@@ -623,20 +612,23 @@ cnt_pass(struct worker *wrk, struct req *req)
 	AZ(req->obj);
 
 	VCL_pass_method(req->vcl, wrk, req, NULL, req->http->ws);
-	if (wrk->handling == VCL_RET_ERROR) {
+	switch (wrk->handling) {
+	case VCL_RET_ERROR:
 		req->req_step = R_STP_ERROR;
-		return (REQ_FSM_MORE);
-	}
-	if (wrk->handling == VCL_RET_RESTART) {
-		INCOMPL();
+		break;
+	case VCL_RET_RESTART:
+		req->req_step = R_STP_RESTART;
+		break;
+	case VCL_RET_FETCH:
+		req->acct_req.pass++;
+		req->objcore = HSH_Private(wrk);
+		CHECK_OBJ_NOTNULL(req->objcore, OBJCORE_MAGIC);
+		VBF_Fetch(wrk, req, req->objcore, VBF_PASS);
+		req->req_step = R_STP_FETCH;
+		break;
+	default:
+		WRONG("Illegal return from cnt_pass{}");
 	}
-	assert (wrk->handling == VCL_RET_FETCH);
-	req->acct_req.pass++;
-
-	req->objcore = HSH_Private(wrk);
-	AN(req->objcore);
-	VBF_Fetch(wrk, req, req->objcore, VBF_PASS);
-	req->req_step = R_STP_FETCH;
 	return (REQ_FSM_MORE);
 }
 
@@ -807,13 +799,15 @@ cnt_recv(struct worker *wrk, struct req *req)
 		req->req_step = R_STP_LOOKUP;
 		return (REQ_FSM_MORE);
 	case VCL_RET_PIPE:
-		if (req->esi_level > 0) {
-			/* XXX: VSL something */
-			INCOMPL();
-			return (REQ_FSM_DONE);
+		if (req->esi_level == 0) {
+			req->req_step = R_STP_PIPE;
+			return (REQ_FSM_MORE);
 		}
-		req->req_step = R_STP_PIPE;
-		return (REQ_FSM_MORE);
+		VSLb(req->vsl, SLT_VCL_Error,
+		    "vcl_recv{} returns pipe for ESI included object."
+		    "  Doing pass.");
+		req->req_step = R_STP_PASS;
+		return (REQ_FSM_DONE);
 	case VCL_RET_PASS:
 		req->req_step = R_STP_PASS;
 		return (REQ_FSM_MORE);
@@ -821,7 +815,7 @@ cnt_recv(struct worker *wrk, struct req *req)
 		req->req_step = R_STP_ERROR;
 		return (REQ_FSM_MORE);
 	default:
-		WRONG("Illegal action in vcl_recv{}");
+		WRONG("Illegal return from vcl_recv{}");
 	}
 }
 
@@ -855,7 +849,7 @@ cnt_purge(struct worker *wrk, struct req *req)
 
 	HSH_Purge(wrk, boc->objhead, 0, 0);
 
-	AZ(HSH_Deref(&wrk->stats, boc, NULL));
+	AZ(HSH_DerefObjCore(&wrk->stats, &boc));
 
 	VCL_purge_method(req->vcl, wrk, req, NULL, req->http->ws);
 	req->req_step = R_STP_ERROR;
diff --git a/bin/varnishd/hash/hash_slinger.h b/bin/varnishd/hash/hash_slinger.h
index 5d9e91d..152eebd 100644
--- a/bin/varnishd/hash/hash_slinger.h
+++ b/bin/varnishd/hash/hash_slinger.h
@@ -113,7 +113,8 @@ void HSH_Unbusy(struct dstat *, struct objcore *);
 void HSH_Complete(struct objcore *oc);
 void HSH_DeleteObjHead(struct dstat *, struct objhead *oh);
 int HSH_DerefObjHead(struct dstat *, struct objhead **poh);
-int HSH_Deref(struct dstat *, struct objcore *oc, struct object **o);
+int HSH_DerefObjCore(struct dstat *, struct objcore **ocp);
+int HSH_DerefObj(struct dstat *, struct object **o);
 #endif /* VARNISH_CACHE_CHILD */
 
 extern const struct hash_slinger hsl_slinger;



More information about the varnish-commit mailing list