[master] 3999568 Shave some session from FetchBody
Poul-Henning Kamp
phk at varnish-cache.org
Mon Oct 24 14:19:44 CEST 2011
commit 3999568c2dc6be3f801484cea7cfa614535a9508
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Mon Oct 24 12:19:26 2011 +0000
Shave some session from FetchBody
diff --git a/bin/varnishd/cache.h b/bin/varnishd/cache.h
index 59d5fa8..71cc776 100644
--- a/bin/varnishd/cache.h
+++ b/bin/varnishd/cache.h
@@ -702,7 +702,7 @@ int EXP_NukeOne(struct worker *w, struct lru *lru);
/* cache_fetch.c */
struct storage *FetchStorage(const struct sess *sp, ssize_t sz);
int FetchHdr(struct sess *sp);
-int FetchBody(struct sess *sp);
+int FetchBody(struct sess *sp, struct object *obj);
int FetchReqBody(struct sess *sp);
void Fetch_Init(void);
diff --git a/bin/varnishd/cache_center.c b/bin/varnishd/cache_center.c
index 243123d..13d8083 100644
--- a/bin/varnishd/cache_center.c
+++ b/bin/varnishd/cache_center.c
@@ -846,7 +846,7 @@ cnt_fetchbody(struct sess *sp)
}
/* Use unmodified headers*/
- i = FetchBody(sp);
+ i = FetchBody(sp, sp->obj);
sp->wrk->h_content_length = NULL;
@@ -910,7 +910,7 @@ cnt_streambody(struct sess *sp)
AssertObjCorePassOrBusy(sp->obj->objcore);
- i = FetchBody(sp);
+ i = FetchBody(sp, sp->obj);
sp->wrk->h_content_length = NULL;
diff --git a/bin/varnishd/cache_fetch.c b/bin/varnishd/cache_fetch.c
index ba91720..eae583d 100644
--- a/bin/varnishd/cache_fetch.c
+++ b/bin/varnishd/cache_fetch.c
@@ -477,7 +477,7 @@ FetchHdr(struct sess *sp)
/*--------------------------------------------------------------------*/
int
-FetchBody(struct sess *sp)
+FetchBody(struct sess *sp, struct object *obj)
{
int cls;
struct storage *st;
@@ -487,17 +487,17 @@ FetchBody(struct sess *sp)
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
CHECK_OBJ_NOTNULL(sp->wrk, WORKER_MAGIC);
w = sp->wrk;
- CHECK_OBJ_NOTNULL(sp->obj, OBJECT_MAGIC);
- CHECK_OBJ_NOTNULL(sp->obj->http, HTTP_MAGIC);
+ CHECK_OBJ_NOTNULL(obj, OBJECT_MAGIC);
+ CHECK_OBJ_NOTNULL(obj->http, HTTP_MAGIC);
if (w->vfp == NULL)
w->vfp = &vfp_nop;
AN(sp->director);
- AssertObjCorePassOrBusy(sp->obj->objcore);
+ AssertObjCorePassOrBusy(obj->objcore);
AZ(w->vgz_rx);
- AZ(VTAILQ_FIRST(&sp->obj->store));
+ AZ(VTAILQ_FIRST(&obj->store));
switch (w->body_status) {
case BS_NONE:
cls = 0;
@@ -541,57 +541,57 @@ FetchBody(struct sess *sp)
*/
AZ(vfp_nop_end(sp));
- WSL(w, SLT_Fetch_Body, sp->wrk->vbc->vsl_id, "%u(%s) cls %d mklen %u",
+ WSL(w, SLT_Fetch_Body, w->vbc->vsl_id, "%u(%s) cls %d mklen %u",
w->body_status, body_status(w->body_status),
cls, mklen);
if (w->body_status == BS_ERROR) {
- VDI_CloseFd(sp->wrk);
+ VDI_CloseFd(w);
return (__LINE__);
}
if (cls < 0) {
w->stats.fetch_failed++;
/* XXX: Wouldn't this store automatically be released ? */
- while (!VTAILQ_EMPTY(&sp->obj->store)) {
- st = VTAILQ_FIRST(&sp->obj->store);
- VTAILQ_REMOVE(&sp->obj->store, st, list);
+ while (!VTAILQ_EMPTY(&obj->store)) {
+ st = VTAILQ_FIRST(&obj->store);
+ VTAILQ_REMOVE(&obj->store, st, list);
STV_free(st);
}
- VDI_CloseFd(sp->wrk);
- sp->obj->len = 0;
+ VDI_CloseFd(w);
+ obj->len = 0;
return (__LINE__);
}
if (cls == 0 && w->do_close)
cls = 1;
- WSL(w, SLT_Length, sp->wrk->vbc->vsl_id, "%u", sp->obj->len);
+ WSL(w, SLT_Length, w->vbc->vsl_id, "%u", obj->len);
{
/* Sanity check fetch methods accounting */
ssize_t uu;
uu = 0;
- VTAILQ_FOREACH(st, &sp->obj->store, list)
+ VTAILQ_FOREACH(st, &obj->store, list)
uu += st->len;
if (sp->objcore == NULL || (sp->objcore->flags & OC_F_PASS))
/* Streaming might have started freeing stuff */
- assert (uu <= sp->obj->len);
+ assert (uu <= obj->len);
else
- assert(uu == sp->obj->len);
+ assert(uu == obj->len);
}
if (mklen > 0) {
- http_Unset(sp->obj->http, H_Content_Length);
- http_PrintfHeader(w, sp->vsl_id, sp->obj->http,
- "Content-Length: %jd", (intmax_t)sp->obj->len);
+ http_Unset(obj->http, H_Content_Length);
+ http_PrintfHeader(w, sp->vsl_id, obj->http,
+ "Content-Length: %jd", (intmax_t)obj->len);
}
if (cls)
- VDI_CloseFd(sp->wrk);
+ VDI_CloseFd(w);
else
- VDI_RecycleFd(sp->wrk);
+ VDI_RecycleFd(w);
return (0);
}
More information about the varnish-commit
mailing list