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)
if (sp->objcore != NULL) {
CHECK_OBJ_NOTNULL(sp->objhead, OBJHEAD_MAGIC);
CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
HSH_DerefObjCore(sp);
AZ(sp->objhead);
AZ(sp->objcore);
HSH_DerefObjCore(sp->wrk, sp->objcore);
sp->objhead = NULL;
sp->objcore = NULL;
}
AZ(sp->obj);
sp->wrk->bereq = NULL;
......@@ -531,8 +531,11 @@ cnt_fetch(struct sess *sp)
AZ(sp->objhead);
sp->wrk->cacheable = 0;
} else if (!sp->wrk->cacheable) {
if (sp->objhead != NULL)
HSH_DerefObjCore(sp);
if (sp->objhead != NULL) {
HSH_DerefObjCore(sp->wrk, sp->objcore);
sp->objhead = NULL;
sp->objcore = NULL;
}
}
/*
......@@ -898,18 +901,24 @@ cnt_miss(struct sess *sp)
VCL_miss_method(sp);
switch(sp->handling) {
case VCL_RET_ERROR:
HSH_DerefObjCore(sp);
HSH_DerefObjCore(sp->wrk, sp->objcore);
sp->objhead = NULL;
sp->objcore = NULL;
sp->step = STP_ERROR;
return (0);
case VCL_RET_PASS:
HSH_DerefObjCore(sp);
HSH_DerefObjCore(sp->wrk, sp->objcore);
sp->objhead = NULL;
sp->objcore = NULL;
sp->step = STP_PASS;
return (0);
case VCL_RET_FETCH:
sp->step = STP_FETCH;
return (0);
case VCL_RET_RESTART:
HSH_DerefObjCore(sp);
HSH_DerefObjCore(sp->wrk, sp->objcore);
sp->objhead = NULL;
sp->objcore = NULL;
INCOMPL();
default:
WRONG("Illegal action in vcl_miss{}");
......
......@@ -284,10 +284,10 @@ exp_timer(struct sess *sp, void *priv)
oc->flags &= ~OC_F_ONLRU;
}
VSC_main->n_expired++;
Lck_Unlock(&exp_mtx);
VSC_main->n_expired++;
CHECK_OBJ_NOTNULL(oc->objhead, OBJHEAD_MAGIC);
if (!(oc->flags & OC_F_PERSISTENT)) {
o = oc->obj;
......@@ -298,11 +298,7 @@ exp_timer(struct sess *sp, void *priv)
} else {
WSL(sp->wrk, SLT_ExpKill, 1, "-1 %d",
(int)(oc->timer_when - t));
sp->objhead = oc->objhead;
sp->objcore = oc;
HSH_DerefObjCore(sp);
AZ(sp->objcore);
AZ(sp->objhead);
HSH_DerefObjCore(sp->wrk, oc);
sp->wrk->stats.n_vampireobject--;
}
}
......
......@@ -621,21 +621,15 @@ HSH_Ref(struct objcore *oc)
}
void
HSH_DerefObjCore(struct sess *sp)
HSH_DerefObjCore(struct worker *wrk, struct objcore *oc)
{
struct objhead *oh;
struct objcore *oc;
CHECK_OBJ_NOTNULL(sp->objhead, OBJHEAD_MAGIC);
CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
oh = sp->objhead;
sp->objhead = NULL;
oc = sp->objcore;
sp->objcore = NULL;
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
oh = oc->objhead;
CHECK_OBJ_NOTNULL(oh, OBJHEAD_MAGIC);
Lck_Lock(&oh->mtx);
assert(oc->objhead == oh);
VTAILQ_REMOVE(&oh->objcs, oc, list);
if (oc->flags & OC_F_BUSY)
hsh_rush(oh);
......@@ -643,9 +637,9 @@ HSH_DerefObjCore(struct sess *sp)
oc->objhead = NULL;
assert(oh->refcnt > 0);
FREE_OBJ(oc);
sp->wrk->stats.n_objectcore--;
wrk->stats.n_objectcore--;
if (!hash->deref(oh))
HSH_DeleteObjHead(sp->wrk, oh);
HSH_DeleteObjHead(wrk, oh);
}
/*******************************************************************
......
......@@ -61,7 +61,7 @@ void HSH_Drop(struct sess *sp);
double HSH_Grace(double g);
void HSH_Init(void);
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);
struct objcore *HSH_Insert(const struct sess *sp);
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