[master] ecd7f92 Move STV_Freestore() to ObjSlim()

Poul-Henning Kamp phk at FreeBSD.org
Mon Aug 18 09:43:06 CEST 2014


commit ecd7f92afeeb0c876a3dead4272f6340812d9c33
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Aug 18 07:42:39 2014 +0000

    Move STV_Freestore() to ObjSlim()

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index f71f507..6bcecd6 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -1066,6 +1066,7 @@ uint64_t ObjGetLen(struct objcore *oc, struct dstat *ds);
 struct object *ObjGetObj(struct objcore *, struct dstat *);
 void ObjUpdateMeta(struct objcore *, struct dstat *);
 void ObjFreeObj(struct objcore *, struct dstat *);
+void ObjSlim(struct objcore *oc, struct dstat *ds);
 struct lru *ObjGetLRU(const struct objcore *);
 void *ObjGetattr(struct objcore *oc, struct dstat *ds, enum obj_attr attr,
     ssize_t *len);
@@ -1248,7 +1249,6 @@ void STV_trim(struct storage *st, size_t size, int move_ok);
 void STV_free(struct storage *st);
 void STV_open(void);
 void STV_close(void);
-void STV_Freestore(struct object *o);
 int STV_BanInfo(enum baninfo event, const uint8_t *ban, unsigned len);
 void STV_BanExport(const uint8_t *bans, unsigned len);
 struct storage *STV_alloc_transient(size_t size);
diff --git a/bin/varnishd/cache/cache_expire.c b/bin/varnishd/cache/cache_expire.c
index ca82aaa..36f171b 100644
--- a/bin/varnishd/cache/cache_expire.c
+++ b/bin/varnishd/cache/cache_expire.c
@@ -290,7 +290,6 @@ EXP_NukeOne(struct busyobj *bo, struct lru *lru)
 {
 	struct objcore *oc, *oc2;
 	struct objhead *oh;
-	struct object *o;
 
 	/* Find the first currently unused object on the LRU.  */
 	Lck_Lock(&lru->mtx);
@@ -334,9 +333,7 @@ EXP_NukeOne(struct busyobj *bo, struct lru *lru)
 	}
 
 	/* XXX: We could grab and return one storage segment to our caller */
-	o = ObjGetObj(oc, bo->stats);
-	CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
-	STV_Freestore(o);
+	ObjSlim(oc, bo->stats);
 
 	exp_mail_it(oc);
 
diff --git a/bin/varnishd/cache/cache_obj.c b/bin/varnishd/cache/cache_obj.c
index 8e6474b..c66a343 100644
--- a/bin/varnishd/cache/cache_obj.c
+++ b/bin/varnishd/cache/cache_obj.c
@@ -176,6 +176,32 @@ ObjTrimStore(struct objcore *oc, struct dstat *ds)
 	}
 }
 
+/*--------------------------------------------------------------------
+ * Early disposal of storage from soon to be killed object.
+ */
+
+void
+ObjSlim(struct objcore *oc, struct dstat *ds)
+{
+	struct object *o;
+	struct storage *st, *stn;
+
+	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
+	AN(ds);
+	o = ObjGetObj(oc, ds);
+	CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
+
+	if (o->esidata != NULL) {
+		STV_free(o->esidata);
+		o->esidata = NULL;
+	}
+	VTAILQ_FOREACH_SAFE(st, &o->body->list, list, stn) {
+		CHECK_OBJ_NOTNULL(st, STORAGE_MAGIC);
+		VTAILQ_REMOVE(&o->body->list, st, list);
+		STV_free(st);
+	}
+}
+
 struct object *
 ObjGetObj(struct objcore *oc, struct dstat *ds)
 {
diff --git a/bin/varnishd/cache/cache_req_fsm.c b/bin/varnishd/cache/cache_req_fsm.c
index c69c0ed..0f27c48 100644
--- a/bin/varnishd/cache/cache_req_fsm.c
+++ b/bin/varnishd/cache/cache_req_fsm.c
@@ -175,7 +175,7 @@ cnt_deliver(struct worker *wrk, struct req *req)
 	bo = HSH_RefBusy(req->objcore);
 	V1D_Deliver(req, bo);
 	if (bo != NULL)
-		VBO_DerefBusyObj(req->wrk, &bo);
+		VBO_DerefBusyObj(wrk, &bo);
 
 	VSLb_ts_req(req, "Resp", W_TIM_real(wrk));
 
@@ -190,7 +190,7 @@ cnt_deliver(struct worker *wrk, struct req *req)
 		 */
 		while (req->objcore->busyobj != NULL)
 			(void)usleep(100000);
-		STV_Freestore(req->obj);
+		ObjSlim(req->objcore, &wrk->stats);
 	}
 
 	assert(WRW_IsReleased(wrk));
diff --git a/bin/varnishd/storage/stevedore.c b/bin/varnishd/storage/stevedore.c
index 3ab1b9c..adbe556 100644
--- a/bin/varnishd/storage/stevedore.c
+++ b/bin/varnishd/storage/stevedore.c
@@ -65,13 +65,14 @@ default_oc_freeobj(struct dstat *ds, struct objcore *oc)
 {
 	struct object *o;
 
+	CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
 	AN(ds);
+	ObjSlim(oc, ds);
 	CAST_OBJ_NOTNULL(o, oc->priv, OBJECT_MAGIC);
 	oc->priv = NULL;
 	oc->stevedore = NULL;
 	o->magic = 0;
 
-	STV_Freestore(o);
 	STV_free(o->objstore);
 
 	ds->n_object--;
@@ -379,24 +380,6 @@ STV_NewObject(struct busyobj *bo, const char *hint,
 
 /*-------------------------------------------------------------------*/
 
-void
-STV_Freestore(struct object *o)
-{
-	struct storage *st, *stn;
-
-	if (o->esidata != NULL) {
-		STV_free(o->esidata);
-		o->esidata = NULL;
-	}
-	VTAILQ_FOREACH_SAFE(st, &o->body->list, list, stn) {
-		CHECK_OBJ_NOTNULL(st, STORAGE_MAGIC);
-		VTAILQ_REMOVE(&o->body->list, st, list);
-		STV_free(st);
-	}
-}
-
-/*-------------------------------------------------------------------*/
-
 struct storage *
 STV_alloc(const struct vfp_ctx *vc, size_t size)
 {



More information about the varnish-commit mailing list