Commit 5b77d349 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Push sess out of HSH_Drop() and HSH_Unbusy()

parent efd6a980
......@@ -238,7 +238,7 @@ cnt_prepresp(struct sess *sp)
break;
if (sp->wrk->do_stream) {
VDI_CloseFd(sp->wrk);
HSH_Drop(sp);
HSH_Drop(sp->wrk);
} else {
(void)HSH_Deref(sp->wrk, NULL, &sp->wrk->obj);
}
......@@ -495,7 +495,7 @@ cnt_error(struct sess *sp)
if (sp->handling == VCL_RET_RESTART &&
sp->restarts < cache_param->max_restarts) {
HSH_Drop(sp);
HSH_Drop(sp->wrk);
sp->director = NULL;
sp->restarts++;
sp->step = STP_RECV;
......@@ -873,7 +873,7 @@ cnt_fetchbody(struct sess *sp)
AN(sp->director);
if (i) {
HSH_Drop(sp);
HSH_Drop(wrk);
AZ(wrk->obj);
sp->err_code = 503;
sp->step = STP_ERROR;
......@@ -884,7 +884,7 @@ cnt_fetchbody(struct sess *sp)
EXP_Insert(wrk->obj);
AN(wrk->obj->objcore);
AN(wrk->obj->objcore->ban);
HSH_Unbusy(sp);
HSH_Unbusy(wrk);
}
wrk->acct_tmp.fetch++;
sp->step = STP_PREPRESP;
......@@ -939,7 +939,7 @@ cnt_streambody(struct sess *sp)
EXP_Insert(sp->wrk->obj);
AN(sp->wrk->obj->objcore);
AN(sp->wrk->obj->objcore->ban);
HSH_Unbusy(sp);
HSH_Unbusy(sp->wrk);
} else {
sp->doclose = "Stream error";
}
......
......@@ -580,29 +580,29 @@ HSH_Purge(const struct sess *sp, struct objhead *oh, double ttl, double grace)
*/
void
HSH_Drop(struct sess *sp)
HSH_Drop(struct worker *wrk)
{
struct object *o;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
o = sp->wrk->obj;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
o = wrk->obj;
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
AssertObjCorePassOrBusy(o->objcore);
o->exp.ttl = -1.;
if (o->objcore != NULL) /* Pass has no objcore */
HSH_Unbusy(sp);
(void)HSH_Deref(sp->wrk, NULL, &sp->wrk->obj);
HSH_Unbusy(wrk);
(void)HSH_Deref(wrk, NULL, &wrk->obj);
}
void
HSH_Unbusy(const struct sess *sp)
HSH_Unbusy(struct worker *wrk)
{
struct object *o;
struct objhead *oh;
struct objcore *oc;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
o = sp->wrk->obj;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
o = wrk->obj;
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
oc = o->objcore;
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
......@@ -614,9 +614,9 @@ HSH_Unbusy(const struct sess *sp)
assert(oc->refcnt > 0);
assert(oh->refcnt > 0);
if (o->ws_o->overflow)
sp->wrk->stats.n_objoverflow++;
wrk->stats.n_objoverflow++;
if (cache_param->diag_bitmap & 0x40)
WSP(sp, SLT_Debug,
WSL(wrk, SLT_Debug, 0,
"Object %u workspace free %u", o->xid, WS_Free(o->ws_o));
/* XXX: pretouch neighbors on oh->objcs to prevent page-on under mtx */
......@@ -626,14 +626,14 @@ HSH_Unbusy(const struct sess *sp)
VTAILQ_REMOVE(&oh->objcs, oc, list);
VTAILQ_INSERT_HEAD(&oh->objcs, oc, list);
oc->flags &= ~OC_F_BUSY;
AZ(sp->wrk->nbusyobj);
sp->wrk->nbusyobj = oc->busyobj;
AZ(wrk->nbusyobj);
wrk->nbusyobj = oc->busyobj;
oc->busyobj = NULL;
if (oh->waitinglist != NULL)
hsh_rush(oh);
AN(oc->ban);
Lck_Unlock(&oh->mtx);
assert(oc_getobj(sp->wrk, oc) == o);
assert(oc_getobj(wrk, oc) == o);
}
void
......
......@@ -54,9 +54,9 @@ struct hash_slinger {
void HSH_Prealloc(const struct sess *sp);
void HSH_Cleanup(struct worker *w);
struct objcore *HSH_Lookup(struct sess *sp, struct objhead **poh);
void HSH_Unbusy(const struct sess *sp);
void HSH_Unbusy(struct worker *wrk);
void HSH_Ref(struct objcore *o);
void HSH_Drop(struct sess *sp);
void HSH_Drop(struct worker *wrk);
void HSH_Init(const struct hash_slinger *slinger);
void HSH_AddString(const struct sess *sp, const char *str);
struct objcore *HSH_Insert(const struct sess *sp);
......
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