[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