[master] 3150388 The obj and objcore are not really properties of the session, and we need to be able to reach them during fetching without worrying about a particular session.
Poul-Henning Kamp
phk at varnish-cache.org
Tue Nov 29 13:14:23 CET 2011
commit 3150388c776ce53d94451cf7364020000710e55e
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Nov 29 12:12:00 2011 +0000
The obj and objcore are not really properties of the session, and we
need to be able to reach them during fetching without worrying about
a particular session.
Move them to the worker thread, which corresponds much closer to their
lifetime.
This is mostly a brute force s/sp->obj/sp->wrk->obj/, with a few
necessary edits. Consequential fallouts and sp-scope-elimination to
follow in subsequent commits.
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 1475d6d..db001ba 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -321,6 +321,9 @@ struct worker {
struct http *beresp;
struct http *resp;
+ struct object *obj;
+ struct objcore *objcore;
+
struct exp exp;
/* This is only here so VRT can find it */
@@ -599,8 +602,6 @@ struct sess {
VTAILQ_ENTRY(sess) list;
struct director *director;
- struct object *obj;
- struct objcore *objcore;
struct VCL_conf *vcl;
/* The busy objhead we sleep on */
diff --git a/bin/varnishd/cache/cache_backend.c b/bin/varnishd/cache/cache_backend.c
index 1f290c3..de4318f 100644
--- a/bin/varnishd/cache/cache_backend.c
+++ b/bin/varnishd/cache/cache_backend.c
@@ -230,7 +230,7 @@ vbe_NewConn(void)
/*--------------------------------------------------------------------
* It evaluates if a backend is healthy _for_a_specific_object_.
- * That means that it relies on sp->objcore->objhead. This is mainly for
+ * That means that it relies on sp->wrk->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.
@@ -277,11 +277,11 @@ vbe_Healthy(const struct vdi_simple *vs, const struct sess *sp)
if (threshold == 0)
return (1);
- if (sp->objcore == NULL)
+ if (sp->wrk->objcore == NULL)
return (1);
now = sp->t_req;
- target = (uintptr_t)(sp->objcore->objhead);
+ target = (uintptr_t)(sp->wrk->objcore->objhead);
old = NULL;
retval = 1;
diff --git a/bin/varnishd/cache/cache_center.c b/bin/varnishd/cache/cache_center.c
index b79aa31..28c4760 100644
--- a/bin/varnishd/cache/cache_center.c
+++ b/bin/varnishd/cache/cache_center.c
@@ -101,7 +101,7 @@ cnt_wait(struct sess *sp)
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
AZ(sp->vcl);
- AZ(sp->obj);
+ AZ(sp->wrk->obj);
AZ(sp->esi_level);
assert(sp->xid == 0);
@@ -170,11 +170,11 @@ cnt_prepresp(struct sess *sp)
{
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
- CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);
+ CHECK_OBJ_NOTNULL(sp->wrk->obj, OBJECT_MAGIC);
CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC);
if (sp->wrk->do_stream)
- AssertObjCorePassOrBusy(sp->obj->objcore);
+ AssertObjCorePassOrBusy(sp->wrk->obj->objcore);
sp->wrk->res_mode = 0;
@@ -182,7 +182,7 @@ cnt_prepresp(struct sess *sp)
!sp->wrk->do_gzip && !sp->wrk->do_gunzip)
sp->wrk->res_mode |= RES_LEN;
- if (!sp->disable_esi && sp->obj->esidata != NULL) {
+ if (!sp->disable_esi && sp->wrk->obj->esidata != NULL) {
/* In ESI mode, we don't know the aggregate length */
sp->wrk->res_mode &= ~RES_LEN;
sp->wrk->res_mode |= RES_ESI;
@@ -193,7 +193,7 @@ cnt_prepresp(struct sess *sp)
sp->wrk->res_mode |= RES_ESI_CHILD;
}
- if (cache_param->http_gzip_support && sp->obj->gziped &&
+ if (cache_param->http_gzip_support && sp->wrk->obj->gziped &&
!RFC2616_Req_Gzip(sp)) {
/*
* We don't know what it uncompresses to
@@ -204,7 +204,7 @@ cnt_prepresp(struct sess *sp)
}
if (!(sp->wrk->res_mode & (RES_LEN|RES_CHUNKED|RES_EOF))) {
- if (sp->obj->len == 0 && !sp->wrk->do_stream)
+ if (sp->wrk->obj->len == 0 && !sp->wrk->do_stream)
/*
* If the object is empty, neither ESI nor GUNZIP
* can make it any different size
@@ -221,11 +221,11 @@ cnt_prepresp(struct sess *sp)
}
sp->t_resp = W_TIM_real(sp->wrk);
- if (sp->obj->objcore != NULL) {
- if ((sp->t_resp - sp->obj->last_lru) > cache_param->lru_timeout &&
- EXP_Touch(sp->obj->objcore))
- sp->obj->last_lru = sp->t_resp;
- sp->obj->last_use = sp->t_resp; /* XXX: locking ? */
+ if (sp->wrk->obj->objcore != NULL) {
+ if ((sp->t_resp - sp->wrk->obj->last_lru) > cache_param->lru_timeout &&
+ EXP_Touch(sp->wrk->obj->objcore))
+ sp->wrk->obj->last_lru = sp->t_resp;
+ sp->wrk->obj->last_use = sp->t_resp; /* XXX: locking ? */
}
http_Setup(sp->wrk->resp, sp->wrk->ws);
RES_BuildHttp(sp);
@@ -240,9 +240,9 @@ cnt_prepresp(struct sess *sp)
VDI_CloseFd(sp->wrk);
HSH_Drop(sp);
} else {
- (void)HSH_Deref(sp->wrk, NULL, &sp->obj);
+ (void)HSH_Deref(sp->wrk, NULL, &sp->wrk->obj);
}
- AZ(sp->obj);
+ AZ(sp->wrk->obj);
sp->restarts++;
sp->director = NULL;
sp->wrk->h_content_length = NULL;
@@ -255,7 +255,7 @@ cnt_prepresp(struct sess *sp)
WRONG("Illegal action in vcl_deliver{}");
}
if (sp->wrk->do_stream) {
- AssertObjCorePassOrBusy(sp->obj->objcore);
+ AssertObjCorePassOrBusy(sp->wrk->obj->objcore);
sp->step = STP_STREAMBODY;
} else {
sp->step = STP_DELIVER;
@@ -289,7 +289,7 @@ cnt_deliver(struct sess *sp)
assert(WRW_IsReleased(sp->wrk));
assert(sp->wrk->wrw.ciov == sp->wrk->wrw.siov);
- (void)HSH_Deref(sp->wrk, NULL, &sp->obj);
+ (void)HSH_Deref(sp->wrk, NULL, &sp->wrk->obj);
http_Setup(sp->wrk->resp, NULL);
sp->step = STP_DONE;
return (0);
@@ -318,7 +318,7 @@ cnt_done(struct sess *sp)
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_ORNULL(sp->vcl, VCL_CONF_MAGIC);
- AZ(sp->obj);
+ AZ(sp->wrk->obj);
AZ(sp->wrk->vbc);
sp->director = NULL;
sp->restarts = 0;
@@ -450,16 +450,16 @@ cnt_error(struct sess *sp)
sp->wrk->do_stream = 0;
w = sp->wrk;
- if (sp->obj == NULL) {
+ if (sp->wrk->obj == NULL) {
HSH_Prealloc(sp);
EXP_Clr(&w->exp);
- sp->obj = STV_NewObject(sp, NULL, cache_param->http_resp_size,
+ sp->wrk->obj = STV_NewObject(sp, NULL, cache_param->http_resp_size,
&w->exp, (uint16_t)cache_param->http_max_hdr);
- if (sp->obj == NULL)
- sp->obj = STV_NewObject(sp, TRANSIENT_STORAGE,
+ if (sp->wrk->obj == NULL)
+ sp->wrk->obj = STV_NewObject(sp, TRANSIENT_STORAGE,
cache_param->http_resp_size, &w->exp,
(uint16_t)cache_param->http_max_hdr);
- if (sp->obj == NULL) {
+ if (sp->wrk->obj == NULL) {
sp->doclose = "Out of objects";
sp->director = NULL;
sp->wrk->h_content_length = NULL;
@@ -468,14 +468,14 @@ cnt_error(struct sess *sp)
sp->step = STP_DONE;
return(0);
}
- AN(sp->obj);
- sp->obj->xid = sp->xid;
- sp->obj->exp.entered = sp->t_req;
+ AN(sp->wrk->obj);
+ sp->wrk->obj->xid = sp->xid;
+ sp->wrk->obj->exp.entered = sp->t_req;
} else {
/* XXX: Null the headers ? */
}
- CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);
- h = sp->obj->http;
+ CHECK_OBJ_NOTNULL(sp->wrk->obj, OBJECT_MAGIC);
+ h = sp->wrk->obj->http;
if (sp->err_code < 100 || sp->err_code > 999)
sp->err_code = 501;
@@ -601,7 +601,7 @@ cnt_fetch(struct sess *sp)
RFC2616_Ttl(sp);
/* pass from vclrecv{} has negative TTL */
- if (sp->objcore == NULL)
+ if (sp->wrk->objcore == NULL)
sp->wrk->exp.ttl = -1.;
AZ(sp->wrk->do_esi);
@@ -610,12 +610,12 @@ cnt_fetch(struct sess *sp)
switch (sp->handling) {
case VCL_RET_HIT_FOR_PASS:
- if (sp->objcore != NULL)
- sp->objcore->flags |= OC_F_PASS;
+ if (sp->wrk->objcore != NULL)
+ sp->wrk->objcore->flags |= OC_F_PASS;
sp->step = STP_FETCHBODY;
return (0);
case VCL_RET_DELIVER:
- AssertObjCorePassOrBusy(sp->objcore);
+ AssertObjCorePassOrBusy(sp->wrk->objcore);
sp->step = STP_FETCHBODY;
return (0);
default:
@@ -629,10 +629,10 @@ cnt_fetch(struct sess *sp)
/* Clean up partial fetch */
AZ(sp->wrk->vbc);
- if (sp->objcore != NULL) {
- CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
- AZ(HSH_Deref(sp->wrk, sp->objcore, NULL));
- sp->objcore = NULL;
+ if (sp->wrk->objcore != NULL) {
+ CHECK_OBJ_NOTNULL(sp->wrk->objcore, OBJCORE_MAGIC);
+ AZ(HSH_Deref(sp->wrk, sp->wrk->objcore, NULL));
+ sp->wrk->objcore = NULL;
}
http_Setup(sp->wrk->bereq, NULL);
http_Setup(sp->wrk->beresp, NULL);
@@ -688,7 +688,7 @@ cnt_fetchbody(struct sess *sp)
assert(sp->handling == VCL_RET_HIT_FOR_PASS ||
sp->handling == VCL_RET_DELIVER);
- if (sp->objcore == NULL) {
+ if (sp->wrk->objcore == NULL) {
/* This is a pass from vcl_recv */
pass = 1;
/* VCL may have fiddled this, but that doesn't help */
@@ -769,8 +769,8 @@ cnt_fetchbody(struct sess *sp)
pass ? HTTPH_R_PASS : HTTPH_A_INS, &nhttp);
/* Create Vary instructions */
- if (sp->objcore != NULL) {
- CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
+ if (sp->wrk->objcore != NULL) {
+ CHECK_OBJ_NOTNULL(sp->wrk->objcore, OBJCORE_MAGIC);
vary = VRY_Create(sp, sp->wrk->beresp);
if (vary != NULL) {
varyl = VSB_len(vary);
@@ -785,52 +785,52 @@ cnt_fetchbody(struct sess *sp)
*/
l += strlen("Content-Length: XxxXxxXxxXxxXxxXxx") + sizeof(void *);
- if (sp->wrk->exp.ttl < cache_param->shortlived || sp->objcore == NULL)
+ if (sp->wrk->exp.ttl < cache_param->shortlived || sp->wrk->objcore == NULL)
sp->wrk->storage_hint = TRANSIENT_STORAGE;
- sp->obj = STV_NewObject(sp, sp->wrk->storage_hint, l,
+ sp->wrk->obj = STV_NewObject(sp, sp->wrk->storage_hint, l,
&sp->wrk->exp, nhttp);
- if (sp->obj == NULL) {
+ if (sp->wrk->obj == NULL) {
/*
* Try to salvage the transaction by allocating a
* shortlived object on Transient storage.
*/
- sp->obj = STV_NewObject(sp, TRANSIENT_STORAGE, l,
+ sp->wrk->obj = STV_NewObject(sp, TRANSIENT_STORAGE, l,
&sp->wrk->exp, nhttp);
if (sp->wrk->exp.ttl > cache_param->shortlived)
sp->wrk->exp.ttl = cache_param->shortlived;
sp->wrk->exp.grace = 0.0;
sp->wrk->exp.keep = 0.0;
}
- if (sp->obj == NULL) {
+ if (sp->wrk->obj == NULL) {
sp->err_code = 503;
sp->step = STP_ERROR;
VDI_CloseFd(sp->wrk);
return (0);
}
- CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);
+ CHECK_OBJ_NOTNULL(sp->wrk->obj, OBJECT_MAGIC);
sp->wrk->storage_hint = NULL;
if (sp->wrk->do_gzip || (sp->wrk->is_gzip && !sp->wrk->do_gunzip))
- sp->obj->gziped = 1;
+ sp->wrk->obj->gziped = 1;
if (vary != NULL) {
- sp->obj->vary =
- (void *)WS_Alloc(sp->obj->http->ws, varyl);
- AN(sp->obj->vary);
- memcpy(sp->obj->vary, VSB_data(vary), varyl);
- VRY_Validate(sp->obj->vary);
+ sp->wrk->obj->vary =
+ (void *)WS_Alloc(sp->wrk->obj->http->ws, varyl);
+ AN(sp->wrk->obj->vary);
+ memcpy(sp->wrk->obj->vary, VSB_data(vary), varyl);
+ VRY_Validate(sp->wrk->obj->vary);
VSB_delete(vary);
}
- sp->obj->xid = sp->xid;
- sp->obj->response = sp->err_code;
- WS_Assert(sp->obj->ws_o);
+ sp->wrk->obj->xid = sp->xid;
+ sp->wrk->obj->response = sp->err_code;
+ WS_Assert(sp->wrk->obj->ws_o);
/* Filter into object */
hp = sp->wrk->beresp;
- hp2 = sp->obj->http;
+ hp2 = sp->wrk->obj->http;
hp2->logtag = HTTP_Obj;
http_CopyResp(hp2, hp);
@@ -839,9 +839,9 @@ cnt_fetchbody(struct sess *sp)
http_CopyHome(sp->wrk, sp->vsl_id, hp2);
if (http_GetHdr(hp, H_Last_Modified, &b))
- sp->obj->last_modified = VTIM_parse(b);
+ sp->wrk->obj->last_modified = VTIM_parse(b);
else
- sp->obj->last_modified = floor(sp->wrk->exp.entered);
+ sp->wrk->obj->last_modified = floor(sp->wrk->exp.entered);
assert(WRW_IsReleased(sp->wrk));
@@ -850,12 +850,12 @@ cnt_fetchbody(struct sess *sp)
* Notice that vcl_deliver{} could still nuke the headers
* that allow the 304, in which case we return 200 non-stream.
*/
- if (sp->obj->response == 200 &&
+ if (sp->wrk->obj->response == 200 &&
sp->http->conds &&
RFC2616_Do_Cond(sp))
sp->wrk->do_stream = 0;
- AssertObjCorePassOrBusy(sp->obj->objcore);
+ AssertObjCorePassOrBusy(sp->wrk->obj->objcore);
if (sp->wrk->do_stream) {
sp->step = STP_PREPRESP;
@@ -863,7 +863,7 @@ cnt_fetchbody(struct sess *sp)
}
/* Use unmodified headers*/
- i = FetchBody(sp->wrk, sp->obj);
+ i = FetchBody(sp->wrk, sp->wrk->obj);
sp->wrk->h_content_length = NULL;
@@ -876,16 +876,16 @@ cnt_fetchbody(struct sess *sp)
if (i) {
HSH_Drop(sp);
- AZ(sp->obj);
+ AZ(sp->wrk->obj);
sp->err_code = 503;
sp->step = STP_ERROR;
return (0);
}
- if (sp->obj->objcore != NULL) {
- EXP_Insert(sp->obj);
- AN(sp->obj->objcore);
- AN(sp->obj->objcore->ban);
+ if (sp->wrk->obj->objcore != NULL) {
+ EXP_Insert(sp->wrk->obj);
+ AN(sp->wrk->obj->objcore);
+ AN(sp->wrk->obj->objcore->ban);
HSH_Unbusy(sp);
}
sp->wrk->acct_tmp.fetch++;
@@ -925,9 +925,9 @@ cnt_streambody(struct sess *sp)
RES_StreamStart(sp);
- AssertObjCorePassOrBusy(sp->obj->objcore);
+ AssertObjCorePassOrBusy(sp->wrk->obj->objcore);
- i = FetchBody(sp->wrk, sp->obj);
+ i = FetchBody(sp->wrk, sp->wrk->obj);
sp->wrk->h_content_length = NULL;
@@ -937,10 +937,10 @@ cnt_streambody(struct sess *sp)
AZ(sp->wrk->vbc);
AN(sp->director);
- if (!i && sp->obj->objcore != NULL) {
- EXP_Insert(sp->obj);
- AN(sp->obj->objcore);
- AN(sp->obj->objcore->ban);
+ if (!i && sp->wrk->obj->objcore != NULL) {
+ EXP_Insert(sp->wrk->obj);
+ AN(sp->wrk->obj->objcore);
+ AN(sp->wrk->obj->objcore->ban);
HSH_Unbusy(sp);
} else {
sp->doclose = "Stream error";
@@ -956,7 +956,7 @@ cnt_streambody(struct sess *sp)
sp->wrk->sctx = NULL;
assert(WRW_IsReleased(sp->wrk));
assert(sp->wrk->wrw.ciov == sp->wrk->wrw.siov);
- (void)HSH_Deref(sp->wrk, NULL, &sp->obj);
+ (void)HSH_Deref(sp->wrk, NULL, &sp->wrk->obj);
http_Setup(sp->wrk->resp, NULL);
sp->step = STP_DONE;
return (0);
@@ -1024,10 +1024,10 @@ cnt_hit(struct sess *sp)
{
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
- CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);
+ CHECK_OBJ_NOTNULL(sp->wrk->obj, OBJECT_MAGIC);
CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC);
- assert(!(sp->obj->objcore->flags & OC_F_PASS));
+ assert(!(sp->wrk->obj->objcore->flags & OC_F_PASS));
AZ(sp->wrk->do_stream);
@@ -1043,8 +1043,8 @@ cnt_hit(struct sess *sp)
}
/* Drop our object, we won't need it */
- (void)HSH_Deref(sp->wrk, NULL, &sp->obj);
- sp->objcore = NULL;
+ (void)HSH_Deref(sp->wrk, NULL, &sp->wrk->obj);
+ sp->wrk->objcore = NULL;
switch(sp->handling) {
case VCL_RET_PASS:
@@ -1146,14 +1146,14 @@ cnt_lookup(struct sess *sp)
sp->vary_l = NULL;
sp->vary_e = NULL;
- sp->objcore = oc;
+ sp->wrk->objcore = oc;
sp->step = STP_MISS;
return (0);
}
o = oc_getobj(sp->wrk, oc);
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
- sp->obj = o;
+ sp->wrk->obj = o;
WS_Release(sp->ws, 0);
sp->vary_b = NULL;
@@ -1162,15 +1162,15 @@ cnt_lookup(struct sess *sp)
if (oc->flags & OC_F_PASS) {
sp->wrk->stats.cache_hitpass++;
- WSP(sp, SLT_HitPass, "%u", sp->obj->xid);
- (void)HSH_Deref(sp->wrk, NULL, &sp->obj);
- sp->objcore = NULL;
+ WSP(sp, SLT_HitPass, "%u", sp->wrk->obj->xid);
+ (void)HSH_Deref(sp->wrk, NULL, &sp->wrk->obj);
+ sp->wrk->objcore = NULL;
sp->step = STP_PASS;
return (0);
}
sp->wrk->stats.cache_hit++;
- WSP(sp, SLT_Hit, "%u", sp->obj->xid);
+ WSP(sp, SLT_Hit, "%u", sp->wrk->obj->xid);
sp->step = STP_HIT;
return (0);
}
@@ -1205,8 +1205,8 @@ cnt_miss(struct sess *sp)
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC);
- AZ(sp->obj);
- AN(sp->objcore);
+ AZ(sp->wrk->obj);
+ AN(sp->wrk->objcore);
WS_Reset(sp->wrk->ws, NULL);
http_Setup(sp->wrk->bereq, sp->wrk->ws);
http_FilterHeader(sp, HTTPH_R_FETCH);
@@ -1227,22 +1227,22 @@ cnt_miss(struct sess *sp)
VCL_miss_method(sp);
switch(sp->handling) {
case VCL_RET_ERROR:
- AZ(HSH_Deref(sp->wrk, sp->objcore, NULL));
- sp->objcore = NULL;
+ AZ(HSH_Deref(sp->wrk, sp->wrk->objcore, NULL));
+ sp->wrk->objcore = NULL;
http_Setup(sp->wrk->bereq, NULL);
sp->step = STP_ERROR;
return (0);
case VCL_RET_PASS:
- AZ(HSH_Deref(sp->wrk, sp->objcore, NULL));
- sp->objcore = NULL;
+ AZ(HSH_Deref(sp->wrk, sp->wrk->objcore, NULL));
+ sp->wrk->objcore = NULL;
sp->step = STP_PASS;
return (0);
case VCL_RET_FETCH:
sp->step = STP_FETCH;
return (0);
case VCL_RET_RESTART:
- AZ(HSH_Deref(sp->wrk, sp->objcore, NULL));
- sp->objcore = NULL;
+ AZ(HSH_Deref(sp->wrk, sp->wrk->objcore, NULL));
+ sp->wrk->objcore = NULL;
INCOMPL();
default:
WRONG("Illegal action in vcl_miss{}");
@@ -1287,7 +1287,7 @@ cnt_pass(struct sess *sp)
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC);
- AZ(sp->obj);
+ AZ(sp->wrk->obj);
WS_Reset(sp->wrk->ws, NULL);
http_Setup(sp->wrk->bereq, sp->wrk->ws);
@@ -1386,7 +1386,7 @@ cnt_recv(struct sess *sp)
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC);
- AZ(sp->obj);
+ AZ(sp->wrk->obj);
assert(sp->wrk->wrw.ciov == sp->wrk->wrw.siov);
/* By default we use the first backend */
@@ -1489,7 +1489,7 @@ cnt_start(struct sess *sp)
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
AZ(sp->restarts);
- AZ(sp->obj);
+ AZ(sp->wrk->obj);
AZ(sp->vcl);
AZ(sp->esi_level);
@@ -1568,12 +1568,12 @@ cnt_diag(struct sess *sp, const char *state)
{
if (sp->wrk != NULL) {
WSP(sp, SLT_Debug, "thr %p STP_%s sp %p obj %p vcl %p",
- pthread_self(), state, sp, sp->obj, sp->vcl);
+ pthread_self(), state, sp, sp->wrk->obj, sp->vcl);
WSL_Flush(sp->wrk, 0);
} else {
VSL(SLT_Debug, sp->vsl_id,
"thr %p STP_%s sp %p obj %p vcl %p",
- pthread_self(), state, sp, sp->obj, sp->vcl);
+ pthread_self(), state, sp, sp->wrk->obj, sp->vcl);
}
}
@@ -1602,6 +1602,8 @@ CNT_Session(struct sess *sp)
AZ(w->is_gunzip);
AZ(w->do_gunzip);
AZ(w->do_esi);
+ AZ(w->obj);
+ AZ(w->objcore);
/*
* Whenever we come in from the acceptor or waiter, we need to set
@@ -1630,7 +1632,7 @@ CNT_Session(struct sess *sp)
* pointers still pointing to the things we expect.
*/
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
- CHECK_OBJ_ORNULL(sp->obj, OBJECT_MAGIC);
+ CHECK_OBJ_ORNULL(sp->wrk->obj, OBJECT_MAGIC);
CHECK_OBJ_NOTNULL(sp->wrk, WORKER_MAGIC);
CHECK_OBJ_ORNULL(w->nobjhead, OBJHEAD_MAGIC);
WS_Assert(w->ws);
@@ -1651,6 +1653,8 @@ CNT_Session(struct sess *sp)
CHECK_OBJ_ORNULL(w->nobjhead, OBJHEAD_MAGIC);
}
WSL_Flush(w, 0);
+ AZ(w->obj);
+ AZ(w->objcore);
AZ(w->do_stream);
AZ(w->is_gzip);
AZ(w->do_gzip);
diff --git a/bin/varnishd/cache/cache_esi_deliver.c b/bin/varnishd/cache/cache_esi_deliver.c
index 4051027..5ac8e71 100644
--- a/bin/varnishd/cache/cache_esi_deliver.c
+++ b/bin/varnishd/cache/cache_esi_deliver.c
@@ -58,8 +58,8 @@ ved_include(struct sess *sp, const char *src, const char *host)
(void)WRW_FlushRelease(w);
- obj = sp->obj;
- sp->obj = NULL;
+ obj = sp->wrk->obj;
+ sp->wrk->obj = NULL;
res_mode = sp->wrk->res_mode;
/* Reset request to status before we started messing with it */
@@ -113,7 +113,7 @@ ved_include(struct sess *sp, const char *src, const char *host)
AN(sp->wrk);
assert(sp->step == STP_DONE);
sp->esi_level--;
- sp->obj = obj;
+ sp->wrk->obj = obj;
sp->wrk->res_mode = res_mode;
/* Reset the workspace */
@@ -238,7 +238,7 @@ ESI_Deliver(struct sess *sp)
int i;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
- st = sp->obj->esidata;
+ st = sp->wrk->obj->esidata;
AN(st);
assert(sizeof obuf >= 1024);
@@ -283,7 +283,7 @@ ESI_Deliver(struct sess *sp)
obufl = 0;
}
- st = VTAILQ_FIRST(&sp->obj->store);
+ st = VTAILQ_FIRST(&sp->wrk->obj->store);
off = 0;
while (p < e) {
@@ -440,7 +440,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->obj->store, list) {
+ VTAILQ_FOREACH(st, &sp->wrk->obj->store, list) {
p = st->ptr;
l = st->len;
//printf("[0-] %jd %jd\n", lx, lx + l);
@@ -481,8 +481,8 @@ ESI_DeliverChild(const struct sess *sp)
uint32_t ilen;
uint8_t *dbits;
- if (!sp->obj->gziped) {
- VTAILQ_FOREACH(st, &sp->obj->store, list)
+ if (!sp->wrk->obj->gziped) {
+ VTAILQ_FOREACH(st, &sp->wrk->obj->store, list)
ved_pretend_gzip(sp, st->ptr, st->len);
return;
}
@@ -494,7 +494,7 @@ ESI_DeliverChild(const struct sess *sp)
dbits = (void*)WS_Alloc(sp->wrk->ws, 8);
AN(dbits);
- obj = sp->obj;
+ obj = sp->wrk->obj;
CHECK_OBJ_NOTNULL(obj, OBJECT_MAGIC);
start = obj->gzip_start;
last = obj->gzip_last;
@@ -559,7 +559,7 @@ ESI_DeliverChild(const struct sess *sp)
}
if (lpad > 0)
(void)WRW_Write(sp->wrk, dbits + 1, lpad);
- st = VTAILQ_LAST(&sp->obj->store, storagehead);
+ st = VTAILQ_LAST(&sp->wrk->obj->store, storagehead);
assert(st->len > 8);
p = st->ptr + st->len - 8;
diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index a5c0323..66241bc 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -389,11 +389,11 @@ FetchHdr(struct sess *sp)
w = sp->wrk;
AN(sp->director);
- AZ(sp->obj);
+ AZ(sp->wrk->obj);
- if (sp->objcore != NULL) { /* pass has no objcore */
- CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
- AN(sp->objcore->flags & OC_F_BUSY);
+ 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);
}
hp = w->bereq;
diff --git a/bin/varnishd/cache/cache_gzip.c b/bin/varnishd/cache/cache_gzip.c
index 32a7413..57b25a5 100644
--- a/bin/varnishd/cache/cache_gzip.c
+++ b/bin/varnishd/cache/cache_gzip.c
@@ -248,7 +248,7 @@ VGZ_ObufFull(const struct vgz *vg)
/*--------------------------------------------------------------------
* Keep the outbuffer supplied with storage and file it under the
- * sp->obj as it fills.
+ * sp->wrk->obj as it fills.
*/
int
diff --git a/bin/varnishd/cache/cache_hash.c b/bin/varnishd/cache/cache_hash.c
index db865de..2820c45 100644
--- a/bin/varnishd/cache/cache_hash.c
+++ b/bin/varnishd/cache/cache_hash.c
@@ -395,8 +395,8 @@ HSH_Lookup(struct sess *sp, struct objhead **poh)
* XXX: serialize fetch of all Vary's if grace is possible.
*/
- AZ(sp->objcore);
- sp->objcore = grace_oc; /* XXX: Hack-ish */
+ AZ(sp->wrk->objcore);
+ sp->wrk->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 */
@@ -406,7 +406,7 @@ HSH_Lookup(struct sess *sp, struct objhead **poh)
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
oc = grace_oc;
}
- sp->objcore = NULL;
+ sp->wrk->objcore = NULL;
if (oc != NULL && !sp->hash_always_miss) {
o = oc_getobj(sp->wrk, oc);
@@ -585,13 +585,13 @@ HSH_Drop(struct sess *sp)
struct object *o;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
- o = sp->obj;
+ o = sp->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->obj);
+ (void)HSH_Deref(sp->wrk, NULL, &sp->wrk->obj);
}
void
@@ -602,7 +602,7 @@ HSH_Unbusy(const struct sess *sp)
struct objcore *oc;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
- o = sp->obj;
+ o = sp->wrk->obj;
CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
oc = o->objcore;
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
diff --git a/bin/varnishd/cache/cache_panic.c b/bin/varnishd/cache/cache_panic.c
index 9d69c1b..f6f1ff5 100644
--- a/bin/varnishd/cache/cache_panic.c
+++ b/bin/varnishd/cache/cache_panic.c
@@ -266,8 +266,8 @@ pan_sess(const struct sess *sp)
if (VALID_OBJ(sp->wrk->vbc, BACKEND_MAGIC))
pan_vbc(sp->wrk->vbc);
- if (VALID_OBJ(sp->obj, OBJECT_MAGIC))
- pan_object(sp->obj);
+ if (VALID_OBJ(sp->wrk->obj, OBJECT_MAGIC))
+ pan_object(sp->wrk->obj);
VSB_printf(pan_vsp, "},\n");
}
diff --git a/bin/varnishd/cache/cache_pool.c b/bin/varnishd/cache/cache_pool.c
index 79a5fcd..730e391 100644
--- a/bin/varnishd/cache/cache_pool.c
+++ b/bin/varnishd/cache/cache_pool.c
@@ -361,7 +361,6 @@ Pool_Wait(struct sess *sp)
{
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
- AZ(sp->obj);
AZ(sp->vcl);
assert(sp->fd >= 0);
/*
diff --git a/bin/varnishd/cache/cache_response.c b/bin/varnishd/cache/cache_response.c
index 487a514..bdc0fca 100644
--- a/bin/varnishd/cache/cache_response.c
+++ b/bin/varnishd/cache/cache_response.c
@@ -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->obj->response == 200);
+ assert(sp->wrk->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->obj->len)
+ if (low >= sp->wrk->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->obj->len - high;
- high = sp->obj->len - 1;
+ low = sp->wrk->obj->len - high;
+ high = sp->wrk->obj->len - 1;
}
} else
- high = sp->obj->len - 1;
+ high = sp->wrk->obj->len - 1;
if (*r != '\0')
return;
- if (high >= sp->obj->len)
- high = sp->obj->len - 1;
+ if (high >= sp->wrk->obj->len)
+ high = sp->wrk->obj->len - 1;
if (low > high)
return;
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->wrk->resp,
"Content-Range: bytes %jd-%jd/%jd",
- (intmax_t)low, (intmax_t)high, (intmax_t)sp->obj->len);
+ (intmax_t)low, (intmax_t)high, (intmax_t)sp->wrk->obj->len);
http_Unset(sp->wrk->resp, H_Content_Length);
assert(sp->wrk->res_mode & RES_LEN);
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->wrk->resp,
@@ -112,8 +112,8 @@ RES_BuildHttp(const struct sess *sp)
http_ClrHeader(sp->wrk->resp);
sp->wrk->resp->logtag = HTTP_Tx;
- http_CopyResp(sp->wrk->resp, sp->obj->http);
- http_FilterFields(sp->wrk, sp->vsl_id, sp->wrk->resp, sp->obj->http,
+ http_CopyResp(sp->wrk->resp, sp->wrk->obj->http);
+ http_FilterFields(sp->wrk, sp->vsl_id, sp->wrk->resp, sp->wrk->obj->http,
HTTPH_A_DELIVER);
if (!(sp->wrk->res_mode & RES_LEN)) {
@@ -131,14 +131,14 @@ RES_BuildHttp(const struct sess *sp)
VTIM_format(VTIM_real(), time_str);
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->wrk->resp, "Date: %s", time_str);
- if (sp->xid != sp->obj->xid)
+ if (sp->xid != sp->wrk->obj->xid)
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->wrk->resp,
- "X-Varnish: %u %u", sp->xid, sp->obj->xid);
+ "X-Varnish: %u %u", sp->xid, sp->wrk->obj->xid);
else
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->wrk->resp,
"X-Varnish: %u", sp->xid);
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->wrk->resp, "Age: %.0f",
- sp->obj->exp.age + sp->t_resp - sp->obj->exp.entered);
+ sp->wrk->obj->exp.age + sp->t_resp - sp->wrk->obj->exp.entered);
http_SetHeader(sp->wrk, sp->vsl_id, sp->wrk->resp, "Via: 1.1 varnish");
http_PrintfHeader(sp->wrk, sp->vsl_id, sp->wrk->resp, "Connection: %s",
sp->doclose ? "close" : "keep-alive");
@@ -165,7 +165,7 @@ res_WriteGunzipObj(const struct sess *sp)
vg = VGZ_NewUngzip(sp->wrk, "U D -");
VGZ_Obuf(vg, obuf, sizeof obuf);
- VTAILQ_FOREACH(st, &sp->obj->store, list) {
+ VTAILQ_FOREACH(st, &sp->wrk->obj->store, list) {
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(st, STORAGE_MAGIC);
u += st->len;
@@ -183,7 +183,7 @@ res_WriteGunzipObj(const struct sess *sp)
(void)WRW_Flush(sp->wrk);
}
(void)VGZ_Destroy(&vg, sp->vsl_id);
- assert(u == sp->obj->len);
+ assert(u == sp->wrk->obj->len);
}
/*--------------------------------------------------------------------*/
@@ -198,7 +198,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->obj->store, list) {
+ VTAILQ_FOREACH(st, &sp->wrk->obj->store, list) {
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(st, STORAGE_MAGIC);
u += st->len;
@@ -239,7 +239,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->obj->len);
+ assert(u == sp->wrk->obj->len);
}
/*--------------------------------------------------------------------
@@ -257,7 +257,7 @@ RES_WriteObj(struct sess *sp)
WRW_Reserve(sp->wrk, &sp->fd);
- if (sp->obj->response == 200 &&
+ if (sp->wrk->obj->response == 200 &&
sp->http->conds &&
RFC2616_Do_Cond(sp)) {
sp->wantbody = 0;
@@ -270,13 +270,13 @@ RES_WriteObj(struct sess *sp)
* If nothing special planned, we can attempt Range support
*/
low = 0;
- high = sp->obj->len - 1;
+ high = sp->wrk->obj->len - 1;
if (
sp->wantbody &&
(sp->wrk->res_mode & RES_LEN) &&
!(sp->wrk->res_mode & (RES_ESI|RES_ESI_CHILD|RES_GUNZIP)) &&
cache_param->http_range_support &&
- sp->obj->response == 200 &&
+ sp->wrk->obj->response == 200 &&
http_GetHdr(sp->http, H_Range, &r))
res_dorange(sp, r, &low, &high);
@@ -301,14 +301,14 @@ RES_WriteObj(struct sess *sp)
if (!sp->wantbody) {
/* This was a HEAD or conditional request */
- } else if (sp->obj->len == 0) {
+ } else if (sp->wrk->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->obj->gziped) {
+ !sp->wrk->gzip_resp && sp->wrk->obj->gziped) {
res_WriteGunzipObj(sp);
} else if (sp->wrk->res_mode & RES_GUNZIP) {
res_WriteGunzipObj(sp);
diff --git a/bin/varnishd/cache/cache_rfc2616.c b/bin/varnishd/cache/cache_rfc2616.c
index 4041f45..e22da50 100644
--- a/bin/varnishd/cache/cache_rfc2616.c
+++ b/bin/varnishd/cache/cache_rfc2616.c
@@ -315,18 +315,18 @@ RFC2616_Do_Cond(const struct sess *sp)
and If-Modified-Since if present*/
if (http_GetHdr(sp->http, H_If_Modified_Since, &p) ) {
- if (!sp->obj->last_modified)
+ if (!sp->wrk->obj->last_modified)
return (0);
ims = VTIM_parse(p);
if (ims > sp->t_req) /* [RFC2616 14.25] */
return (0);
- if (sp->obj->last_modified > ims)
+ if (sp->wrk->obj->last_modified > ims)
return (0);
do_cond = 1;
}
if (http_GetHdr(sp->http, H_If_None_Match, &p) &&
- http_GetHdr(sp->obj->http, H_ETag, &e)) {
+ http_GetHdr(sp->wrk->obj->http, H_ETag, &e)) {
if (strcmp(p,e) != 0)
return (0);
do_cond = 1;
diff --git a/bin/varnishd/cache/cache_session.c b/bin/varnishd/cache/cache_session.c
index eee8e9a..21d7f51 100644
--- a/bin/varnishd/cache/cache_session.c
+++ b/bin/varnishd/cache/cache_session.c
@@ -339,7 +339,6 @@ SES_Delete(struct sess *sp, const char *reason)
SES_Close(sp, reason);
assert(sp->fd < 0);
- AZ(sp->obj);
AZ(sp->vcl);
if (sp->addr == NULL)
sp->addr = noaddr;
diff --git a/bin/varnishd/cache/cache_vrt.c b/bin/varnishd/cache/cache_vrt.c
index 5e19ccc..a0eb4c8 100644
--- a/bin/varnishd/cache/cache_vrt.c
+++ b/bin/varnishd/cache/cache_vrt.c
@@ -108,8 +108,8 @@ vrt_selecthttp(const struct sess *sp, enum gethdr_e where)
hp = sp->wrk->resp;
break;
case HDR_OBJ:
- CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);
- hp = sp->obj->http;
+ CHECK_OBJ_NOTNULL(sp->wrk->obj, OBJECT_MAGIC);
+ hp = sp->wrk->obj->http;
break;
default:
INCOMPL();
@@ -399,8 +399,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->obj, OBJECT_MAGIC);
- vsb = SMS_Makesynth(sp->obj);
+ CHECK_OBJ_NOTNULL(sp->wrk->obj, OBJECT_MAGIC);
+ vsb = SMS_Makesynth(sp->wrk->obj);
AN(vsb);
VSB_cat(vsb, str);
@@ -413,10 +413,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->obj);
- http_Unset(sp->obj->http, H_Content_Length);
- http_PrintfHeader(sp->wrk, sp->vsl_id, sp->obj->http,
- "Content-Length: %d", sp->obj->len);
+ 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: %d", sp->wrk->obj->len);
}
/*--------------------------------------------------------------------*/
@@ -510,9 +510,9 @@ void
VRT_purge(const struct sess *sp, double ttl, double grace)
{
if (sp->cur_method == VCL_MET_HIT)
- HSH_Purge(sp, sp->obj->objcore->objhead, ttl, grace);
+ HSH_Purge(sp, sp->wrk->obj->objcore->objhead, ttl, grace);
else if (sp->cur_method == VCL_MET_MISS)
- HSH_Purge(sp, sp->objcore->objhead, ttl, grace);
+ HSH_Purge(sp, sp->wrk->objcore->objhead, ttl, grace);
}
/*--------------------------------------------------------------------
diff --git a/bin/varnishd/cache/cache_vrt_var.c b/bin/varnishd/cache/cache_vrt_var.c
index 860c7aa..5951b9c 100644
--- a/bin/varnishd/cache/cache_vrt_var.c
+++ b/bin/varnishd/cache/cache_vrt_var.c
@@ -88,8 +88,8 @@ VRT_DO_HDR(req, proto, sp->http, HTTP_HDR_PROTO)
VRT_DO_HDR(bereq, request, sp->wrk->bereq, HTTP_HDR_REQ)
VRT_DO_HDR(bereq, url, sp->wrk->bereq, HTTP_HDR_URL)
VRT_DO_HDR(bereq, proto, sp->wrk->bereq, HTTP_HDR_PROTO)
-VRT_DO_HDR(obj, proto, sp->obj->http, HTTP_HDR_PROTO)
-VRT_DO_HDR(obj, response, sp->obj->http, HTTP_HDR_RESPONSE)
+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(resp, proto, sp->wrk->resp, HTTP_HDR_PROTO)
VRT_DO_HDR(resp, response, sp->wrk->resp, HTTP_HDR_RESPONSE)
VRT_DO_HDR(beresp, proto, sp->wrk->beresp, HTTP_HDR_PROTO)
@@ -114,7 +114,7 @@ VRT_r_##obj##_status(const struct sess *sp) \
return(http->status); \
}
-VRT_DO_STATUS(obj, sp->obj->http)
+VRT_DO_STATUS(obj, sp->wrk->obj->http)
VRT_DO_STATUS(beresp, sp->wrk->beresp)
VRT_DO_STATUS(resp, sp->wrk->resp)
@@ -141,9 +141,9 @@ VRT_l_beresp_saintmode(const struct sess *sp, double a)
if (!wrk->vbc->backend)
return;
CHECK_OBJ_NOTNULL(wrk->vbc->backend, BACKEND_MAGIC);
- if (!sp->objcore)
+ if (!sp->wrk->objcore)
return;
- CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
+ CHECK_OBJ_NOTNULL(sp->wrk->objcore, OBJCORE_MAGIC);
/* Setting a negative holdoff period is a mistake. Detecting this
* when compiling the VCL would be better.
@@ -152,7 +152,7 @@ VRT_l_beresp_saintmode(const struct sess *sp, double a)
ALLOC_OBJ(new, TROUBLE_MAGIC);
AN(new);
- new->target = (uintptr_t)(sp->objcore->objhead);
+ new->target = (uintptr_t)(sp->wrk->objcore->objhead);
new->timeout = sp->t_req + a;
/* Insert the new item on the list before the first item with a
@@ -401,15 +401,15 @@ VRT_DO_EXP(req, sp->exp, ttl, 0, )
VRT_DO_EXP(req, sp->exp, grace, 0, )
VRT_DO_EXP(req, sp->exp, keep, 0, )
-VRT_DO_EXP(obj, sp->obj->exp, grace, 0,
- EXP_Rearm(sp->obj);
- vrt_wsp_exp(sp, sp->obj->xid, &sp->obj->exp);)
-VRT_DO_EXP(obj, sp->obj->exp, ttl, (sp->t_req - sp->obj->exp.entered),
- EXP_Rearm(sp->obj);
- vrt_wsp_exp(sp, sp->obj->xid, &sp->obj->exp);)
-VRT_DO_EXP(obj, sp->obj->exp, keep, 0,
- EXP_Rearm(sp->obj);
- vrt_wsp_exp(sp, sp->obj->xid, &sp->obj->exp);)
+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(beresp, sp->wrk->exp, grace, 0,
vrt_wsp_exp(sp, sp->xid, &sp->wrk->exp);)
@@ -527,8 +527,8 @@ VRT_r_obj_hits(const struct sess *sp)
{
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
- CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC); /* XXX */
- return (sp->obj->hits);
+ CHECK_OBJ_NOTNULL(sp->wrk->obj, OBJECT_MAGIC); /* XXX */
+ return (sp->wrk->obj->hits);
}
double
@@ -536,8 +536,8 @@ VRT_r_obj_lastuse(const struct sess *sp)
{
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
- CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC); /* XXX */
- return (VTIM_real() - sp->obj->last_use);
+ CHECK_OBJ_NOTNULL(sp->wrk->obj, OBJECT_MAGIC); /* XXX */
+ return (VTIM_real() - sp->wrk->obj->last_use);
}
unsigned
diff --git a/bin/varnishd/storage/stevedore.c b/bin/varnishd/storage/stevedore.c
index 860604e..42479c3 100644
--- a/bin/varnishd/storage/stevedore.c
+++ b/bin/varnishd/storage/stevedore.c
@@ -246,11 +246,11 @@ STV_MkObject(struct sess *sp, void *ptr, unsigned ltot,
VTAILQ_INIT(&o->store);
sp->wrk->stats.n_object++;
- if (sp->objcore != NULL) {
- CHECK_OBJ_NOTNULL(sp->objcore, OBJCORE_MAGIC);
+ if (sp->wrk->objcore != NULL) {
+ CHECK_OBJ_NOTNULL(sp->wrk->objcore, OBJCORE_MAGIC);
- o->objcore = sp->objcore;
- sp->objcore = NULL; /* refcnt follows pointer. */
+ o->objcore = sp->wrk->objcore;
+ sp->wrk->objcore = NULL; /* refcnt follows pointer. */
BAN_NewObjCore(o->objcore);
o->objcore->methods = &default_oc_methods;
diff --git a/bin/varnishd/storage/storage_persistent.c b/bin/varnishd/storage/storage_persistent.c
index ded638b..838dc8c 100644
--- a/bin/varnishd/storage/storage_persistent.c
+++ b/bin/varnishd/storage/storage_persistent.c
@@ -474,10 +474,10 @@ smp_allocobj(struct stevedore *stv, struct sess *sp, unsigned ltot,
struct objcore *oc;
unsigned objidx;
- if (sp->objcore == NULL)
+ if (sp->wrk->objcore == NULL)
return (NULL); /* from cnt_error */
CAST_OBJ_NOTNULL(sc, stv->priv, SMP_SC_MAGIC);
- AN(sp->objcore);
+ AN(sp->wrk->objcore);
AN(sp->wrk->exp.ttl > 0.);
ltot = IRNUP(sc, ltot);
diff --git a/bin/varnishd/waiter/cache_waiter_kqueue.c b/bin/varnishd/waiter/cache_waiter_kqueue.c
index b331a31..23df3de 100644
--- a/bin/varnishd/waiter/cache_waiter_kqueue.c
+++ b/bin/varnishd/waiter/cache_waiter_kqueue.c
@@ -102,7 +102,6 @@ vwk_kev(struct vwk *vwk, const struct kevent *kp)
while (i >= sizeof ss[0]) {
CHECK_OBJ_NOTNULL(ss[j], SESS_MAGIC);
assert(ss[j]->fd >= 0);
- AZ(ss[j]->obj);
VTAILQ_INSERT_TAIL(&vwk->sesshead, ss[j], list);
vwk_kq_sess(vwk, ss[j], EV_ADD | EV_ONESHOT);
j++;
diff --git a/bin/varnishd/waiter/cache_waiter_ports.c b/bin/varnishd/waiter/cache_waiter_ports.c
index a1699d0..17d7ce0 100644
--- a/bin/varnishd/waiter/cache_waiter_ports.c
+++ b/bin/varnishd/waiter/cache_waiter_ports.c
@@ -77,7 +77,6 @@ vws_port_ev(struct vws *vws, port_event_t *ev) {
if(ev->portev_source == PORT_SOURCE_USER) {
CAST_OBJ_NOTNULL(sp, ev->portev_user, SESS_MAGIC);
assert(sp->fd >= 0);
- AZ(sp->obj);
VTAILQ_INSERT_TAIL(&vws->sesshead, sp, list);
vws_add(vws, sp->fd, sp);
} else {
More information about the varnish-commit
mailing list