[4.0] 990197a Reuse the same beresp->obj function for both cond and normal fetches.
Poul-Henning Kamp
phk at FreeBSD.org
Thu Mar 13 10:24:30 CET 2014
commit 990197ad3fbd8b4bb30d9f9133c57ef35c9de27e
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Wed Mar 5 14:54:55 2014 +0000
Reuse the same beresp->obj function for both cond and normal fetches.
diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index 20b60fe..27a2df8 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -140,9 +140,6 @@ vbf_beresp2obj(struct busyobj *bo)
AZ(bo->fetch_obj);
bo->fetch_obj = obj;
- if (bo->do_gzip || (bo->is_gzip && !bo->do_gunzip))
- obj->gziped = 1;
-
if (vary != NULL) {
obj->vary = (void *)WS_Copy(obj->http->ws,
VSB_data(vary), varyl);
@@ -464,6 +461,9 @@ vbf_stp_fetch(struct worker *wrk, struct busyobj *bo)
obj = bo->fetch_obj;
+ if (bo->do_gzip || (bo->is_gzip && !bo->do_gunzip))
+ obj->gziped = 1;
+
/*
* Ready to fetch the body
*/
@@ -548,40 +548,18 @@ vbf_stp_fetch(struct worker *wrk, struct busyobj *bo)
static enum fetch_step
vbf_stp_condfetch(struct worker *wrk, struct busyobj *bo)
{
- unsigned l;
- uint16_t nhttp;
struct object *obj;
struct objiter *oi;
void *sp;
- ssize_t sl, al, tl, vl;
+ ssize_t sl, al, tl;
struct storage *st;
enum objiter_status ois;
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
- l = 0;
- if (bo->ims_obj->vary != NULL) {
- vl = VRY_Validate(bo->ims_obj->vary);
- l += vl;
- } else
- vl = 0;
- l += http_EstimateWS(bo->beresp, 0, &nhttp);
-
- obj = vbf_allocobj(bo, l, nhttp);
- if (obj == NULL) {
- (void)VFP_Error(bo, "Could not get storage");
- VDI_CloseFd(&bo->vbc);
- return (F_STP_DONE);
- }
-
- AZ(bo->fetch_obj);
- bo->fetch_obj = obj;
-
- obj->gziped = bo->ims_obj->gziped;
- obj->gzip_start = bo->ims_obj->gzip_start;
- obj->gzip_last = bo->ims_obj->gzip_last;
- obj->gzip_stop = bo->ims_obj->gzip_stop;
+ AZ(vbf_beresp2obj(bo));
+ obj = bo->fetch_obj;
if (bo->ims_obj->esidata != NULL) {
obj->esidata = STV_alloc(bo, bo->ims_obj->esidata->len);
@@ -592,19 +570,10 @@ vbf_stp_condfetch(struct worker *wrk, struct busyobj *bo)
obj->esidata->len = bo->ims_obj->esidata->len;
}
- if (bo->ims_obj->vary != NULL) {
- obj->vary = (void *)WS_Copy(obj->http->ws,
- bo->ims_obj->vary, vl);
- assert(vl == VRY_Validate(obj->vary));
- }
-
- obj->vxid = bo->vsl->wid;
-
- obj->http->logtag = SLT_ObjMethod;
- /* XXX: we should have our own HTTP_A_CONDFETCH */
- http_FilterResp(bo->beresp, obj->http, HTTPH_A_INS);
- http_CopyHome(obj->http);
-
+ obj->gziped = bo->ims_obj->gziped;
+ obj->gzip_start = bo->ims_obj->gzip_start;
+ obj->gzip_last = bo->ims_obj->gzip_last;
+ obj->gzip_stop = bo->ims_obj->gzip_stop;
AZ(WS_Overflowed(bo->ws_o));
if (bo->do_stream)
More information about the varnish-commit
mailing list