Commit 4324b658 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Reduce the arguments of HSH_DerefObjCore() to the minimum needed.



git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@5541 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 9a5c6dd5
...@@ -471,9 +471,9 @@ cnt_fetch(struct sess *sp) ...@@ -471,9 +471,9 @@ cnt_fetch(struct sess *sp)
if (sp->objcore != NULL) { if (sp->objcore != NULL) {
CHECK_OBJ_NOTNULL(sp->objhead, OBJHEAD_MAGIC); CHECK_OBJ_NOTNULL(sp->objhead, OBJHEAD_MAGIC);
CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC); CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
HSH_DerefObjCore(sp); HSH_DerefObjCore(sp->wrk, sp->objcore);
AZ(sp->objhead); sp->objhead = NULL;
AZ(sp->objcore); sp->objcore = NULL;
} }
AZ(sp->obj); AZ(sp->obj);
sp->wrk->bereq = NULL; sp->wrk->bereq = NULL;
...@@ -531,8 +531,11 @@ cnt_fetch(struct sess *sp) ...@@ -531,8 +531,11 @@ cnt_fetch(struct sess *sp)
AZ(sp->objhead); AZ(sp->objhead);
sp->wrk->cacheable = 0; sp->wrk->cacheable = 0;
} else if (!sp->wrk->cacheable) { } else if (!sp->wrk->cacheable) {
if (sp->objhead != NULL) if (sp->objhead != NULL) {
HSH_DerefObjCore(sp); HSH_DerefObjCore(sp->wrk, sp->objcore);
sp->objhead = NULL;
sp->objcore = NULL;
}
} }
/* /*
...@@ -898,18 +901,24 @@ cnt_miss(struct sess *sp) ...@@ -898,18 +901,24 @@ cnt_miss(struct sess *sp)
VCL_miss_method(sp); VCL_miss_method(sp);
switch(sp->handling) { switch(sp->handling) {
case VCL_RET_ERROR: case VCL_RET_ERROR:
HSH_DerefObjCore(sp); HSH_DerefObjCore(sp->wrk, sp->objcore);
sp->objhead = NULL;
sp->objcore = NULL;
sp->step = STP_ERROR; sp->step = STP_ERROR;
return (0); return (0);
case VCL_RET_PASS: case VCL_RET_PASS:
HSH_DerefObjCore(sp); HSH_DerefObjCore(sp->wrk, sp->objcore);
sp->objhead = NULL;
sp->objcore = NULL;
sp->step = STP_PASS; sp->step = STP_PASS;
return (0); return (0);
case VCL_RET_FETCH: case VCL_RET_FETCH:
sp->step = STP_FETCH; sp->step = STP_FETCH;
return (0); return (0);
case VCL_RET_RESTART: case VCL_RET_RESTART:
HSH_DerefObjCore(sp); HSH_DerefObjCore(sp->wrk, sp->objcore);
sp->objhead = NULL;
sp->objcore = NULL;
INCOMPL(); INCOMPL();
default: default:
WRONG("Illegal action in vcl_miss{}"); WRONG("Illegal action in vcl_miss{}");
......
...@@ -284,10 +284,10 @@ exp_timer(struct sess *sp, void *priv) ...@@ -284,10 +284,10 @@ exp_timer(struct sess *sp, void *priv)
oc->flags &= ~OC_F_ONLRU; oc->flags &= ~OC_F_ONLRU;
} }
VSC_main->n_expired++;
Lck_Unlock(&exp_mtx); Lck_Unlock(&exp_mtx);
VSC_main->n_expired++;
CHECK_OBJ_NOTNULL(oc->objhead, OBJHEAD_MAGIC); CHECK_OBJ_NOTNULL(oc->objhead, OBJHEAD_MAGIC);
if (!(oc->flags & OC_F_PERSISTENT)) { if (!(oc->flags & OC_F_PERSISTENT)) {
o = oc->obj; o = oc->obj;
...@@ -298,11 +298,7 @@ exp_timer(struct sess *sp, void *priv) ...@@ -298,11 +298,7 @@ exp_timer(struct sess *sp, void *priv)
} else { } else {
WSL(sp->wrk, SLT_ExpKill, 1, "-1 %d", WSL(sp->wrk, SLT_ExpKill, 1, "-1 %d",
(int)(oc->timer_when - t)); (int)(oc->timer_when - t));
sp->objhead = oc->objhead; HSH_DerefObjCore(sp->wrk, oc);
sp->objcore = oc;
HSH_DerefObjCore(sp);
AZ(sp->objcore);
AZ(sp->objhead);
sp->wrk->stats.n_vampireobject--; sp->wrk->stats.n_vampireobject--;
} }
} }
......
...@@ -621,21 +621,15 @@ HSH_Ref(struct objcore *oc) ...@@ -621,21 +621,15 @@ HSH_Ref(struct objcore *oc)
} }
void void
HSH_DerefObjCore(struct sess *sp) HSH_DerefObjCore(struct worker *wrk, struct objcore *oc)
{ {
struct objhead *oh; struct objhead *oh;
struct objcore *oc;
CHECK_OBJ_NOTNULL(sp->objhead, OBJHEAD_MAGIC);
CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
oh = sp->objhead; CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
sp->objhead = NULL; oh = oc->objhead;
oc = sp->objcore; CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC);
sp->objcore = NULL;
Lck_Lock(&oh->mtx); Lck_Lock(&oh->mtx);
assert(oc->objhead == oh);
VTAILQ_REMOVE(&oh->objcs, oc, list); VTAILQ_REMOVE(&oh->objcs, oc, list);
if (oc->flags & OC_F_BUSY) if (oc->flags & OC_F_BUSY)
hsh_rush(oh); hsh_rush(oh);
...@@ -643,9 +637,9 @@ HSH_DerefObjCore(struct sess *sp) ...@@ -643,9 +637,9 @@ HSH_DerefObjCore(struct sess *sp)
oc->objhead = NULL; oc->objhead = NULL;
assert(oh->refcnt > 0); assert(oh->refcnt > 0);
FREE_OBJ(oc); FREE_OBJ(oc);
sp->wrk->stats.n_objectcore--; wrk->stats.n_objectcore--;
if (!hash->deref(oh)) if (!hash->deref(oh))
HSH_DeleteObjHead(sp->wrk, oh); HSH_DeleteObjHead(wrk, oh);
} }
/******************************************************************* /*******************************************************************
......
...@@ -61,7 +61,7 @@ void HSH_Drop(struct sess *sp); ...@@ -61,7 +61,7 @@ void HSH_Drop(struct sess *sp);
double HSH_Grace(double g); double HSH_Grace(double g);
void HSH_Init(void); void HSH_Init(void);
void HSH_AddString(const struct sess *sp, const char *str); void HSH_AddString(const struct sess *sp, const char *str);
void HSH_DerefObjCore(struct sess *sp); void HSH_DerefObjCore(struct worker *sp, struct objcore *oc);
void HSH_FindBan(struct sess *sp, struct objcore **oc); void HSH_FindBan(struct sess *sp, struct objcore **oc);
struct objcore *HSH_Insert(const struct sess *sp); struct objcore *HSH_Insert(const struct sess *sp);
void HSH_Purge(struct sess *, struct objhead *, double ttl, double grace); void HSH_Purge(struct sess *, struct objhead *, double ttl, double grace);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment