[master] 7804592 Make the object iterator work on objcore and get rid of ims_obj.

Poul-Henning Kamp phk at FreeBSD.org
Mon Aug 18 08:54:17 CEST 2014


commit 780459204d77e421ec859a5d3b8771de68acd75e
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Aug 18 06:53:53 2014 +0000

    Make the object iterator work on objcore and get rid of ims_obj.

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 0e6a240..f71f507 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -494,7 +494,6 @@ struct busyobj {
 	struct http		*bereq0;
 	struct http		*bereq;
 	struct http		*beresp;
-	struct object		*ims_obj;
 	struct objcore		*ims_oc;
 	struct objcore		*fetch_objcore;
 
@@ -1058,7 +1057,7 @@ enum objiter_status {
 	OIS_STREAM,
 	OIS_ERROR,
 };
-struct objiter *ObjIterBegin(struct worker *, struct object *);
+struct objiter *ObjIterBegin(struct worker *, struct objcore *);
 enum objiter_status ObjIter(struct objiter *, void **, ssize_t *);
 void ObjIterEnd(struct objiter **);
 void ObjTrimStore(struct objcore *, struct dstat *);
diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index 03b4772..19c9bf6 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -590,7 +590,7 @@ vbf_stp_condfetch(struct worker *wrk, struct busyobj *bo)
 	al = 0;
 
 	ol = ObjGetLen(bo->ims_oc, bo->stats);
-	oi = ObjIterBegin(wrk, bo->ims_obj);
+	oi = ObjIterBegin(wrk, bo->ims_oc);
 	do {
 		ois = ObjIter(oi, &sp, &sl);
 		while (sl > 0) {
@@ -803,10 +803,8 @@ vbf_fetch_thread(struct worker *wrk, void *priv)
 	}
 	AZ(bo->fetch_objcore->busyobj);
 
-	if (bo->ims_oc != NULL) {
+	if (bo->ims_oc != NULL)
 		(void)HSH_DerefObjCore(&wrk->stats, &bo->ims_oc);
-		bo->ims_obj = NULL;
-	}
 
 	bo->stats = NULL;
 
@@ -823,7 +821,6 @@ VBF_Fetch(struct worker *wrk, struct req *req, struct objcore *oc,
 {
 	struct busyobj *bo;
 	const char *how;
-	struct object *oldobj = NULL;
 
 	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
 	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
@@ -861,17 +858,12 @@ VBF_Fetch(struct worker *wrk, struct req *req, struct objcore *oc,
 		HSH_Ref(oc);
 	bo->fetch_objcore = oc;
 
-	AZ(bo->ims_obj);
 	AZ(bo->ims_oc);
 	if (oldoc != NULL &&
 	    ObjCheckFlag(oldoc, &req->wrk->stats, OF_IMSCAND)) {
 		assert(oldoc->refcnt > 0);
 		HSH_Ref(oldoc);
 		bo->ims_oc = oldoc;
-
-		oldobj = ObjGetObj(oldoc, &wrk->stats);
-		CHECK_OBJ_NOTNULL(oldobj, OBJECT_MAGIC);
-		bo->ims_obj = oldobj;
 	}
 
 	AZ(bo->req);
diff --git a/bin/varnishd/cache/cache_http1_deliver.c b/bin/varnishd/cache/cache_http1_deliver.c
index f27f1bd..194193a 100644
--- a/bin/varnishd/cache/cache_http1_deliver.c
+++ b/bin/varnishd/cache/cache_http1_deliver.c
@@ -174,7 +174,7 @@ v1d_WriteDirObj(struct req *req)
 
 	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
 
-	oi = ObjIterBegin(req->wrk, req->obj);
+	oi = ObjIterBegin(req->wrk, req->objcore);
 	XXXAN(oi);
 
 	do {
diff --git a/bin/varnishd/cache/cache_obj.c b/bin/varnishd/cache/cache_obj.c
index 6d4f593..8e6474b 100644
--- a/bin/varnishd/cache/cache_obj.c
+++ b/bin/varnishd/cache/cache_obj.c
@@ -46,10 +46,13 @@ struct objiter {
 };
 
 struct objiter *
-ObjIterBegin(struct worker *wrk, struct object *obj)
+ObjIterBegin(struct worker *wrk, struct objcore *oc)
 {
 	struct objiter *oi;
+	struct object *obj;
 
+	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
+	obj = ObjGetObj(oc, &wrk->stats);
 	CHECK_OBJ_NOTNULL(obj, OBJECT_MAGIC);
 	ALLOC_OBJ(oi, OBJITER_MAGIC);
 	if (oi == NULL)
diff --git a/bin/varnishd/cache/cache_panic.c b/bin/varnishd/cache/cache_panic.c
index 74dcab9..43919d7 100644
--- a/bin/varnishd/cache/cache_panic.c
+++ b/bin/varnishd/cache/cache_panic.c
@@ -341,8 +341,8 @@ pan_busyobj(const struct busyobj *bo)
 	pan_ws(bo->ws_o, 4);
 	if (bo->fetch_objcore)
 		pan_objcore("FETCH", bo->fetch_objcore);
-	if (bo->ims_obj)
-		pan_object("IMS", bo->ims_obj);
+	if (bo->ims_oc)
+		pan_objcore("IMS", bo->ims_oc);
 	VSB_printf(pan_vsp, "  }\n");
 }
 



More information about the varnish-commit mailing list