[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