[master] 69d4541 Use the req->ws for the V1L in the toplevel requests, so that esi-included requests don't need to know about it.
Poul-Henning Kamp
phk at FreeBSD.org
Mon Oct 27 12:05:55 CET 2014
commit 69d45413bb1fca69cb487b0098f1a7323114fdf7
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Mon Oct 27 11:05:18 2014 +0000
Use the req->ws for the V1L in the toplevel requests, so that
esi-included requests don't need to know about it.
diff --git a/bin/varnishd/cache/cache_esi_deliver.c b/bin/varnishd/cache/cache_esi_deliver.c
index deca61e..504902c 100644
--- a/bin/varnishd/cache/cache_esi_deliver.c
+++ b/bin/varnishd/cache/cache_esi_deliver.c
@@ -69,7 +69,6 @@ ved_include(struct req *preq, const char *src, const char *host)
{
struct worker *wrk;
struct req *req;
- char *wrk_ws_wm;
enum req_fsm_nxt s;
wrk = preq->wrk;
@@ -77,11 +76,6 @@ ved_include(struct req *preq, const char *src, const char *host)
if (preq->esi_level >= cache_param->max_esi_depth)
return;
- (void)V1L_FlushRelease(preq->wrk);
-
- /* Take a workspace snapshot */
- wrk_ws_wm = WS_Snapshot(wrk->aws); /* XXX ? */
-
req = SES_GetReq(wrk, preq->sp);
req->req_body_status = REQ_BODY_NONE;
AZ(req->vsl->wid);
@@ -155,19 +149,10 @@ ved_include(struct req *preq, const char *src, const char *host)
AZ(req->wrk);
(void)usleep(10000);
}
- AN(V1L_IsReleased(wrk));
CNT_AcctLogCharge(wrk->stats, req);
VSL_End(req->vsl);
- /* Reset the workspace */
- WS_Reset(wrk->aws, wrk_ws_wm); /* XXX ? */
-
- V1L_Reserve(preq->wrk, preq->wrk->aws, &preq->sp->fd, preq->vsl,
- preq->t_prev);
- if (preq->res_mode & RES_CHUNKED)
- V1L_Chunked(preq->wrk);
-
preq->vcl = req->vcl;
req->vcl = NULL;
diff --git a/bin/varnishd/http1/cache_http1_deliver.c b/bin/varnishd/http1/cache_http1_deliver.c
index 65a2bf6..eb15df4 100644
--- a/bin/varnishd/http1/cache_http1_deliver.c
+++ b/bin/varnishd/http1/cache_http1_deliver.c
@@ -298,6 +298,31 @@ V1D_Deliver(struct req *req, struct busyobj *bo)
}
VSLb(req->vsl, SLT_Debug, "RES_MODE %x", req->res_mode);
+ if (req->esi_level > 0) {
+ if (req->gzip_resp &&
+ ObjCheckFlag(req->wrk, req->objcore, OF_GZIPED) &&
+ !(req->res_mode & RES_ESI)) {
+ if (bo != NULL)
+ VBO_waitstate(bo, BOS_FINISHED);
+ ESI_DeliverChild(req);
+ } else {
+ if (req->gzip_resp &&
+ !ObjCheckFlag(req->wrk, req->objcore, OF_GZIPED))
+ VDP_push(req, VED_pretend_gzip, NULL);
+ else if (!req->gzip_resp &&
+ ObjCheckFlag(req->wrk, req->objcore, OF_GZIPED))
+ VDP_push(req, VDP_gunzip, NULL);
+
+ if (req->res_mode & RES_ESI)
+ ESI_Deliver(req);
+ else
+ (void)v1d_WriteDirObj(req);
+ }
+ (void)VDP_bytes(req, VDP_FLUSH, NULL, 0);
+ VDP_close(req);
+ return;
+ }
+
if (!(req->res_mode & RES_LEN))
http_Unset(req->resp, H_Content_Length);
@@ -310,15 +335,12 @@ V1D_Deliver(struct req *req, struct busyobj *bo)
http_SetHeader(req->resp,
req->doclose ? "Connection: close" : "Connection: keep-alive");
- if (req->esi_level == 0) {
- req->vdp_nxt = 0;
- VTAILQ_INIT(&req->vdp);
- VDP_push(req, v1d_bytes, NULL);
- }
+ req->vdp_nxt = 0;
+ VTAILQ_INIT(&req->vdp);
+ VDP_push(req, v1d_bytes, NULL);
if (
req->wantbody &&
- req->esi_level == 0 &&
cache_param->http_range_support &&
http_IsStatus(req->resp, 200)) {
http_SetHeader(req->resp, "Accept-Ranges: bytes");
@@ -326,45 +348,18 @@ V1D_Deliver(struct req *req, struct busyobj *bo)
v1d_dorange(req, bo, r);
}
- V1L_Reserve(req->wrk, req->wrk->aws, &req->sp->fd, req->vsl,
- req->t_prev);
+ if (req->res_mode & RES_GUNZIP)
+ VDP_push(req, VDP_gunzip, NULL);
+
+ V1L_Reserve(req->wrk, req->ws, &req->sp->fd, req->vsl, req->t_prev);
- /*
- * Send HTTP protocol header, unless interior ESI object
- */
- if (!(req->res_mode & RES_ESI_CHILD))
- req->acct.resp_hdrbytes +=
- HTTP1_Write(req->wrk, req->resp, HTTP1_Resp);
+ req->acct.resp_hdrbytes += HTTP1_Write(req->wrk, req->resp, HTTP1_Resp);
if (req->res_mode & RES_CHUNKED)
V1L_Chunked(req->wrk);
ois = OIS_DONE;
- if (!req->wantbody) {
- /* This was a HEAD or conditional request */
- } else if (req->esi_level > 0) {
- if (req->gzip_resp &&
- ObjCheckFlag(req->wrk, req->objcore, OF_GZIPED) &&
- !(req->res_mode & RES_ESI)) {
- if (bo != NULL)
- VBO_waitstate(bo, BOS_FINISHED);
- ESI_DeliverChild(req);
- } else {
- if (req->gzip_resp &&
- !ObjCheckFlag(req->wrk, req->objcore, OF_GZIPED))
- VDP_push(req, VED_pretend_gzip, NULL);
- else if (!req->gzip_resp &&
- ObjCheckFlag(req->wrk, req->objcore, OF_GZIPED))
- VDP_push(req, VDP_gunzip, NULL);
-
- if (req->res_mode & RES_ESI)
- ESI_Deliver(req);
- else
- ois = v1d_WriteDirObj(req);
- }
- } else {
- if (req->res_mode & RES_GUNZIP)
- VDP_push(req, VDP_gunzip, NULL);
+ if (req->wantbody) {
if (req->res_mode & RES_ESI)
ESI_Deliver(req);
else
@@ -372,13 +367,10 @@ V1D_Deliver(struct req *req, struct busyobj *bo)
}
(void)VDP_bytes(req, VDP_FLUSH, NULL, 0);
- if (ois == OIS_DONE &&
- (req->res_mode & RES_CHUNKED) &&
- !(req->res_mode & RES_ESI_CHILD))
+ if (ois == OIS_DONE && (req->res_mode & RES_CHUNKED))
V1L_EndChunk(req->wrk);
- if ((V1L_FlushRelease(req->wrk) || ois != OIS_DONE) &&
- req->sp->fd >= 0)
+ if ((V1L_FlushRelease(req->wrk) || ois != OIS_DONE) && req->sp->fd >= 0)
SES_Close(req->sp, SC_REM_CLOSE);
VDP_close(req);
}
More information about the varnish-commit
mailing list