[master] 82f20ae Shift focus from object to objcore
Poul-Henning Kamp
phk at FreeBSD.org
Tue Aug 5 12:50:24 CEST 2014
commit 82f20ae9ead143060694b8dc0ff657271742d8c5
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Aug 5 10:50:04 2014 +0000
Shift focus from object to objcore
diff --git a/bin/varnishd/cache/cache_req_fsm.c b/bin/varnishd/cache/cache_req_fsm.c
index ccb837c..bc29e89 100644
--- a/bin/varnishd/cache/cache_req_fsm.c
+++ b/bin/varnishd/cache/cache_req_fsm.c
@@ -92,7 +92,9 @@ cnt_deliver(struct worker *wrk, struct req *req)
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
CHECK_OBJ_NOTNULL(req->obj, OBJECT_MAGIC);
+ CHECK_OBJ_NOTNULL(req->objcore, OBJCORE_MAGIC);
CHECK_OBJ_NOTNULL(req->obj->objcore, OBJCORE_MAGIC);
+ assert(req->obj->objcore == req->objcore);
CHECK_OBJ_NOTNULL(req->obj->objcore->objhead, OBJHEAD_MAGIC);
CHECK_OBJ_NOTNULL(req->vcl, VCL_CONF_MAGIC);
assert(WRW_IsReleased(wrk));
@@ -138,9 +140,9 @@ cnt_deliver(struct worker *wrk, struct req *req)
wrk->handling = VCL_RET_DELIVER;
if (wrk->handling != VCL_RET_DELIVER) {
- (void)HSH_DerefObj(&wrk->stats, &req->obj);
- AZ(req->obj);
- req->objcore = NULL;
+ assert(req->obj->objcore == req->objcore);
+ (void)HSH_DerefObjCore(&wrk->stats, &req->objcore);
+ req->obj = NULL;
http_Teardown(req->resp);
switch (wrk->handling) {
@@ -191,8 +193,9 @@ 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_DerefObj(&wrk->stats, &req->obj);
- req->objcore = NULL;
+ assert(req->obj->objcore == req->objcore);
+ (void)HSH_DerefObjCore(&wrk->stats, &req->objcore);
+ req->obj = NULL;
http_Teardown(req->resp);
return (REQ_FSM_DONE);
}
@@ -396,7 +399,7 @@ cnt_lookup(struct worker *wrk, struct req *req)
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
AZ(oc->flags & OC_F_BUSY);
- AZ(req->objcore);
+ req->objcore = oc;
o = ObjGetObj(oc, &wrk->stats);
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
@@ -408,8 +411,9 @@ cnt_lookup(struct worker *wrk, struct req *req)
VSLb(req->vsl, SLT_HitPass, "%u",
VXID(ObjGetXID(req->obj->objcore, &wrk->stats)));
AZ(boc);
- (void)HSH_DerefObj(&wrk->stats, &req->obj);
- req->objcore = NULL;
+ assert(req->obj->objcore == req->objcore);
+ (void)HSH_DerefObjCore(&wrk->stats, &req->objcore);
+ req->obj = NULL;
wrk->stats.cache_hitpass++;
req->req_step = R_STP_PASS;
return (REQ_FSM_MORE);
@@ -437,12 +441,13 @@ cnt_lookup(struct worker *wrk, struct req *req)
req->req_step = R_STP_DELIVER;
return (REQ_FSM_MORE);
case VCL_RET_FETCH:
- req->objcore = boc;
- if (req->objcore != NULL)
+ if (boc != NULL) {
+ req->objcore = boc;
req->req_step = R_STP_MISS;
- else {
- (void)HSH_DerefObj(&wrk->stats, &req->obj);
- req->objcore = NULL;
+ } else {
+ assert(req->obj->objcore == req->objcore);
+ (void)HSH_DerefObjCore(&wrk->stats, &req->objcore);
+ req->obj = NULL;
/*
* We don't have a busy object, so treat this
* like a pass
@@ -468,8 +473,9 @@ cnt_lookup(struct worker *wrk, struct req *req)
}
/* Drop our object, we won't need it */
- (void)HSH_DerefObj(&wrk->stats, &req->obj);
- req->objcore = NULL;
+ assert(req->obj->objcore == req->objcore);
+ (void)HSH_DerefObjCore(&wrk->stats, &req->objcore);
+ req->obj = NULL;
if (boc != NULL) {
(void)HSH_DerefObjCore(&wrk->stats, &boc);
More information about the varnish-commit
mailing list