[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