Commit 99a40f5a authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Only ref the busy boc if it is not yet BOS_FINISHED

parent 0375791c
......@@ -866,7 +866,7 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo)
*/
static enum fetch_step
vbf_stp_fail(struct worker *wrk, struct busyobj *bo)
vbf_stp_fail(struct worker *wrk, const struct busyobj *bo)
{
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
......
......@@ -724,10 +724,10 @@ HSH_RefBusy(const struct objcore *oc)
assert(oc->refcnt > 0);
boc = oc->boc;
CHECK_OBJ_ORNULL(boc, BOC_MAGIC);
if (boc != NULL) {
//CHECK_OBJ_NOTNULL(boc->busyobj, BUSYOBJ_MAGIC);
if (boc != NULL && boc->state < BOS_FINISHED)
boc->refcount++;
}
else
boc = NULL;
Lck_Unlock(&oh->mtx);
return (boc);
}
......
......@@ -217,6 +217,8 @@ ObjTrimStore(struct worker *wrk, struct objcore *oc)
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
assert(oc->boc == NULL || oc->boc->state < BOS_FINISHED);
if (om->objtrimstore != NULL)
om->objtrimstore(wrk, oc);
return;
......
......@@ -198,35 +198,20 @@ cnt_deliver(struct worker *wrk, struct req *req)
/* Grab a ref to the bo if there is one, and hand it down */
boc = HSH_RefBusy(req->objcore);
if (boc != NULL) {
if (req->esi_level == 0 && boc->state == BOS_FINISHED) {
HSH_DerefBusy(wrk, req->objcore);
boc = NULL;
} else if (!boc->busyobj->do_stream) {
/* XXX These should go away */
xxxassert(boc->state >= BOS_STREAM);
xxxassert(boc->state >= BOS_FINISHED);
HSH_DerefBusy(wrk, req->objcore);
boc = NULL;
}
}
cnt_vdp(req, boc);
/* pass+streaming, abandon fetch in case delivery terminated early */
if (boc != NULL && req->objcore->flags & OC_F_PASS) {
CHECK_OBJ_NOTNULL(boc->busyobj, BUSYOBJ_MAGIC);
boc->busyobj->abandon = 1;
}
VSLb_ts_req(req, "Resp", W_TIM_real(wrk));
if (http_HdrIs(req->resp, H_Connection, "close"))
req->doclose = SC_RESP_CLOSE;
if (req->objcore->flags & (OC_F_PRIVATE | OC_F_PASS)) {
if (boc != NULL)
if (boc != NULL) {
CHECK_OBJ_NOTNULL(boc->busyobj, BUSYOBJ_MAGIC);
boc->busyobj->abandon = 1;
ObjWaitState(boc, BOS_FINISHED);
}
ObjSlim(wrk, req->objcore);
}
......
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