[4.0] d1f1a6d Gently shuffle things around a bit.

Poul-Henning Kamp phk at FreeBSD.org
Thu Mar 13 10:24:27 CET 2014


commit d1f1a6dd90d9f73ca33d6a76b42be7e3a9431ea0
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Fri Feb 21 09:00:16 2014 +0000

    Gently shuffle things around a bit.

diff --git a/bin/varnishd/cache/cache_expire.c b/bin/varnishd/cache/cache_expire.c
index eeda901..1471a64 100644
--- a/bin/varnishd/cache/cache_expire.c
+++ b/bin/varnishd/cache/cache_expire.c
@@ -234,6 +234,8 @@ EXP_Rearm(struct object *o, double now, double ttl, double grace, double keep)
 	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
 	assert(oc->refcnt > 0);
 
+	AN(oc->flags & OC_F_EXP);
+
 	if (!isnan(ttl))
 		o->exp.ttl = now + ttl - o->exp.t_origin;
 	if (!isnan(grace))
@@ -253,7 +255,6 @@ EXP_Rearm(struct object *o, double now, double ttl, double grace, double keep)
 	CHECK_OBJ_NOTNULL(lru, LRU_MAGIC);
 
 	Lck_Lock(&lru->mtx);
-	AN(oc->flags & OC_F_EXP);
 
 	if (!isnan(now) && when <= now)
 		oc->flags |= OC_F_DYING;
diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index 4e4b229..cdea235 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -56,10 +56,11 @@ vbf_release_req(struct busyobj *bo)
 }
 
 /*--------------------------------------------------------------------
+ * Turn the beresp into a obj
  */
 
 static int
-vbf_bereq2obj(struct worker *wrk, struct busyobj *bo)
+vbf_beresp2obj(struct worker *wrk, struct busyobj *bo)
 {
 	unsigned l;
 	char *b;
@@ -157,8 +158,6 @@ vbf_bereq2obj(struct worker *wrk, struct busyobj *bo)
 	else
 		obj->last_modified = floor(bo->exp.t_origin);
 
-	assert(WRW_IsReleased(wrk));
-
 	return (0);
 }
 
@@ -302,16 +301,16 @@ vbf_stp_fetchhdr(struct worker *wrk, struct busyobj *bo)
 		i = V1F_fetch_hdr(wrk, bo, bo->req);
 	}
 
-	if (bo->do_pass && bo->req != NULL)
-		vbf_release_req(bo); /* XXX : retry ?? */
-
-	AZ(bo->req);
-
 	if (i) {
 		AZ(bo->vbc);
 		return (F_STP_ERROR);
 	}
 
+	if (bo->do_pass && bo->req != NULL)
+		vbf_release_req(bo); /* XXX : retry ?? */
+
+	AZ(bo->req);
+
 	AN(bo->vbc);
 	http_VSL_log(bo->beresp);
 
@@ -463,13 +462,15 @@ vbf_stp_fetch(struct worker *wrk, struct busyobj *bo)
 	if (bo->htc.body_status == BS_NONE)
 		bo->do_stream = 0;
 
-	if (vbf_bereq2obj(wrk, bo)) {
+	if (vbf_beresp2obj(wrk, bo)) {
 		bo->stats = NULL;
 		(void)VFP_Error(bo, "Could not get storage");
 		VDI_CloseFd(&bo->vbc);
 		return (F_STP_DONE);
 	}
 
+	assert(WRW_IsReleased(wrk));
+
 	obj = bo->fetch_obj;
 
 	/*
@@ -536,11 +537,6 @@ vbf_stp_fetch(struct worker *wrk, struct busyobj *bo)
 	if (!bo->do_stream && bo->state != BOS_FAILED)
 		HSH_Unbusy(&wrk->stats, obj->objcore);
 
-	if (bo->state != BOS_FAILED && !(obj->objcore->flags & OC_F_PRIVATE)) {
-		EXP_Insert(obj->objcore);
-		AN(obj->objcore->ban);
-	}
-
 	HSH_Complete(obj->objcore);
 
 	assert(bo->refcount >= 1);
@@ -615,10 +611,6 @@ vbf_stp_condfetch(struct worker *wrk, struct busyobj *bo)
 	VBO_setstate(bo, BOS_FETCHING);
 	HSH_Unbusy(&wrk->stats, obj->objcore);
 
-	if (!(obj->objcore->flags & OC_F_PRIVATE)) {
-		EXP_Insert(obj->objcore);
-		AN(obj->objcore->ban);
-	}
 
 	st = NULL;
 	al = 0;
@@ -683,19 +675,17 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo)
 
 	xxxassert(wrk->handling == VCL_RET_DELIVER);
 
+	if (bo->req != NULL)
+		vbf_release_req(bo);
+
 	http_PrintfHeader(bo->beresp, "Content-Length: %jd", (intmax_t)0);
 	http_PrintfHeader(bo->beresp, "X-XXXPHK: yes");
 
-	if (vbf_bereq2obj(wrk, bo)) {
+	if (vbf_beresp2obj(wrk, bo)) {
 		INCOMPL();
 	}
 
 	HSH_Unbusy(&wrk->stats, bo->fetch_obj->objcore);
-
-	if (!(bo->fetch_obj->objcore->flags & OC_F_PRIVATE)) {
-		EXP_Insert(bo->fetch_obj->objcore);
-		AN(bo->fetch_obj->objcore->ban);
-	}
 	VBO_setstate(bo, BOS_FINISHED);
 	HSH_Complete(bo->fetch_obj->objcore);
 	return (F_STP_DONE);
diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c
index b7eba44..9d5f9d1 100644
--- a/bin/varnishd/cache/cache_hash.c
+++ b/bin/varnishd/cache/cache_hash.c
@@ -678,8 +678,12 @@ HSH_Unbusy(struct dstat *ds, struct objcore *oc)
 	if (oh->waitinglist != NULL)
 		hsh_rush(ds, oh);
 	Lck_Unlock(&oh->mtx);
-	if (!(oc->flags & OC_F_PRIVATE))
+	if (!(oc->flags & OC_F_PRIVATE)) {
 		BAN_NewObjCore(oc);
+		EXP_Insert(oc);
+		AN(oc->flags & OC_F_EXP);
+		AN(oc->ban);
+	}
 }
 
 /*---------------------------------------------------------------------



More information about the varnish-commit mailing list