[master] c7bc8b659 Make vdp_range cache req from ->init and NULL vdp_ctx->req during data-phase
Poul-Henning Kamp
phk at FreeBSD.org
Wed Oct 28 22:30:13 UTC 2020
commit c7bc8b659c335df65afeaf323a19fdf39f2338d6
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Wed Oct 28 22:29:07 2020 +0000
Make vdp_range cache req from ->init and NULL vdp_ctx->req during data-phase
diff --git a/bin/varnishd/cache/cache_deliver_proc.c b/bin/varnishd/cache/cache_deliver_proc.c
index 1b871bd49..6370ffe28 100644
--- a/bin/varnishd/cache/cache_deliver_proc.c
+++ b/bin/varnishd/cache/cache_deliver_proc.c
@@ -224,6 +224,7 @@ int VDP_DeliverObj(struct vdp_ctx *vdc, struct objcore *oc)
CHECK_OBJ_NOTNULL(oc, OBJCORE_MAGIC);
CHECK_OBJ_NOTNULL(vdc->wrk, WORKER_MAGIC);
AN(vdc->vsl);
+ vdc->req = NULL;
final = oc->flags & (OC_F_PRIVATE | OC_F_HFM | OC_F_HFP) ? 1 : 0;
r = ObjIterate(vdc->wrk, oc, vdc, vdp_objiterator, final);
if (r == 0)
diff --git a/bin/varnishd/cache/cache_range.c b/bin/varnishd/cache/cache_range.c
index 016a95f90..b705cd526 100644
--- a/bin/varnishd/cache/cache_range.c
+++ b/bin/varnishd/cache/cache_range.c
@@ -42,6 +42,7 @@
struct vrg_priv {
unsigned magic;
#define VRG_PRIV_MAGIC 0xb886e711
+ struct req *req;
ssize_t range_low;
ssize_t range_high;
ssize_t range_off;
@@ -53,10 +54,9 @@ vrg_range_fini(struct vdp_ctx *vdc, void **priv)
struct vrg_priv *vrg_priv;
CHECK_OBJ_NOTNULL(vdc, VDP_CTX_MAGIC);
- CHECK_OBJ_NOTNULL(vdc->req, REQ_MAGIC);
CAST_OBJ_NOTNULL(vrg_priv, *priv, VRG_PRIV_MAGIC);
if (vrg_priv->range_off < vrg_priv->range_high)
- Req_Fail(vdc->req, SC_RANGE_SHORT);
+ Req_Fail(vrg_priv->req, SC_RANGE_SHORT);
*priv = NULL; /* struct on ws, no need to free */
return (0);
}
@@ -177,6 +177,7 @@ vrg_dorange(struct req *req, const char *r, void **priv)
return ("WS too small");
INIT_OBJ(vrg_priv, VRG_PRIV_MAGIC);
+ vrg_priv->req = req;
vrg_priv->range_off = 0;
vrg_priv->range_low = low;
vrg_priv->range_high = high + 1;
@@ -247,27 +248,29 @@ vrg_range_init(struct vdp_ctx *vdc, void **priv)
{
const char *r;
const char *err;
+ struct req *req;
CHECK_OBJ_NOTNULL(vdc, VDP_CTX_MAGIC);
- CHECK_OBJ_NOTNULL(vdc->req, REQ_MAGIC);
- assert(http_GetHdr(vdc->req->http, H_Range, &r));
- if (!vrg_ifrange(vdc->req)) // rfc7233,l,455,456
+ req = vdc->req;
+ CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+ assert(http_GetHdr(req->http, H_Range, &r));
+ if (!vrg_ifrange(req)) // rfc7233,l,455,456
return (1);
- err = vrg_dorange(vdc->req, r, priv);
+ err = vrg_dorange(req, r, priv);
if (err == NULL)
return (*priv == NULL ? 1 : 0);
VSLb(vdc->vsl, SLT_Debug, "RANGE_FAIL %s", err);
- if (vdc->req->resp_len >= 0)
- http_PrintfHeader(vdc->req->resp,
+ if (req->resp_len >= 0)
+ http_PrintfHeader(req->resp,
"Content-Range: bytes */%jd",
- (intmax_t)vdc->req->resp_len);
- http_PutResponse(vdc->req->resp, "HTTP/1.1", 416, NULL);
+ (intmax_t)req->resp_len);
+ http_PutResponse(req->resp, "HTTP/1.1", 416, NULL);
/*
* XXX: We ought to produce a body explaining things.
* XXX: That really calls for us to hit vcl_synth{}
*/
- vdc->req->resp_len = 0;
+ req->resp_len = 0;
return (1);
}
More information about the varnish-commit
mailing list