[master] 129be2f Various polish
Poul-Henning Kamp
phk at varnish-cache.org
Wed Sep 4 08:41:28 CEST 2013
commit 129be2f9a9dd213d977edd7002432dcad1348e30
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Wed Sep 4 06:41:19 2013 +0000
Various polish
diff --git a/bin/varnishd/cache/cache_ban.c b/bin/varnishd/cache/cache_ban.c
index 1229dfb..dbad851 100644
--- a/bin/varnishd/cache/cache_ban.c
+++ b/bin/varnishd/cache/cache_ban.c
@@ -1073,7 +1073,7 @@ ban_lurker_work(struct worker *wrk, struct vsl_log *vsl)
if (DO_DEBUG(DBG_LURKER))
VSLb(vsl, SLT_Debug, "lurker done: %p %u %u",
oc, oc->flags & OC_F_LURK, pass);
- (void)HSH_Deref(&wrk->stats, NULL, &o);
+ (void)HSH_DerefObj(&wrk->stats, &o);
VTIM_sleep(cache_param->ban_lurker_sleep);
}
Lck_AssertHeld(&ban_mtx);
diff --git a/bin/varnishd/cache/cache_busyobj.c b/bin/varnishd/cache/cache_busyobj.c
index 4b6c37f..063c49c 100644
--- a/bin/varnishd/cache/cache_busyobj.c
+++ b/bin/varnishd/cache/cache_busyobj.c
@@ -192,7 +192,7 @@ VBO_DerefBusyObj(struct worker *wrk, struct busyobj **pbo)
if (bo->fetch_objcore != NULL) {
AN(wrk);
- (void)HSH_Deref(&wrk->stats, bo->fetch_objcore, NULL);
+ (void)HSH_DerefObjCore(&wrk->stats, &bo->fetch_objcore);
}
VCL_Rel(&bo->vcl);
diff --git a/bin/varnishd/cache/cache_expire.c b/bin/varnishd/cache/cache_expire.c
index 2271949..090a209 100644
--- a/bin/varnishd/cache/cache_expire.c
+++ b/bin/varnishd/cache/cache_expire.c
@@ -411,7 +411,7 @@ exp_timer(struct worker *wrk, void *priv)
VSLb(&vsl, SLT_ExpKill, "%u %.0f",
oc_getxid(&wrk->stats, oc) & VSL_IDENTMASK,
EXP_Ttl(NULL, o) - t);
- (void)HSH_Deref(&wrk->stats, oc, NULL);
+ (void)HSH_DerefObjCore(&wrk->stats, &oc);
}
NEEDLESS_RETURN(NULL);
}
@@ -457,7 +457,7 @@ EXP_NukeOne(struct busyobj *bo, struct lru *lru)
/* XXX: bad idea for -spersistent */
VSLb(bo->vsl, SLT_ExpKill, "%u LRU",
oc_getxid(bo->stats, oc) & VSL_IDENTMASK);
- (void)HSH_Deref(bo->stats, oc, NULL);
+ (void)HSH_DerefObjCore(bo->stats, &oc);
return (1);
}
@@ -513,7 +513,7 @@ EXP_NukeLRU(struct worker *wrk, struct vsl_log *vsl, struct lru *lru)
oc_getxid(&wrk->stats, oc) & VSL_IDENTMASK,
EXP_Ttl(NULL, o) - t);
EXP_Set_ttl(&o->exp, 0.);
- (void)HSH_Deref(&wrk->stats, oc, NULL);
+ (void)HSH_DerefObjCore(&wrk->stats, &oc);
}
Lck_Lock(&lru->mtx);
diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c
index ad63438..46ec3ba 100644
--- a/bin/varnishd/cache/cache_hash.c
+++ b/bin/varnishd/cache/cache_hash.c
@@ -605,7 +605,7 @@ HSH_Purge(struct worker *wrk, struct objhead *oh, double ttl, double grace)
o->exp.ttl = ttl;
o->exp.grace = grace;
EXP_Rearm(o);
- (void)HSH_Deref(&wrk->stats, NULL, &o);
+ (void)HSH_DerefObj(&wrk->stats, &o);
}
WS_Release(wrk->aws, 0);
}
@@ -623,7 +623,7 @@ HSH_Drop(struct worker *wrk, struct object **oo)
AN(oo);
CHECK_OBJ_NOTNULL(*oo, OBJECT_MAGIC);
(*oo)->exp.ttl = -1.;
- AZ(HSH_Deref(&wrk->stats, NULL, oo));
+ AZ(HSH_DerefObj(&wrk->stats, oo));
}
/*---------------------------------------------------------------------
@@ -727,21 +727,30 @@ HSH_Ref(struct objcore *oc)
*/
int
-HSH_Deref(struct dstat *ds, struct objcore *oc, struct object **oo)
+HSH_DerefObj(struct dstat *ds, struct object **oo)
{
- struct object *o = NULL;
+ struct object *o;
+ struct objcore *oc;
+
+ AN(oo);
+ o = *oo;
+ *oo = NULL;
+
+ CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
+ oc = o->objcore;
+ return (HSH_DerefObjCore(ds, &oc));
+}
+
+int
+HSH_DerefObjCore(struct dstat *ds, struct objcore **ocp)
+{
+ struct objcore *oc;
struct objhead *oh;
unsigned r;
- /* Only one arg at a time */
- assert(oc == NULL || oo == NULL);
-
- if (oo != NULL) {
- o = *oo;
- *oo = NULL;
- CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
- oc = o->objcore;
- }
+ AN(ocp);
+ oc = *ocp;
+ *ocp = NULL;
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
assert(oc->refcnt > 0);
diff --git a/bin/varnishd/cache/cache_req_fsm.c b/bin/varnishd/cache/cache_req_fsm.c
index c918ec1..5fc5171 100644
--- a/bin/varnishd/cache/cache_req_fsm.c
+++ b/bin/varnishd/cache/cache_req_fsm.c
@@ -119,7 +119,7 @@ cnt_stream(struct worker *wrk, struct req *req)
assert(bo->state >= BOS_FINISHED);
if (bo->state == BOS_FAILED) {
- (void)HSH_Deref(&wrk->stats, NULL, &req->obj);
+ (void)HSH_DerefObj(&wrk->stats, &req->obj);
VBO_DerefBusyObj(wrk, &bo);
req->err_code = 503;
req->req_step = R_STP_ERROR;
@@ -136,7 +136,7 @@ cnt_stream(struct worker *wrk, struct req *req)
STV_Freestore(req->obj);
assert(WRW_IsReleased(wrk));
- (void)HSH_Deref(&wrk->stats, NULL, &req->obj);
+ (void)HSH_DerefObj(&wrk->stats, &req->obj);
http_Teardown(req->resp);
return (REQ_FSM_DONE);
}
@@ -164,6 +164,7 @@ cnt_deliver(struct worker *wrk, struct req *req)
CHECK_OBJ_NOTNULL(req->obj->objcore, OBJCORE_MAGIC);
CHECK_OBJ_NOTNULL(req->obj->objcore->objhead, OBJHEAD_MAGIC);
CHECK_OBJ_NOTNULL(req->vcl, VCL_CONF_MAGIC);
+ assert(WRW_IsReleased(wrk));
assert(req->obj->objcore->refcnt > 0);
@@ -231,7 +232,7 @@ cnt_deliver(struct worker *wrk, struct req *req)
wrk->handling = VCL_RET_DELIVER;
if (wrk->handling == VCL_RET_RESTART) {
- (void)HSH_Deref(&wrk->stats, NULL, &req->obj);
+ (void)HSH_DerefObj(&wrk->stats, &req->obj);
AZ(req->obj);
http_Teardown(req->resp);
req->req_step = R_STP_RESTART;
@@ -247,7 +248,7 @@ cnt_deliver(struct worker *wrk, struct req *req)
assert(WRW_IsReleased(wrk));
VSLb(req->vsl, SLT_Debug, "XXX REF %d", req->obj->objcore->refcnt);
- (void)HSH_Deref(&wrk->stats, NULL, &req->obj);
+ (void)HSH_DerefObj(&wrk->stats, &req->obj);
http_Teardown(req->resp);
return (REQ_FSM_DONE);
}
@@ -290,7 +291,7 @@ cnt_error(struct worker *wrk, struct req *req)
if (req->obj == NULL) {
req->doclose = SC_OVERLOAD;
req->director = NULL;
- AZ(HSH_Deref(&wrk->stats, bo->fetch_objcore, NULL));
+ AZ(HSH_DerefObjCore(&wrk->stats, &bo->fetch_objcore));
bo->fetch_objcore = NULL;
http_Teardown(bo->beresp);
http_Teardown(bo->bereq);
@@ -369,24 +370,22 @@ cnt_fetch(struct worker *wrk, struct req *req)
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+ AZ(req->obj);
req->acct_req.fetch++;
- //assert(bo->refcount > 0);
(void)HTTP1_DiscardReqBody(req);
if (req->objcore->flags & OC_F_FAILED) {
req->err_code = 503;
req->req_step = R_STP_ERROR;
+ //XXX ? AZ(HSH_DerefObjCore(&wrk->stats, &req->objcore));
req->objcore = NULL;
return (REQ_FSM_MORE);
}
- //assert (bo->state >= BOS_FETCHING);
req->obj = oc_getobj(&wrk->stats, req->objcore);
- //assert(req->obj == bo->fetch_obj);
req->objcore = NULL;
req->err_code = req->obj->response;
- assert(WRW_IsReleased(wrk));
req->req_step = R_STP_DELIVER;
return (REQ_FSM_MORE);
}
@@ -477,7 +476,7 @@ cnt_lookup(struct worker *wrk, struct req *req)
/* Found a hit-for-pass */
VSLb(req->vsl, SLT_Debug, "XXXX HIT-FOR-PASS");
AZ(boc);
- (void)HSH_Deref(&wrk->stats, oc, NULL);
+ (void)HSH_DerefObjCore(&wrk->stats, &oc);
req->objcore = NULL;
wrk->stats.cache_hitpass++;
req->req_step = R_STP_PASS;
@@ -506,7 +505,7 @@ cnt_lookup(struct worker *wrk, struct req *req)
req->req_step = R_STP_DELIVER;
return (REQ_FSM_MORE);
case VCL_RET_FETCH:
- (void)HSH_Deref(&wrk->stats, NULL, &req->obj);
+ (void)HSH_DerefObj(&wrk->stats, &req->obj);
req->objcore = boc;
req->req_step = R_STP_MISS;
return (REQ_FSM_MORE);
@@ -525,11 +524,11 @@ cnt_lookup(struct worker *wrk, struct req *req)
}
/* Drop our object, we won't need it */
- (void)HSH_Deref(&wrk->stats, NULL, &req->obj);
+ (void)HSH_DerefObj(&wrk->stats, &req->obj);
req->objcore = NULL;
if (boc != NULL) {
- (void)HSH_Deref(&wrk->stats, boc, NULL);
+ (void)HSH_DerefObjCore(&wrk->stats, &boc);
free(req->vary_b);
req->vary_b = NULL;
}
@@ -563,35 +562,25 @@ cnt_miss(struct worker *wrk, struct req *req)
VCL_miss_method(req->vcl, wrk, req, NULL, req->http->ws);
switch (wrk->handling) {
+ case VCL_RET_FETCH:
+ wrk->stats.cache_miss++;
+ VBF_Fetch(wrk, req, req->objcore, VBF_NORMAL);
+ req->req_step = R_STP_FETCH;
+ return (REQ_FSM_MORE);
case VCL_RET_ERROR:
- free(req->vary_b);
- AZ(HSH_Deref(&wrk->stats, req->objcore, NULL));
- req->objcore = NULL;
req->req_step = R_STP_ERROR;
- return (REQ_FSM_MORE);
+ break;
case VCL_RET_RESTART:
- free(req->vary_b);
- AZ(HSH_Deref(&wrk->stats, req->objcore, NULL));
- req->objcore = NULL;
req->req_step = R_STP_RESTART;
- return (REQ_FSM_MORE);
+ break;
case VCL_RET_PASS:
- free(req->vary_b);
- AZ(HSH_Deref(&wrk->stats, req->objcore, NULL));
- req->objcore = NULL;
req->req_step = R_STP_PASS;
- return (REQ_FSM_MORE);
- case VCL_RET_FETCH:
break;
default:
- WRONG("wrong return from vcl_miss{}");
+ WRONG("Illegal return from vcl_miss{}");
}
-
- wrk->stats.cache_miss++;
-
- AN (req->objcore);
- VBF_Fetch(wrk, req, req->objcore, VBF_NORMAL);
- req->req_step = R_STP_FETCH;
+ free(req->vary_b);
+ AZ(HSH_DerefObjCore(&wrk->stats, &req->objcore));
return (REQ_FSM_MORE);
}
@@ -623,20 +612,23 @@ cnt_pass(struct worker *wrk, struct req *req)
AZ(req->obj);
VCL_pass_method(req->vcl, wrk, req, NULL, req->http->ws);
- if (wrk->handling == VCL_RET_ERROR) {
+ switch (wrk->handling) {
+ case VCL_RET_ERROR:
req->req_step = R_STP_ERROR;
- return (REQ_FSM_MORE);
- }
- if (wrk->handling == VCL_RET_RESTART) {
- INCOMPL();
+ break;
+ case VCL_RET_RESTART:
+ req->req_step = R_STP_RESTART;
+ break;
+ case VCL_RET_FETCH:
+ req->acct_req.pass++;
+ req->objcore = HSH_Private(wrk);
+ CHECK_OBJ_NOTNULL(req->objcore, OBJCORE_MAGIC);
+ VBF_Fetch(wrk, req, req->objcore, VBF_PASS);
+ req->req_step = R_STP_FETCH;
+ break;
+ default:
+ WRONG("Illegal return from cnt_pass{}");
}
- assert (wrk->handling == VCL_RET_FETCH);
- req->acct_req.pass++;
-
- req->objcore = HSH_Private(wrk);
- AN(req->objcore);
- VBF_Fetch(wrk, req, req->objcore, VBF_PASS);
- req->req_step = R_STP_FETCH;
return (REQ_FSM_MORE);
}
@@ -807,13 +799,15 @@ cnt_recv(struct worker *wrk, struct req *req)
req->req_step = R_STP_LOOKUP;
return (REQ_FSM_MORE);
case VCL_RET_PIPE:
- if (req->esi_level > 0) {
- /* XXX: VSL something */
- INCOMPL();
- return (REQ_FSM_DONE);
+ if (req->esi_level == 0) {
+ req->req_step = R_STP_PIPE;
+ return (REQ_FSM_MORE);
}
- req->req_step = R_STP_PIPE;
- return (REQ_FSM_MORE);
+ VSLb(req->vsl, SLT_VCL_Error,
+ "vcl_recv{} returns pipe for ESI included object."
+ " Doing pass.");
+ req->req_step = R_STP_PASS;
+ return (REQ_FSM_DONE);
case VCL_RET_PASS:
req->req_step = R_STP_PASS;
return (REQ_FSM_MORE);
@@ -821,7 +815,7 @@ cnt_recv(struct worker *wrk, struct req *req)
req->req_step = R_STP_ERROR;
return (REQ_FSM_MORE);
default:
- WRONG("Illegal action in vcl_recv{}");
+ WRONG("Illegal return from vcl_recv{}");
}
}
@@ -855,7 +849,7 @@ cnt_purge(struct worker *wrk, struct req *req)
HSH_Purge(wrk, boc->objhead, 0, 0);
- AZ(HSH_Deref(&wrk->stats, boc, NULL));
+ AZ(HSH_DerefObjCore(&wrk->stats, &boc));
VCL_purge_method(req->vcl, wrk, req, NULL, req->http->ws);
req->req_step = R_STP_ERROR;
diff --git a/bin/varnishd/hash/hash_slinger.h b/bin/varnishd/hash/hash_slinger.h
index 5d9e91d..152eebd 100644
--- a/bin/varnishd/hash/hash_slinger.h
+++ b/bin/varnishd/hash/hash_slinger.h
@@ -113,7 +113,8 @@ void HSH_Unbusy(struct dstat *, struct objcore *);
void HSH_Complete(struct objcore *oc);
void HSH_DeleteObjHead(struct dstat *, struct objhead *oh);
int HSH_DerefObjHead(struct dstat *, struct objhead **poh);
-int HSH_Deref(struct dstat *, struct objcore *oc, struct object **o);
+int HSH_DerefObjCore(struct dstat *, struct objcore **ocp);
+int HSH_DerefObj(struct dstat *, struct object **o);
#endif /* VARNISH_CACHE_CHILD */
extern const struct hash_slinger hsl_slinger;
More information about the varnish-commit
mailing list