local variable for (struct busyobj *)->fetch_objcore

Minor uncluttering, no code change other than use of that local
variable.

The fetch_objcore must not change for the duration of a fetch.
parent 056765e5
...@@ -68,7 +68,7 @@ vbf_allocobj(struct busyobj *bo, unsigned l) ...@@ -68,7 +68,7 @@ vbf_allocobj(struct busyobj *bo, unsigned l)
if (stv == NULL) if (stv == NULL)
return (0); return (0);
if (STV_NewObject(bo->wrk, bo->fetch_objcore, stv, l)) if (STV_NewObject(bo->wrk, oc, stv, l))
return (1); return (1);
if (stv == stv_transient) if (stv == stv_transient)
...@@ -83,7 +83,7 @@ vbf_allocobj(struct busyobj *bo, unsigned l) ...@@ -83,7 +83,7 @@ vbf_allocobj(struct busyobj *bo, unsigned l)
oc->ttl = cache_param->shortlived; oc->ttl = cache_param->shortlived;
oc->grace = 0.0; oc->grace = 0.0;
oc->keep = 0.0; oc->keep = 0.0;
return (STV_NewObject(bo->wrk, bo->fetch_objcore, stv_transient, l)); return (STV_NewObject(bo->wrk, oc, stv_transient, l));
} }
static void static void
...@@ -126,11 +126,16 @@ vbf_beresp2obj(struct busyobj *bo) ...@@ -126,11 +126,16 @@ vbf_beresp2obj(struct busyobj *bo)
uint8_t *bp; uint8_t *bp;
struct vsb *vary = NULL; struct vsb *vary = NULL;
int varyl = 0; int varyl = 0;
struct objcore *oc;
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
oc = bo->fetch_objcore;
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
l = 0; l = 0;
/* Create Vary instructions */ /* Create Vary instructions */
if (!(bo->fetch_objcore->flags & OC_F_PRIVATE)) { if (!(oc->flags & OC_F_PRIVATE)) {
varyl = VRY_Create(bo, &vary); varyl = VRY_Create(bo, &vary);
if (varyl > 0) { if (varyl > 0) {
AN(vary); AN(vary);
...@@ -156,7 +161,7 @@ vbf_beresp2obj(struct busyobj *bo) ...@@ -156,7 +161,7 @@ vbf_beresp2obj(struct busyobj *bo)
l += l2; l += l2;
if (bo->uncacheable) if (bo->uncacheable)
bo->fetch_objcore->flags |= OC_F_HFM; oc->flags |= OC_F_HFM;
if (!vbf_allocobj(bo, l)) { if (!vbf_allocobj(bo, l)) {
if (vary != NULL) if (vary != NULL)
...@@ -166,28 +171,26 @@ vbf_beresp2obj(struct busyobj *bo) ...@@ -166,28 +171,26 @@ vbf_beresp2obj(struct busyobj *bo)
} }
if (vary != NULL) { if (vary != NULL) {
AN(ObjSetAttr(bo->wrk, bo->fetch_objcore, OA_VARY, varyl, AN(ObjSetAttr(bo->wrk, oc, OA_VARY, varyl, VSB_data(vary)));
VSB_data(vary)));
VSB_destroy(&vary); VSB_destroy(&vary);
} }
AZ(ObjSetU32(bo->wrk, bo->fetch_objcore, OA_VXID, VXID(bo->vsl->wid))); AZ(ObjSetU32(bo->wrk, oc, OA_VXID, VXID(bo->vsl->wid)));
/* for HTTP_Encode() VSLH call */ /* for HTTP_Encode() VSLH call */
bo->beresp->logtag = SLT_ObjMethod; bo->beresp->logtag = SLT_ObjMethod;
/* Filter into object */ /* Filter into object */
bp = ObjSetAttr(bo->wrk, bo->fetch_objcore, OA_HEADERS, l2, NULL); bp = ObjSetAttr(bo->wrk, oc, OA_HEADERS, l2, NULL);
AN(bp); AN(bp);
HTTP_Encode(bo->beresp, bp, l2, HTTP_Encode(bo->beresp, bp, l2,
bo->uncacheable ? HTTPH_A_PASS : HTTPH_A_INS); bo->uncacheable ? HTTPH_A_PASS : HTTPH_A_INS);
if (http_GetHdr(bo->beresp, H_Last_Modified, &b)) if (http_GetHdr(bo->beresp, H_Last_Modified, &b))
AZ(ObjSetDouble(bo->wrk, bo->fetch_objcore, OA_LASTMODIFIED, AZ(ObjSetDouble(bo->wrk, oc, OA_LASTMODIFIED, VTIM_parse(b)));
VTIM_parse(b)));
else else
AZ(ObjSetDouble(bo->wrk, bo->fetch_objcore, OA_LASTMODIFIED, AZ(ObjSetDouble(bo->wrk, oc, OA_LASTMODIFIED,
floor(bo->fetch_objcore->t_origin))); floor(oc->t_origin)));
return (0); return (0);
} }
...@@ -200,12 +203,15 @@ static enum fetch_step ...@@ -200,12 +203,15 @@ static enum fetch_step
vbf_stp_mkbereq(struct worker *wrk, struct busyobj *bo) vbf_stp_mkbereq(struct worker *wrk, struct busyobj *bo)
{ {
const char *q; const char *q;
struct objcore *oc;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
CHECK_OBJ_NOTNULL(bo->req, REQ_MAGIC); CHECK_OBJ_NOTNULL(bo->req, REQ_MAGIC);
oc = bo->fetch_objcore;
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
assert(bo->fetch_objcore->boc->state == BOS_INVALID); assert(oc->boc->state == BOS_INVALID);
AZ(bo->storage); AZ(bo->storage);
HTTP_Setup(bo->bereq0, bo->ws, bo->vsl, SLT_BereqMethod); HTTP_Setup(bo->bereq0, bo->ws, bo->vsl, SLT_BereqMethod);
...@@ -242,13 +248,13 @@ vbf_stp_mkbereq(struct worker *wrk, struct busyobj *bo) ...@@ -242,13 +248,13 @@ vbf_stp_mkbereq(struct worker *wrk, struct busyobj *bo)
if (bo->req->req_body_status->avail == 0) { if (bo->req->req_body_status->avail == 0) {
bo->req = NULL; bo->req = NULL;
ObjSetState(bo->wrk, bo->fetch_objcore, BOS_REQ_DONE); ObjSetState(bo->wrk, oc, BOS_REQ_DONE);
} else if (bo->req->req_body_status == BS_CACHED) { } else if (bo->req->req_body_status == BS_CACHED) {
AN(bo->req->body_oc); AN(bo->req->body_oc);
bo->bereq_body = bo->req->body_oc; bo->bereq_body = bo->req->body_oc;
HSH_Ref(bo->bereq_body); HSH_Ref(bo->bereq_body);
bo->req = NULL; bo->req = NULL;
ObjSetState(bo->wrk, bo->fetch_objcore, BOS_REQ_DONE); ObjSetState(bo->wrk, oc, BOS_REQ_DONE);
} }
return (F_STP_STARTFETCH); return (F_STP_STARTFETCH);
} }
...@@ -338,9 +344,12 @@ vbf_stp_startfetch(struct worker *wrk, struct busyobj *bo) ...@@ -338,9 +344,12 @@ vbf_stp_startfetch(struct worker *wrk, struct busyobj *bo)
int i; int i;
vtim_real now; vtim_real now;
unsigned handling; unsigned handling;
struct objcore *oc;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
oc = bo->fetch_objcore;
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
AZ(bo->storage); AZ(bo->storage);
bo->storage = bo->do_pass ? stv_transient : STV_next(); bo->storage = bo->do_pass ? stv_transient : STV_next();
...@@ -360,12 +369,12 @@ vbf_stp_startfetch(struct worker *wrk, struct busyobj *bo) ...@@ -360,12 +369,12 @@ vbf_stp_startfetch(struct worker *wrk, struct busyobj *bo)
HTTP_Setup(bo->beresp, bo->ws, bo->vsl, SLT_BerespMethod); HTTP_Setup(bo->beresp, bo->ws, bo->vsl, SLT_BerespMethod);
assert(bo->fetch_objcore->boc->state <= BOS_REQ_DONE); assert(oc->boc->state <= BOS_REQ_DONE);
AZ(bo->htc); AZ(bo->htc);
VFP_Setup(bo->vfc, wrk); VFP_Setup(bo->vfc, wrk);
bo->vfc->oc = bo->fetch_objcore; bo->vfc->oc = oc;
bo->vfc->resp = bo->beresp; bo->vfc->resp = bo->beresp;
bo->vfc->req = bo->bereq; bo->vfc->req = bo->bereq;
...@@ -417,10 +426,10 @@ vbf_stp_startfetch(struct worker *wrk, struct busyobj *bo) ...@@ -417,10 +426,10 @@ vbf_stp_startfetch(struct worker *wrk, struct busyobj *bo)
/* What does RFC2616 think about TTL ? */ /* What does RFC2616 think about TTL ? */
RFC2616_Ttl(bo, now, RFC2616_Ttl(bo, now,
&bo->fetch_objcore->t_origin, &oc->t_origin,
&bo->fetch_objcore->ttl, &oc->ttl,
&bo->fetch_objcore->grace, &oc->grace,
&bo->fetch_objcore->keep); &oc->keep);
AZ(bo->do_esi); AZ(bo->do_esi);
AZ(bo->was_304); AZ(bo->was_304);
...@@ -461,21 +470,21 @@ vbf_stp_startfetch(struct worker *wrk, struct busyobj *bo) ...@@ -461,21 +470,21 @@ vbf_stp_startfetch(struct worker *wrk, struct busyobj *bo)
return (F_STP_ERROR); return (F_STP_ERROR);
} }
assert(bo->fetch_objcore->boc->state <= BOS_REQ_DONE); assert(oc->boc->state <= BOS_REQ_DONE);
if (bo->fetch_objcore->boc->state != BOS_REQ_DONE) { if (oc->boc->state != BOS_REQ_DONE) {
bo->req = NULL; bo->req = NULL;
ObjSetState(wrk, bo->fetch_objcore, BOS_REQ_DONE); ObjSetState(wrk, oc, BOS_REQ_DONE);
} }
if (bo->do_esi) if (bo->do_esi)
bo->do_stream = 0; bo->do_stream = 0;
if (wrk->handling == VCL_RET_PASS) { if (wrk->handling == VCL_RET_PASS) {
bo->fetch_objcore->flags |= OC_F_HFP; oc->flags |= OC_F_HFP;
bo->uncacheable = 1; bo->uncacheable = 1;
wrk->handling = VCL_RET_DELIVER; wrk->handling = VCL_RET_DELIVER;
} }
if (bo->do_pass || bo->uncacheable) if (bo->do_pass || bo->uncacheable)
bo->fetch_objcore->flags |= OC_F_HFM; oc->flags |= OC_F_HFM;
assert(wrk->handling == VCL_RET_DELIVER); assert(wrk->handling == VCL_RET_DELIVER);
...@@ -493,10 +502,13 @@ vbf_stp_fetchbody(struct worker *wrk, struct busyobj *bo) ...@@ -493,10 +502,13 @@ vbf_stp_fetchbody(struct worker *wrk, struct busyobj *bo)
enum vfp_status vfps = VFP_ERROR; enum vfp_status vfps = VFP_ERROR;
ssize_t est; ssize_t est;
struct vfp_ctx *vfc; struct vfp_ctx *vfc;
struct objcore *oc;
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
vfc = bo->vfc; vfc = bo->vfc;
CHECK_OBJ_NOTNULL(vfc, VFP_CTX_MAGIC); CHECK_OBJ_NOTNULL(vfc, VFP_CTX_MAGIC);
oc = bo->fetch_objcore;
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
AN(vfc->vfp_nxt); AN(vfc->vfp_nxt);
...@@ -505,13 +517,13 @@ vbf_stp_fetchbody(struct worker *wrk, struct busyobj *bo) ...@@ -505,13 +517,13 @@ vbf_stp_fetchbody(struct worker *wrk, struct busyobj *bo)
est = 0; est = 0;
do { do {
if (vfc->oc->flags & OC_F_ABANDON) { if (oc->flags & OC_F_ABANDON) {
/* /*
* A pass object and delivery was terminated * A pass object and delivery was terminated
* We don't fail the fetch, in order for HitMiss * We don't fail the fetch, in order for HitMiss
* objects to be created. * objects to be created.
*/ */
AN(vfc->oc->flags & OC_F_HFM); AN(oc->flags & OC_F_HFM);
VSLb(wrk->vsl, SLT_Debug, VSLb(wrk->vsl, SLT_Debug,
"Fetch: Pass delivery abandoned"); "Fetch: Pass delivery abandoned");
bo->htc->doclose = SC_RX_BODY; bo->htc->doclose = SC_RX_BODY;
...@@ -542,7 +554,7 @@ vbf_stp_fetchbody(struct worker *wrk, struct busyobj *bo) ...@@ -542,7 +554,7 @@ vbf_stp_fetchbody(struct worker *wrk, struct busyobj *bo)
bo->htc->doclose = SC_RX_BODY; bo->htc->doclose = SC_RX_BODY;
vbf_cleanup(bo); vbf_cleanup(bo);
if (!bo->do_stream) { if (!bo->do_stream) {
assert(bo->fetch_objcore->boc->state < BOS_STREAM); assert(oc->boc->state < BOS_STREAM);
// XXX: doclose = ? // XXX: doclose = ?
return (F_STP_ERROR); return (F_STP_ERROR);
} else { } else {
...@@ -551,7 +563,7 @@ vbf_stp_fetchbody(struct worker *wrk, struct busyobj *bo) ...@@ -551,7 +563,7 @@ vbf_stp_fetchbody(struct worker *wrk, struct busyobj *bo)
} }
} }
ObjTrimStore(wrk, vfc->oc); ObjTrimStore(wrk, oc);
return (F_STP_FETCHEND); return (F_STP_FETCHEND);
} }
...@@ -791,11 +803,13 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo) ...@@ -791,11 +803,13 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo)
uint8_t *ptr; uint8_t *ptr;
struct vsb *synth_body; struct vsb *synth_body;
struct objcore *stale; struct objcore *stale;
struct objcore *oc;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
CHECK_OBJ_NOTNULL(bo->fetch_objcore, OBJCORE_MAGIC); oc = bo->fetch_objcore;
AN(bo->fetch_objcore->flags & OC_F_BUSY); CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
AN(oc->flags & OC_F_BUSY);
assert(bo->director_state == DIR_S_NULL); assert(bo->director_state == DIR_S_NULL);
if (wrk->handling != VCL_RET_ERROR) if (wrk->handling != VCL_RET_ERROR)
...@@ -804,8 +818,8 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo) ...@@ -804,8 +818,8 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo)
now = W_TIM_real(wrk); now = W_TIM_real(wrk);
VSLb_ts_busyobj(bo, "Error", now); VSLb_ts_busyobj(bo, "Error", now);
if (bo->fetch_objcore->stobj->stevedore != NULL) if (oc->stobj->stevedore != NULL)
ObjFreeObj(bo->wrk, bo->fetch_objcore); ObjFreeObj(bo->wrk, oc);
if (bo->storage == NULL) if (bo->storage == NULL)
bo->storage = STV_next(); bo->storage = STV_next();
...@@ -824,8 +838,8 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo) ...@@ -824,8 +838,8 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo)
http_SetHeader(bo->beresp, "Server: Varnish"); http_SetHeader(bo->beresp, "Server: Varnish");
stale = bo->stale_oc; stale = bo->stale_oc;
bo->fetch_objcore->t_origin = now; oc->t_origin = now;
if (!VTAILQ_EMPTY(&bo->fetch_objcore->objhead->waitinglist)) { if (!VTAILQ_EMPTY(&oc->objhead->waitinglist)) {
/* /*
* If there is a waitinglist, it means that there is no * If there is a waitinglist, it means that there is no
* grace-able object, so cache the error return for a * grace-able object, so cache the error return for a
...@@ -833,14 +847,14 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo) ...@@ -833,14 +847,14 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo)
* each objcore on the waiting list sequentially attempt * each objcore on the waiting list sequentially attempt
* to fetch from the backend. * to fetch from the backend.
*/ */
bo->fetch_objcore->ttl = 1; oc->ttl = 1;
bo->fetch_objcore->grace = 5; oc->grace = 5;
bo->fetch_objcore->keep = 5; oc->keep = 5;
stale = NULL; stale = NULL;
} else { } else {
bo->fetch_objcore->ttl = 0; oc->ttl = 0;
bo->fetch_objcore->grace = 0; oc->grace = 0;
bo->fetch_objcore->keep = 0; oc->keep = 0;
} }
synth_body = VSB_new_auto(); synth_body = VSB_new_auto();
...@@ -866,7 +880,7 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo) ...@@ -866,7 +880,7 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo)
assert(wrk->handling == VCL_RET_DELIVER); assert(wrk->handling == VCL_RET_DELIVER);
assert(bo->vfc->wrk == bo->wrk); assert(bo->vfc->wrk == bo->wrk);
assert(bo->vfc->oc == bo->fetch_objcore); assert(bo->vfc->oc == oc);
assert(bo->vfc->resp == bo->beresp); assert(bo->vfc->resp == bo->beresp);
assert(bo->vfc->req == bo->bereq); assert(bo->vfc->req == bo->bereq);
...@@ -889,13 +903,13 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo) ...@@ -889,13 +903,13 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo)
ll -= l; ll -= l;
o += l; o += l;
} }
AZ(ObjSetU64(wrk, bo->fetch_objcore, OA_LEN, o)); AZ(ObjSetU64(wrk, oc, OA_LEN, o));
VSB_destroy(&synth_body); VSB_destroy(&synth_body);
ObjSetState(wrk, bo->fetch_objcore, BOS_PREP_STREAM); ObjSetState(wrk, oc, BOS_PREP_STREAM);
HSH_Unbusy(wrk, bo->fetch_objcore); HSH_Unbusy(wrk, oc);
if (stale != NULL && bo->fetch_objcore->ttl > 0) if (stale != NULL && oc->ttl > 0)
HSH_Kill(stale); HSH_Kill(stale);
ObjSetState(wrk, bo->fetch_objcore, BOS_FINISHED); ObjSetState(wrk, oc, BOS_FINISHED);
return (F_STP_DONE); return (F_STP_DONE);
} }
...@@ -905,15 +919,18 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo) ...@@ -905,15 +919,18 @@ vbf_stp_error(struct worker *wrk, struct busyobj *bo)
static enum fetch_step static enum fetch_step
vbf_stp_fail(struct worker *wrk, const struct busyobj *bo) vbf_stp_fail(struct worker *wrk, const struct busyobj *bo)
{ {
struct objcore *oc;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
CHECK_OBJ_NOTNULL(bo->fetch_objcore, OBJCORE_MAGIC); oc = bo->fetch_objcore;
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
assert(bo->fetch_objcore->boc->state < BOS_FINISHED); assert(oc->boc->state < BOS_FINISHED);
HSH_Fail(bo->fetch_objcore); HSH_Fail(oc);
if (!(bo->fetch_objcore->flags & OC_F_BUSY)) if (!(oc->flags & OC_F_BUSY))
HSH_Kill(bo->fetch_objcore); HSH_Kill(oc);
ObjSetState(wrk, bo->fetch_objcore, BOS_FAILED); ObjSetState(wrk, oc, BOS_FAILED);
return (F_STP_DONE); return (F_STP_DONE);
} }
...@@ -931,12 +948,14 @@ static void v_matchproto_(task_func_t) ...@@ -931,12 +948,14 @@ static void v_matchproto_(task_func_t)
vbf_fetch_thread(struct worker *wrk, void *priv) vbf_fetch_thread(struct worker *wrk, void *priv)
{ {
struct busyobj *bo; struct busyobj *bo;
struct objcore *oc;
enum fetch_step stp; enum fetch_step stp;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC); CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CAST_OBJ_NOTNULL(bo, priv, BUSYOBJ_MAGIC); CAST_OBJ_NOTNULL(bo, priv, BUSYOBJ_MAGIC);
CHECK_OBJ_NOTNULL(bo->req, REQ_MAGIC); CHECK_OBJ_NOTNULL(bo->req, REQ_MAGIC);
CHECK_OBJ_NOTNULL(bo->fetch_objcore, OBJCORE_MAGIC); oc = bo->fetch_objcore;
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
THR_SetBusyobj(bo); THR_SetBusyobj(bo);
stp = F_STP_MKBEREQ; stp = F_STP_MKBEREQ;
...@@ -959,8 +978,8 @@ vbf_fetch_thread(struct worker *wrk, void *priv) ...@@ -959,8 +978,8 @@ vbf_fetch_thread(struct worker *wrk, void *priv)
VCL_TaskEnter(bo->privs); VCL_TaskEnter(bo->privs);
while (stp != F_STP_DONE) { while (stp != F_STP_DONE) {
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC); CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
assert(bo->fetch_objcore->boc->refcount >= 1); assert(oc->boc->refcount >= 1);
if (bo->fetch_objcore->boc->state < BOS_REQ_DONE) if (oc->boc->state < BOS_REQ_DONE)
AN(bo->req); AN(bo->req);
else else
AZ(bo->req); AZ(bo->req);
...@@ -986,18 +1005,18 @@ vbf_fetch_thread(struct worker *wrk, void *priv) ...@@ -986,18 +1005,18 @@ vbf_fetch_thread(struct worker *wrk, void *priv)
if (bo->bereq_body != NULL) if (bo->bereq_body != NULL)
(void) HSH_DerefObjCore(bo->wrk, &bo->bereq_body, 0); (void) HSH_DerefObjCore(bo->wrk, &bo->bereq_body, 0);
if (bo->fetch_objcore->boc->state == BOS_FINISHED) { if (oc->boc->state == BOS_FINISHED) {
AZ(bo->fetch_objcore->flags & OC_F_FAILED); AZ(oc->flags & OC_F_FAILED);
VSLb(bo->vsl, SLT_Length, "%ju", VSLb(bo->vsl, SLT_Length, "%ju",
(uintmax_t)ObjGetLen(bo->wrk, bo->fetch_objcore)); (uintmax_t)ObjGetLen(bo->wrk, oc));
} }
// AZ(bo->fetch_objcore->boc); // XXX // AZ(oc->boc); // XXX
if (bo->stale_oc != NULL) if (bo->stale_oc != NULL)
(void)HSH_DerefObjCore(wrk, &bo->stale_oc, 0); (void)HSH_DerefObjCore(wrk, &bo->stale_oc, 0);
wrk->vsl = NULL; wrk->vsl = NULL;
HSH_DerefBoc(wrk, bo->fetch_objcore); HSH_DerefBoc(wrk, oc);
SES_Rel(bo->sp); SES_Rel(bo->sp);
VBO_ReleaseBusyObj(wrk, &bo); VBO_ReleaseBusyObj(wrk, &bo);
THR_SetBusyobj(NULL); THR_SetBusyobj(NULL);
......
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