Commit 6c148642 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

move obj and objcore from worker to req

parent df85ad84
......@@ -329,8 +329,6 @@ struct worker {
struct ws ws[1];
struct object *obj;
struct objcore *objcore;
struct busyobj *busyobj;
/* This is only here so VRT can find it */
......@@ -622,6 +620,8 @@ struct req {
struct http *resp;
struct ws ws[1];
struct object *obj;
struct objcore *objcore;
};
/*--------------------------------------------------------------------*/
......
......@@ -227,7 +227,7 @@ vbe_NewConn(void)
/*--------------------------------------------------------------------
* It evaluates if a backend is healthy _for_a_specific_object_.
* That means that it relies on sp->wrk->objcore->objhead. This is mainly for
* That means that it relies on sp->req->objcore->objhead. This is mainly for
* saint-mode, but also takes backend->healthy into account. If
* cache_param->saintmode_threshold is 0, this is basically just a test of
* backend->healthy.
......@@ -274,11 +274,11 @@ vbe_Healthy(const struct vdi_simple *vs, const struct sess *sp)
if (threshold == 0)
return (1);
if (sp->wrk->objcore == NULL)
if (sp->req->objcore == NULL)
return (1);
now = sp->t_req;
target = (uintptr_t)(sp->wrk->objcore->objhead);
target = (uintptr_t)(sp->req->objcore->objhead);
old = NULL;
retval = 1;
......
This diff is collapsed.
......@@ -58,8 +58,8 @@ ved_include(struct sess *sp, const char *src, const char *host)
(void)WRW_FlushRelease(w);
obj = sp->wrk->obj;
sp->wrk->obj = NULL;
obj = sp->req->obj;
sp->req->obj = NULL;
res_mode = sp->wrk->res_mode;
/* Reset request to status before we started messing with it */
......@@ -106,7 +106,7 @@ ved_include(struct sess *sp, const char *src, const char *host)
AN(sp->wrk);
assert(sp->step == STP_DONE);
sp->req->esi_level--;
sp->wrk->obj = obj;
sp->req->obj = obj;
sp->wrk->res_mode = res_mode;
/* Reset the workspace */
......@@ -231,7 +231,7 @@ ESI_Deliver(struct sess *sp)
int i;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
st = sp->wrk->obj->esidata;
st = sp->req->obj->esidata;
AN(st);
assert(sizeof obuf >= 1024);
......@@ -276,7 +276,7 @@ ESI_Deliver(struct sess *sp)
obufl = 0;
}
st = VTAILQ_FIRST(&sp->wrk->obj->store);
st = VTAILQ_FIRST(&sp->req->obj->store);
off = 0;
while (p < e) {
......@@ -435,7 +435,7 @@ ved_deliver_byterange(const struct sess *sp, ssize_t low, ssize_t high)
//printf("BR %jd %jd\n", low, high);
lx = 0;
VTAILQ_FOREACH(st, &sp->wrk->obj->store, list) {
VTAILQ_FOREACH(st, &sp->req->obj->store, list) {
p = st->ptr;
l = st->len;
//printf("[0-] %jd %jd\n", lx, lx + l);
......@@ -476,8 +476,8 @@ ESI_DeliverChild(const struct sess *sp)
uint32_t ilen;
uint8_t *dbits;
if (!sp->wrk->obj->gziped) {
VTAILQ_FOREACH(st, &sp->wrk->obj->store, list)
if (!sp->req->obj->gziped) {
VTAILQ_FOREACH(st, &sp->req->obj->store, list)
ved_pretend_gzip(sp, st->ptr, st->len);
return;
}
......@@ -489,7 +489,7 @@ ESI_DeliverChild(const struct sess *sp)
dbits = (void*)WS_Alloc(sp->wrk->ws, 8);
AN(dbits);
obj = sp->wrk->obj;
obj = sp->req->obj;
CHECK_OBJ_NOTNULL(obj, OBJECT_MAGIC);
start = obj->gzip_start;
last = obj->gzip_last;
......@@ -554,7 +554,7 @@ ESI_DeliverChild(const struct sess *sp)
}
if (lpad > 0)
(void)WRW_Write(sp->wrk, dbits + 1, lpad);
st = VTAILQ_LAST(&sp->wrk->obj->store, storagehead);
st = VTAILQ_LAST(&sp->req->obj->store, storagehead);
assert(st->len > 8);
p = st->ptr + st->len - 8;
......
......@@ -391,11 +391,11 @@ FetchHdr(struct sess *sp, int need_host_hdr)
htc = &wrk->busyobj->htc;
AN(sp->req->director);
AZ(sp->wrk->obj);
AZ(sp->req->obj);
if (sp->wrk->objcore != NULL) { /* pass has no objcore */
CHECK_OBJ_NOTNULL(sp->wrk->objcore, OBJCORE_MAGIC);
AN(sp->wrk->objcore->flags & OC_F_BUSY);
if (sp->req->objcore != NULL) { /* pass has no objcore */
CHECK_OBJ_NOTNULL(sp->req->objcore, OBJCORE_MAGIC);
AN(sp->req->objcore->flags & OC_F_BUSY);
}
hp = wrk->busyobj->bereq;
......
......@@ -248,7 +248,7 @@ VGZ_ObufFull(const struct vgz *vg)
/*--------------------------------------------------------------------
* Keep the outbuffer supplied with storage and file it under the
* sp->wrk->obj as it fills.
* sp->req->obj as it fills.
*/
int
......
......@@ -389,8 +389,8 @@ HSH_Lookup(struct sess *sp, struct objhead **poh)
* XXX: serialize fetch of all Vary's if grace is possible.
*/
AZ(sp->wrk->objcore);
sp->wrk->objcore = grace_oc; /* XXX: Hack-ish */
AZ(sp->req->objcore);
sp->req->objcore = grace_oc; /* XXX: Hack-ish */
if (oc == NULL /* We found no live object */
&& grace_oc != NULL /* There is a grace candidate */
&& (busy_oc != NULL /* Somebody else is already busy */
......@@ -400,7 +400,7 @@ HSH_Lookup(struct sess *sp, struct objhead **poh)
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
oc = grace_oc;
}
sp->wrk->objcore = NULL;
sp->req->objcore = NULL;
if (oc != NULL && !sp->req->hash_always_miss) {
o = oc_getobj(sp->wrk, oc);
......@@ -580,13 +580,13 @@ HSH_Drop(struct worker *wrk)
struct object *o;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
o = wrk->obj;
o = wrk->sp->req->obj;
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
AssertObjCorePassOrBusy(o->objcore);
o->exp.ttl = -1.;
if (o->objcore != NULL) /* Pass has no objcore */
HSH_Unbusy(wrk);
(void)HSH_Deref(wrk, NULL, &wrk->obj);
(void)HSH_Deref(wrk, NULL, &wrk->sp->req->obj);
}
void
......@@ -597,7 +597,7 @@ HSH_Unbusy(struct worker *wrk)
struct objcore *oc;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
o = wrk->obj;
o = wrk->sp->req->obj;
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
oc = o->objcore;
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
......
......@@ -274,8 +274,8 @@ pan_sess(const struct sess *sp)
if (VALID_OBJ(sp->req->vcl, VCL_CONF_MAGIC))
pan_vcl(sp->req->vcl);
if (VALID_OBJ(sp->wrk->obj, OBJECT_MAGIC))
pan_object(sp->wrk->obj);
if (VALID_OBJ(sp->req->obj, OBJECT_MAGIC))
pan_object(sp->req->obj);
VSB_printf(pan_vsp, "},\n");
}
......
......@@ -41,7 +41,7 @@ res_dorange(const struct sess *sp, const char *r, ssize_t *plow, ssize_t *phigh)
{
ssize_t low, high, has_low;
assert(sp->wrk->obj->response == 200);
assert(sp->req->obj->response == 200);
if (strncmp(r, "bytes=", 6))
return;
r += 6;
......@@ -57,7 +57,7 @@ res_dorange(const struct sess *sp, const char *r, ssize_t *plow, ssize_t *phigh)
r++;
}
if (low >= sp->wrk->obj->len)
if (low >= sp->req->obj->len)
return;
if (*r != '-')
......@@ -73,23 +73,23 @@ res_dorange(const struct sess *sp, const char *r, ssize_t *plow, ssize_t *phigh)
r++;
}
if (!has_low) {
low = sp->wrk->obj->len - high;
high = sp->wrk->obj->len - 1;
low = sp->req->obj->len - high;
high = sp->req->obj->len - 1;
}
} else
high = sp->wrk->obj->len - 1;
high = sp->req->obj->len - 1;
if (*r != '\0')
return;
if (high >= sp->wrk->obj->len)
high = sp->wrk->obj->len - 1;
if (high >= sp->req->obj->len)
high = sp->req->obj->len - 1;
if (low > high)
return;
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->req->resp,
"Content-Range: bytes %jd-%jd/%jd",
(intmax_t)low, (intmax_t)high, (intmax_t)sp->wrk->obj->len);
(intmax_t)low, (intmax_t)high, (intmax_t)sp->req->obj->len);
http_Unset(sp->req->resp, H_Content_Length);
assert(sp->wrk->res_mode & RES_LEN);
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->req->resp,
......@@ -112,9 +112,9 @@ RES_BuildHttp(const struct sess *sp)
http_ClrHeader(sp->req->resp);
sp->req->resp->logtag = HTTP_Tx;
http_CopyResp(sp->req->resp, sp->wrk->obj->http);
http_CopyResp(sp->req->resp, sp->req->obj->http);
http_FilterFields(sp->wrk, sp->vsl_id, sp->req->resp,
sp->wrk->obj->http, HTTPH_A_DELIVER);
sp->req->obj->http, HTTPH_A_DELIVER);
if (!(sp->wrk->res_mode & RES_LEN)) {
http_Unset(sp->req->resp, H_Content_Length);
......@@ -132,15 +132,15 @@ RES_BuildHttp(const struct sess *sp)
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->req->resp,
"Date: %s", time_str);
if (sp->req->xid != sp->wrk->obj->xid)
if (sp->req->xid != sp->req->obj->xid)
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->req->resp,
"X-Varnish: %u %u", sp->req->xid, sp->wrk->obj->xid);
"X-Varnish: %u %u", sp->req->xid, sp->req->obj->xid);
else
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->req->resp,
"X-Varnish: %u", sp->req->xid);
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->req->resp, "Age: %.0f",
sp->wrk->obj->exp.age + sp->req->t_resp -
sp->wrk->obj->exp.entered);
sp->req->obj->exp.age + sp->req->t_resp -
sp->req->obj->exp.entered);
http_SetHeader(sp->wrk, sp->vsl_id, sp->req->resp, "Via: 1.1 varnish");
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->req->resp, "Connection: %s",
sp->req->doclose ? "close" : "keep-alive");
......@@ -167,7 +167,7 @@ res_WriteGunzipObj(const struct sess *sp)
vg = VGZ_NewUngzip(sp->wrk, "U D -");
VGZ_Obuf(vg, obuf, sizeof obuf);
VTAILQ_FOREACH(st, &sp->wrk->obj->store, list) {
VTAILQ_FOREACH(st, &sp->req->obj->store, list) {
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(st, STORAGE_MAGIC);
u += st->len;
......@@ -185,7 +185,7 @@ res_WriteGunzipObj(const struct sess *sp)
(void)WRW_Flush(sp->wrk);
}
(void)VGZ_Destroy(&vg, sp->vsl_id);
assert(u == sp->wrk->obj->len);
assert(u == sp->req->obj->len);
}
/*--------------------------------------------------------------------*/
......@@ -200,7 +200,7 @@ res_WriteDirObj(const struct sess *sp, ssize_t low, ssize_t high)
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
ptr = 0;
VTAILQ_FOREACH(st, &sp->wrk->obj->store, list) {
VTAILQ_FOREACH(st, &sp->req->obj->store, list) {
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(st, STORAGE_MAGIC);
u += st->len;
......@@ -241,7 +241,7 @@ res_WriteDirObj(const struct sess *sp, ssize_t low, ssize_t high)
VSC_C_main->n_objwrite++;
(void)WRW_Write(sp->wrk, st->ptr + off, len);
}
assert(u == sp->wrk->obj->len);
assert(u == sp->req->obj->len);
}
/*--------------------------------------------------------------------
......@@ -259,7 +259,7 @@ RES_WriteObj(struct sess *sp)
WRW_Reserve(sp->wrk, &sp->fd);
if (sp->wrk->obj->response == 200 &&
if (sp->req->obj->response == 200 &&
sp->req->http->conds &&
RFC2616_Do_Cond(sp)) {
sp->req->wantbody = 0;
......@@ -272,13 +272,13 @@ RES_WriteObj(struct sess *sp)
* If nothing special planned, we can attempt Range support
*/
low = 0;
high = sp->wrk->obj->len - 1;
high = sp->req->obj->len - 1;
if (
sp->req->wantbody &&
(sp->wrk->res_mode & RES_LEN) &&
!(sp->wrk->res_mode & (RES_ESI|RES_ESI_CHILD|RES_GUNZIP)) &&
cache_param->http_range_support &&
sp->wrk->obj->response == 200 &&
sp->req->obj->response == 200 &&
http_GetHdr(sp->req->http, H_Range, &r))
res_dorange(sp, r, &low, &high);
......@@ -303,14 +303,14 @@ RES_WriteObj(struct sess *sp)
if (!sp->req->wantbody) {
/* This was a HEAD or conditional request */
} else if (sp->wrk->obj->len == 0) {
} else if (sp->req->obj->len == 0) {
/* Nothing to do here */
} else if (sp->wrk->res_mode & RES_ESI) {
ESI_Deliver(sp);
} else if (sp->wrk->res_mode & RES_ESI_CHILD && sp->wrk->gzip_resp) {
ESI_DeliverChild(sp);
} else if (sp->wrk->res_mode & RES_ESI_CHILD &&
!sp->wrk->gzip_resp && sp->wrk->obj->gziped) {
!sp->wrk->gzip_resp && sp->req->obj->gziped) {
res_WriteGunzipObj(sp);
} else if (sp->wrk->res_mode & RES_GUNZIP) {
res_WriteGunzipObj(sp);
......
......@@ -319,18 +319,18 @@ RFC2616_Do_Cond(const struct sess *sp)
and If-Modified-Since if present*/
if (http_GetHdr(sp->req->http, H_If_Modified_Since, &p) ) {
if (!sp->wrk->obj->last_modified)
if (!sp->req->obj->last_modified)
return (0);
ims = VTIM_parse(p);
if (ims > sp->t_req) /* [RFC2616 14.25] */
return (0);
if (sp->wrk->obj->last_modified > ims)
if (sp->req->obj->last_modified > ims)
return (0);
do_cond = 1;
}
if (http_GetHdr(sp->req->http, H_If_None_Match, &p) &&
http_GetHdr(sp->wrk->obj->http, H_ETag, &e)) {
http_GetHdr(sp->req->obj->http, H_ETag, &e)) {
if (strcmp(p,e) != 0)
return (0);
do_cond = 1;
......
......@@ -110,8 +110,8 @@ vrt_selecthttp(const struct sess *sp, enum gethdr_e where)
hp = sp->req->resp;
break;
case HDR_OBJ:
CHECK_OBJ_NOTNULL(sp->wrk->obj, OBJECT_MAGIC);
hp = sp->wrk->obj->http;
CHECK_OBJ_NOTNULL(sp->req->obj, OBJECT_MAGIC);
hp = sp->req->obj->http;
break;
default:
INCOMPL();
......@@ -401,8 +401,8 @@ VRT_synth_page(const struct sess *sp, unsigned flags, const char *str, ...)
(void)flags;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(sp->wrk->obj, OBJECT_MAGIC);
vsb = SMS_Makesynth(sp->wrk->obj);
CHECK_OBJ_NOTNULL(sp->req->obj, OBJECT_MAGIC);
vsb = SMS_Makesynth(sp->req->obj);
AN(vsb);
VSB_cat(vsb, str);
......@@ -415,10 +415,10 @@ VRT_synth_page(const struct sess *sp, unsigned flags, const char *str, ...)
p = va_arg(ap, const char *);
}
va_end(ap);
SMS_Finish(sp->wrk->obj);
http_Unset(sp->wrk->obj->http, H_Content_Length);
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->wrk->obj->http,
"Content-Length: %zd", sp->wrk->obj->len);
SMS_Finish(sp->req->obj);
http_Unset(sp->req->obj->http, H_Content_Length);
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->req->obj->http,
"Content-Length: %zd", sp->req->obj->len);
}
/*--------------------------------------------------------------------*/
......@@ -512,9 +512,9 @@ void
VRT_purge(const struct sess *sp, double ttl, double grace)
{
if (sp->req->cur_method == VCL_MET_HIT)
HSH_Purge(sp, sp->wrk->obj->objcore->objhead, ttl, grace);
HSH_Purge(sp, sp->req->obj->objcore->objhead, ttl, grace);
else if (sp->req->cur_method == VCL_MET_MISS)
HSH_Purge(sp, sp->wrk->objcore->objhead, ttl, grace);
HSH_Purge(sp, sp->req->objcore->objhead, ttl, grace);
}
/*--------------------------------------------------------------------
......
......@@ -88,8 +88,8 @@ VRT_DO_HDR(req, proto, sp->req->http, HTTP_HDR_PROTO)
VRT_DO_HDR(bereq, request, sp->wrk->busyobj->bereq, HTTP_HDR_REQ)
VRT_DO_HDR(bereq, url, sp->wrk->busyobj->bereq, HTTP_HDR_URL)
VRT_DO_HDR(bereq, proto, sp->wrk->busyobj->bereq, HTTP_HDR_PROTO)
VRT_DO_HDR(obj, proto, sp->wrk->obj->http, HTTP_HDR_PROTO)
VRT_DO_HDR(obj, response, sp->wrk->obj->http, HTTP_HDR_RESPONSE)
VRT_DO_HDR(obj, proto, sp->req->obj->http, HTTP_HDR_PROTO)
VRT_DO_HDR(obj, response, sp->req->obj->http, HTTP_HDR_RESPONSE)
VRT_DO_HDR(resp, proto, sp->req->resp, HTTP_HDR_PROTO)
VRT_DO_HDR(resp, response, sp->req->resp, HTTP_HDR_RESPONSE)
VRT_DO_HDR(beresp, proto, sp->wrk->busyobj->beresp, HTTP_HDR_PROTO)
......@@ -114,7 +114,7 @@ VRT_r_##obj##_status(const struct sess *sp) \
return(http->status); \
}
VRT_DO_STATUS(obj, sp->wrk->obj->http)
VRT_DO_STATUS(obj, sp->req->obj->http)
VRT_DO_STATUS(beresp, sp->wrk->busyobj->beresp)
VRT_DO_STATUS(resp, sp->req->resp)
......@@ -145,9 +145,9 @@ VRT_l_beresp_saintmode(const struct sess *sp, double a)
if (!vbc->backend)
return;
CHECK_OBJ_NOTNULL(vbc->backend, BACKEND_MAGIC);
if (!sp->wrk->objcore)
if (!sp->req->objcore)
return;
CHECK_OBJ_NOTNULL(sp->wrk->objcore, OBJCORE_MAGIC);
CHECK_OBJ_NOTNULL(sp->req->objcore, OBJCORE_MAGIC);
/* Setting a negative holdoff period is a mistake. Detecting this
* when compiling the VCL would be better.
......@@ -156,7 +156,7 @@ VRT_l_beresp_saintmode(const struct sess *sp, double a)
ALLOC_OBJ(new, TROUBLE_MAGIC);
AN(new);
new->target = (uintptr_t)(sp->wrk->objcore->objhead);
new->target = (uintptr_t)(sp->req->objcore->objhead);
new->timeout = sp->t_req + a;
/* Insert the new item on the list before the first item with a
......@@ -405,15 +405,15 @@ VRT_DO_EXP(req, sp->req->exp, ttl, 0, )
VRT_DO_EXP(req, sp->req->exp, grace, 0, )
VRT_DO_EXP(req, sp->req->exp, keep, 0, )
VRT_DO_EXP(obj, sp->wrk->obj->exp, grace, 0,
EXP_Rearm(sp->wrk->obj);
vrt_wsp_exp(sp, sp->wrk->obj->xid, &sp->wrk->obj->exp);)
VRT_DO_EXP(obj, sp->wrk->obj->exp, ttl, (sp->t_req - sp->wrk->obj->exp.entered),
EXP_Rearm(sp->wrk->obj);
vrt_wsp_exp(sp, sp->wrk->obj->xid, &sp->wrk->obj->exp);)
VRT_DO_EXP(obj, sp->wrk->obj->exp, keep, 0,
EXP_Rearm(sp->wrk->obj);
vrt_wsp_exp(sp, sp->wrk->obj->xid, &sp->wrk->obj->exp);)
VRT_DO_EXP(obj, sp->req->obj->exp, grace, 0,
EXP_Rearm(sp->req->obj);
vrt_wsp_exp(sp, sp->req->obj->xid, &sp->req->obj->exp);)
VRT_DO_EXP(obj, sp->req->obj->exp, ttl, (sp->t_req - sp->req->obj->exp.entered),
EXP_Rearm(sp->req->obj);
vrt_wsp_exp(sp, sp->req->obj->xid, &sp->req->obj->exp);)
VRT_DO_EXP(obj, sp->req->obj->exp, keep, 0,
EXP_Rearm(sp->req->obj);
vrt_wsp_exp(sp, sp->req->obj->xid, &sp->req->obj->exp);)
VRT_DO_EXP(beresp, sp->wrk->busyobj->exp, grace, 0,
vrt_wsp_exp(sp, sp->req->xid, &sp->wrk->busyobj->exp);)
......@@ -531,8 +531,8 @@ VRT_r_obj_hits(const struct sess *sp)
{
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(sp->wrk->obj, OBJECT_MAGIC); /* XXX */
return (sp->wrk->obj->hits);
CHECK_OBJ_NOTNULL(sp->req->obj, OBJECT_MAGIC); /* XXX */
return (sp->req->obj->hits);
}
double
......@@ -540,8 +540,8 @@ VRT_r_obj_lastuse(const struct sess *sp)
{
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(sp->wrk->obj, OBJECT_MAGIC); /* XXX */
return (VTIM_real() - sp->wrk->obj->last_use);
CHECK_OBJ_NOTNULL(sp->req->obj, OBJECT_MAGIC); /* XXX */
return (VTIM_real() - sp->req->obj->last_use);
}
unsigned
......
......@@ -256,11 +256,11 @@ STV_MkObject(struct worker *wrk, void *ptr, unsigned ltot,
VTAILQ_INIT(&o->store);
wrk->stats.n_object++;
if (wrk->objcore != NULL) {
CHECK_OBJ_NOTNULL(wrk->objcore, OBJCORE_MAGIC);
if (wrk->sp->req->objcore != NULL) {
CHECK_OBJ_NOTNULL(wrk->sp->req->objcore, OBJCORE_MAGIC);
o->objcore = wrk->objcore;
wrk->objcore = NULL; /* refcnt follows pointer. */
o->objcore = wrk->sp->req->objcore;
wrk->sp->req->objcore = NULL; /* refcnt follows pointer. */
BAN_NewObjCore(o->objcore);
o->objcore->methods = &default_oc_methods;
......
......@@ -474,10 +474,10 @@ smp_allocobj(struct stevedore *stv, struct worker *wrk, unsigned ltot,
struct objcore *oc;
unsigned objidx;
if (wrk->objcore == NULL)
if (wrk->sp->req->objcore == NULL)
return (NULL); /* from cnt_error */
CAST_OBJ_NOTNULL(sc, stv->priv, SMP_SC_MAGIC);
AN(wrk->objcore);
AN(wrk->sp->req->objcore);
AN(wrk->busyobj->exp.ttl > 0.);
ltot = IRNUP(sc, ltot);
......
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