[master] 2a7cd48 Eliminate oc->methods, access is now through the stevedore

Poul-Henning Kamp phk at FreeBSD.org
Mon Jun 30 10:29:25 CEST 2014


commit 2a7cd48e79a769141c49c4b2a6c46178fbebded1
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Jun 30 08:29:03 2014 +0000

    Eliminate oc->methods, access is now through the stevedore

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 7ecaf8f..ad4c3ab 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -419,7 +419,6 @@ struct objcore {
 #define OBJCORE_MAGIC		0x4d301302
 	int			refcnt;
 	const struct stevedore	*stevedore;
-	const struct objcore_methods	*methods;
 	void			*priv;
 	uintptr_t		priv2;
 	struct objhead		*objhead;
diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c
index 70796e7..c626117 100644
--- a/bin/varnishd/cache/cache_hash.c
+++ b/bin/varnishd/cache/cache_hash.c
@@ -636,7 +636,7 @@ HSH_Fail(struct objcore *oc)
 	 * will not consider this oc, or an object hung of the oc
 	 * so that it can consider it.
 	 */
-	assert((oc->flags & OC_F_BUSY) || (oc->methods != NULL));
+	assert((oc->flags & OC_F_BUSY) || (oc->stevedore != NULL));
 
 	Lck_Lock(&oh->mtx);
 	oc->flags |= OC_F_FAILED;
@@ -675,7 +675,7 @@ HSH_Unbusy(struct dstat *ds, struct objcore *oc)
 	oh = oc->objhead;
 	CHECK_OBJ(oh, OBJHEAD_MAGIC);
 
-	AN(oc->methods);
+	AN(oc->stevedore);
 	AN(oc->flags & OC_F_BUSY);
 	assert(oh->refcnt > 0);
 
@@ -800,7 +800,7 @@ HSH_DerefObjCore(struct dstat *ds, struct objcore **ocp)
 	BAN_DestroyObj(oc);
 	AZ(oc->ban);
 
-	if (oc->methods != NULL)
+	if (oc->stevedore != NULL)
 		ObjFreeObj(oc, ds);
 	FREE_OBJ(oc);
 
diff --git a/bin/varnishd/cache/cache_obj.c b/bin/varnishd/cache/cache_obj.c
index 038255d..adb35f6 100644
--- a/bin/varnishd/cache/cache_obj.c
+++ b/bin/varnishd/cache/cache_obj.c
@@ -135,6 +135,16 @@ ObjIterEnd(struct objiter **oi)
 	*oi = NULL;
 }
 
