[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