[master] 18caa69 Unify objcore allocation
Poul-Henning Kamp
phk at FreeBSD.org
Thu Feb 4 11:35:52 CET 2016
commit 18caa69dad3b78838c2af5d9699d08475c9ce2ae
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Thu Feb 4 10:35:33 2016 +0000
Unify objcore allocation
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index dc08c24..fde3164 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -837,6 +837,7 @@ void *MPL_Get(struct mempool *mpl, unsigned *size);
void MPL_Free(struct mempool *mpl, void *item);
/* cache_obj.c */
+struct objcore * ObjNew(struct worker *, int wantboc);
typedef int objiterate_f(void *priv, int flush, const void *ptr, ssize_t len);
int ObjIterate(struct worker *, struct objcore *,
void *priv, objiterate_f *func);
diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c
index 1d594d7..6ad54e9 100644
--- a/bin/varnishd/cache/cache_hash.c
+++ b/bin/varnishd/cache/cache_hash.c
@@ -67,28 +67,6 @@ static struct objhead *private_oh;
/*---------------------------------------------------------------------*/
-static struct objcore *
-hsh_NewObjCore(struct worker *wrk, int boc)
-{
- struct objcore *oc;
-
- ALLOC_OBJ(oc, OBJCORE_MAGIC);
- AN(oc);
- wrk->stats->n_objectcore++;
- oc->flags |= OC_F_BUSY | OC_F_INCOMPLETE;
- oc->last_lru = NAN;
- if (boc) {
- ALLOC_OBJ(oc->boc, BOC_MAGIC);
- AN(oc->boc);
- Lck_New(&oc->boc->mtx, lck_busyobj);
- AZ(pthread_cond_init(&oc->boc->cond, NULL));
- oc->boc->refcount = 1;
- }
- return (oc);
-}
-
-/*---------------------------------------------------------------------*/
-
static struct objhead *
hsh_newobjhead(void)
{
@@ -111,8 +89,10 @@ hsh_prealloc(struct worker *wrk)
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
- if (wrk->nobjcore == NULL)
- wrk->nobjcore = hsh_NewObjCore(wrk, 1);
+ if (wrk->nobjcore == NULL) {
+ wrk->nobjcore = ObjNew(wrk, 1);
+ wrk->nobjcore->flags |= OC_F_BUSY | OC_F_INCOMPLETE;
+ }
CHECK_OBJ_NOTNULL(wrk->nobjcore, OBJCORE_MAGIC);
if (wrk->nobjhead == NULL) {
@@ -134,11 +114,11 @@ HSH_Private(struct worker *wrk, int wantboc)
CHECK_OBJ_NOTNULL(private_oh, OBJHEAD_MAGIC);
- oc = hsh_NewObjCore(wrk, wantboc);
+ oc = ObjNew(wrk, wantboc);
AN(oc);
oc->refcnt = 1;
oc->objhead = private_oh;
- oc->flags |= OC_F_PRIVATE | OC_F_BUSY;
+ oc->flags |= OC_F_PRIVATE | OC_F_BUSY | OC_F_INCOMPLETE;
Lck_Lock(&private_oh->mtx);
VTAILQ_INSERT_TAIL(&private_oh->objcs, oc, list);
private_oh->refcnt++;
diff --git a/bin/varnishd/cache/cache_obj.c b/bin/varnishd/cache/cache_obj.c
index 3cc195b..cd0c85c 100644
--- a/bin/varnishd/cache/cache_obj.c
+++ b/bin/varnishd/cache/cache_obj.c
@@ -60,6 +60,32 @@ obj_getmethods(const struct objcore *oc)
}
/*====================================================================
+ * ObjNew()
+ *
+ */
+
+struct objcore *
+ObjNew(struct worker *wrk, int wantboc)
+{
+ struct objcore *oc;
+
+ CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
+
+ ALLOC_OBJ(oc, OBJCORE_MAGIC);
+ AN(oc);
+ wrk->stats->n_objectcore++;
+ oc->last_lru = NAN;
+ if (wantboc) {
+ ALLOC_OBJ(oc->boc, BOC_MAGIC);
+ AN(oc->boc);
+ Lck_New(&oc->boc->mtx, lck_busyobj);
+ AZ(pthread_cond_init(&oc->boc->cond, NULL));
+ oc->boc->refcount = 1;
+ }
+ return (oc);
+}
+
+/*====================================================================
* ObjIterate()
*
*/
diff --git a/bin/varnishd/storage/storage_persistent_silo.c b/bin/varnishd/storage/storage_persistent_silo.c
index a0723bd..32c598e 100644
--- a/bin/varnishd/storage/storage_persistent_silo.c
+++ b/bin/varnishd/storage/storage_persistent_silo.c
@@ -158,8 +158,7 @@ smp_load_seg(struct worker *wrk, const struct smp_sc *sc,
for (;no > 0; so++,no--) {
if (EXP_When(&so->exp) < t_now)
continue;
- ALLOC_OBJ(oc, OBJCORE_MAGIC);
- AN(oc);
+ oc = ObjNew(wrk, 0);
oc->flags &= ~OC_F_BUSY;
oc->stobj->stevedore = sc->parent;
smp_init_oc(oc, sg, no);
@@ -168,7 +167,6 @@ smp_load_seg(struct worker *wrk, const struct smp_sc *sc,
HSH_Insert(wrk, so->hash, oc);
oc->exp = so->exp;
sg->nobj++;
- oc->last_lru = NAN;
EXP_Inject(wrk, oc);
}
Pool_Sumstat(wrk);
More information about the varnish-commit
mailing list