[master] ac8de26 Use worker workspace for purge list of objects

Poul-Henning Kamp phk at varnish-cache.org
Fri May 17 10:18:00 CEST 2013


commit ac8de26b6404a1634ba95d45655513ef706f6b68
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Fri May 17 08:17:44 2013 +0000

    Use worker workspace for purge list  of objects

diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c
index e9ef4fc..3d3ef81 100644
--- a/bin/varnishd/cache/cache_hash.c
+++ b/bin/varnishd/cache/cache_hash.c
@@ -517,16 +517,16 @@ hsh_rush(struct dstat *ds, struct objhead *oh)
  */
 
 void
-HSH_Purge(struct req *req, struct objhead *oh, double ttl, double grace)
+HSH_Purge(struct worker *wrk, struct objhead *oh, double ttl, double grace)
 {
 	struct objcore *oc, **ocp;
 	unsigned spc, nobj, n;
 	struct object *o;
 
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
 	CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC);
-	spc = WS_Reserve(req->ws, 0);
-	ocp = (void*)req->ws->f;
+	spc = WS_Reserve(wrk->aws, 0);
+	ocp = (void*)wrk->aws->f;
 	Lck_Lock(&oh->mtx);
 	assert(oh->refcnt > 0);
 	nobj = 0;
@@ -543,7 +543,7 @@ HSH_Purge(struct req *req, struct objhead *oh, double ttl, double grace)
 			continue;
 		}
 
-		(void)oc_getobj(&req->wrk->stats, oc);
+		(void)oc_getobj(&wrk->stats, oc);
 		    /* XXX: still needed ? */
 
 		xxxassert(spc >= sizeof *ocp);
@@ -561,16 +561,16 @@ HSH_Purge(struct req *req, struct objhead *oh, double ttl, double grace)
 	for (n = 0; n < nobj; n++) {
 		oc = ocp[n];
 		CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
-		o = oc_getobj(&req->wrk->stats, oc);
+		o = oc_getobj(&wrk->stats, oc);
 		if (o == NULL)
 			continue;
 		CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
 		o->exp.ttl = ttl;
 		o->exp.grace = grace;
 		EXP_Rearm(o);
-		(void)HSH_Deref(&req->wrk->stats, NULL, &o);
+		(void)HSH_Deref(&wrk->stats, NULL, &o);
 	}
-	WS_Release(req->ws, 0);
+	WS_Release(wrk->aws, 0);
 }
 
 
diff --git a/bin/varnishd/cache/cache_req_fsm.c b/bin/varnishd/cache/cache_req_fsm.c
index c02aac9..a0636ef 100644
--- a/bin/varnishd/cache/cache_req_fsm.c
+++ b/bin/varnishd/cache/cache_req_fsm.c
@@ -1026,7 +1026,7 @@ cnt_purge(struct worker *wrk, struct req *req)
 	CHECK_OBJ_NOTNULL(boc, OBJCORE_MAGIC);
 	VRY_Finish(req, NULL);
 
-	HSH_Purge(req, boc->objhead, 0, 0);
+	HSH_Purge(wrk, boc->objhead, 0, 0);
 
 	AZ(HSH_Deref(&wrk->stats, boc, NULL));
 
diff --git a/bin/varnishd/cache/cache_vrt.c b/bin/varnishd/cache/cache_vrt.c
index 8d0ee46..3009e90 100644
--- a/bin/varnishd/cache/cache_vrt.c
+++ b/bin/varnishd/cache/cache_vrt.c
@@ -507,11 +507,12 @@ VRT_purge(const struct vrt_ctx *ctx, double ttl, double grace)
 
 	CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
 	CHECK_OBJ_NOTNULL(ctx->req, REQ_MAGIC);
+	CHECK_OBJ_NOTNULL(ctx->req->wrk, WORKER_MAGIC);
 	if (ctx->method == VCL_MET_LOOKUP)
-		HSH_Purge(ctx->req, ctx->req->obj->objcore->objhead,
+		HSH_Purge(ctx->req->wrk, ctx->req->obj->objcore->objhead,
 		    ttl, grace);
 	else if (ctx->method == VCL_MET_MISS)
-		HSH_Purge(ctx->req, ctx->req->objcore->objhead,
+		HSH_Purge(ctx->req->wrk, ctx->req->objcore->objhead,
 		    ttl, grace);
 }
 
diff --git a/bin/varnishd/hash/hash_slinger.h b/bin/varnishd/hash/hash_slinger.h
index 3c36b4d..e21a96e 100644
--- a/bin/varnishd/hash/hash_slinger.h
+++ b/bin/varnishd/hash/hash_slinger.h
@@ -71,7 +71,7 @@ void HSH_Drop(struct worker *, struct object **);
 void HSH_Init(const struct hash_slinger *slinger);
 void HSH_AddString(const struct req *, const char *str);
 void HSH_Insert(struct worker *, const void *hash, struct objcore *);
-void HSH_Purge(struct req *, struct objhead *, double ttl, double grace);
+void HSH_Purge(struct worker *, struct objhead *, double ttl, double grace);
 void HSH_config(const char *h_arg);
 struct objcore *HSH_NewObjCore(struct worker *wrk);
 



More information about the varnish-commit mailing list