+static const struct objcore_methods *
+obj_getmethods(const struct objcore *oc)
+{
+
+	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
+	CHECK_OBJ_NOTNULL(oc->stevedore, STEVEDORE_MAGIC);
+	AN(oc->stevedore->methods);
+	return (oc->stevedore->methods);
+}
+
 void
 ObjTrimStore(struct objcore *oc, struct dstat *ds)
 {
@@ -143,6 +153,7 @@ ObjTrimStore(struct objcore *oc, struct dstat *ds)
 	struct object *o;
 
 	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
+	AN(ds);
 	stv = oc->stevedore;
 	CHECK_OBJ_NOTNULL(stv, STEVEDORE_MAGIC);
 	o = ObjGetObj(oc, ds);
@@ -161,51 +172,49 @@ ObjTrimStore(struct objcore *oc, struct dstat *ds)
 unsigned
 ObjGetXID(struct objcore *oc, struct dstat *ds)
 {
-	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
+	const struct objcore_methods *m = obj_getmethods(oc);
 
-	AN(oc->methods);
-	AN(oc->methods->getxid);
-	return (oc->methods->getxid(ds, oc));
+	AN(ds);
+	AN(m->getxid);
+	return (m->getxid(ds, oc));
 }
 
 struct object *
 ObjGetObj(struct objcore *oc, struct dstat *ds)
 {
+	const struct objcore_methods *m = obj_getmethods(oc);
 
-	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
-	// AZ(oc->flags & OC_F_BUSY);
-	AN(oc->methods);
-	AN(oc->methods->getobj);
-	return (oc->methods->getobj(ds, oc));
+	AN(ds);
+	AN(m->getobj);
+	return (m->getobj(ds, oc));
 }
 
 void
 ObjUpdateMeta(struct objcore *oc)
 {
+	const struct objcore_methods *m = obj_getmethods(oc);
 
-	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
-	AN(oc->methods);
-	if (oc->methods->updatemeta != NULL)
-		oc->methods->updatemeta(oc);
+	if (m->updatemeta != NULL)
+		m->updatemeta(oc);
 }
 
 void
 ObjFreeObj(struct objcore *oc, struct dstat *ds)
 {
+	const struct objcore_methods *m = obj_getmethods(oc);
 
 	AN(ds);
 	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
-	AN(oc->methods);
-	AN(oc->methods->freeobj);
-	oc->methods->freeobj(ds, oc);
+	AN(m->freeobj);
+	m->freeobj(ds, oc);
 }
 
 struct lru *
 ObjGetLRU(const struct objcore *oc)
 {
+	const struct objcore_methods *m = obj_getmethods(oc);
 
 	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
-	AN(oc->methods);
-	AN(oc->methods->getlru);
-	return (oc->methods->getlru(oc));
+	AN(m->getlru);
+	return (m->getlru(oc));
 }
diff --git a/bin/varnishd/storage/stevedore.c b/bin/varnishd/storage/stevedore.c
index 7ddee95..c9520f8 100644
--- a/bin/varnishd/storage/stevedore.c
+++ b/bin/varnishd/storage/stevedore.c
@@ -77,7 +77,7 @@ default_oc_freeobj(struct dstat *ds, struct objcore *oc)
 	AN(ds);
 	CAST_OBJ_NOTNULL(o, oc->priv, OBJECT_MAGIC);
 	oc->priv = NULL;
-	oc->methods = NULL;
+	oc->stevedore = NULL;
 	o->magic = 0;
 
 	STV_Freestore(o);
@@ -291,7 +291,6 @@ STV_MkObject(struct stevedore *stv, struct busyobj *bo,
 
 	o->objcore->stevedore = stv;
 	AN(stv->methods);
-	o->objcore->methods = stv->methods;
 	o->objcore->priv = o;
 	o->objcore->priv2 = (uintptr_t)stv;
 	VSLb(bo->vsl, SLT_Storage, "%s %s", stv->name, stv->ident);
@@ -386,7 +385,6 @@ STV_NewObject(struct busyobj *bo, const char *hint,
 	CHECK_OBJ_NOTNULL(o->objcore, OBJCORE_MAGIC);
 	assert(o->objcore->stevedore == stv);
 	AN(stv->methods);
-	AN(o->objcore->methods);
 	return (o);
 }
 
diff --git a/bin/varnishd/storage/storage_persistent_silo.c b/bin/varnishd/storage/storage_persistent_silo.c
index c0180d8..5119467 100644
--- a/bin/varnishd/storage/storage_persistent_silo.c
+++ b/bin/varnishd/storage/storage_persistent_silo.c
@@ -155,7 +155,6 @@ smp_load_seg(struct worker *wrk, const struct smp_sc *sc,
 		oc->flags |= OC_F_NEEDFIXUP;
 		oc->flags &= ~OC_F_BUSY;
 		oc->stevedore = sc->parent;
-		oc->methods = sc->parent->methods;
 		smp_init_oc(oc, sg, no);
 		oc->ban = BAN_RefBan(oc, so->ban, sc->tailban);
 		HSH_Insert(wrk, so->hash, oc);
@@ -420,7 +419,7 @@ smp_oc_getobj(struct dstat *ds, struct objcore *oc)
 	int bad;
 
 	/* Some calls are direct, but they should match anyway */
-	assert(oc->methods->getobj == smp_oc_getobj);
+	assert(oc->stevedore->methods->getobj == smp_oc_getobj);
 
 	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
 	if (ds == NULL)



More information about the varnish-commit mailing list