[experimental-ims] 67a4826 Move beresp and bereq to busyobj, but leave the memory allocation in worker for now.

Geoff Simmons geoff at varnish-cache.org
Mon Jan 9 21:52:49 CET 2012


commit 67a48263698c6cd5fb8c9e43768805345cc5bea6
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed Dec 7 10:30:44 2011 +0000

    Move beresp and bereq to busyobj, but leave the memory allocation in
    worker for now.

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 56f23fd..24c1dc9 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -328,8 +328,8 @@ struct worker {
 	const char		*storage_hint;
 
 	/* Fetch stuff.  Here because pipe has no busyobj */
-	struct http		*bereq;
-	struct http		*beresp;
+	struct http		*x_bereq;
+	struct http		*x_beresp;
 
 	/* Stream state */
 	struct stream_ctx	*sctx;
@@ -510,6 +510,8 @@ struct busyobj {
 	struct vgz		*vgz_rx;
 
 	struct vbc		*vbc;
+	struct http		*bereq;
+	struct http		*beresp;
 	struct object		*fetch_obj;
 	struct exp		exp;
 	struct http_conn	htc;
diff --git a/bin/varnishd/cache/cache_backend.c b/bin/varnishd/cache/cache_backend.c
index 21c1a4c..cf9d60f 100644
--- a/bin/varnishd/cache/cache_backend.c
+++ b/bin/varnishd/cache/cache_backend.c
@@ -96,6 +96,8 @@ VBE_GetBusyObj(struct worker *wrk)
 		busyobj = vbe_NewBusyObj();
 	AN(busyobj);
 	busyobj->refcount = 1;
+	busyobj->beresp = wrk->x_beresp;
+	busyobj->bereq = wrk->x_bereq;
 	return (busyobj);
 }
 
@@ -162,10 +164,10 @@ VDI_AddHostHeader(struct worker *wrk, const struct vbc *vbc)
 {
 
 	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
-	CHECK_OBJ_NOTNULL(wrk->bereq, HTTP_MAGIC);
+	CHECK_OBJ_NOTNULL(wrk->busyobj->bereq, HTTP_MAGIC);
 	CHECK_OBJ_NOTNULL(vbc, VBC_MAGIC);
 	CHECK_OBJ_NOTNULL(vbc->vdis, VDI_SIMPLE_MAGIC);
-	http_PrintfHeader(wrk, vbc->vsl_id, wrk->bereq,
+	http_PrintfHeader(wrk, vbc->vsl_id, wrk->busyobj->bereq,
 	    "Host: %s", vbc->vdis->vrt->hosthdr);
 }
 
diff --git a/bin/varnishd/cache/cache_center.c b/bin/varnishd/cache/cache_center.c
index 79e7956..442e2bb 100644
--- a/bin/varnishd/cache/cache_center.c
+++ b/bin/varnishd/cache/cache_center.c
@@ -262,8 +262,6 @@ cnt_prepresp(struct sess *sp)
 		AZ(wrk->obj);
 		sp->restarts++;
 		sp->director = NULL;
-		http_Setup(wrk->bereq, NULL);
-		http_Setup(wrk->beresp, NULL);
 		http_Setup(wrk->resp, NULL);
 		sp->step = STP_RECV;
 		return (0);
@@ -476,8 +474,8 @@ cnt_error(struct sess *sp)
 		if (wrk->obj == NULL) {
 			sp->doclose = "Out of objects";
 			sp->director = NULL;
-			http_Setup(wrk->beresp, NULL);
-			http_Setup(wrk->bereq, NULL);
+			http_Setup(wrk->busyobj->beresp, NULL);
+			http_Setup(wrk->busyobj->bereq, NULL);
 			sp->step = STP_DONE;
 			return(0);
 		}
@@ -526,7 +524,7 @@ cnt_error(struct sess *sp)
 	assert(sp->handling == VCL_RET_DELIVER);
 	sp->err_code = 0;
 	sp->err_reason = NULL;
-	http_Setup(wrk->bereq, NULL);
+	http_Setup(wrk->busyobj->bereq, NULL);
 	VBE_DerefBusyObj(wrk, &wrk->busyobj);
 	sp->step = STP_PREPRESP;
 	return (0);
@@ -579,9 +577,9 @@ cnt_fetch(struct sess *sp)
 	AZ(wrk->busyobj->should_close);
 	AZ(wrk->storage_hint);
 
-	http_Setup(wrk->beresp, wrk->ws);
+	http_Setup(wrk->busyobj->beresp, wrk->ws);
 
-	need_host_hdr = !http_GetHdr(wrk->bereq, H_Host, NULL);
+	need_host_hdr = !http_GetHdr(wrk->busyobj->bereq, H_Host, NULL);
 
 	i = FetchHdr(sp, need_host_hdr);
 	/*
@@ -603,8 +601,8 @@ cnt_fetch(struct sess *sp)
 		 * and we rely on their content outside of VCL, so collect them
 		 * into one line here.
 		 */
-		http_CollectHdr(wrk->beresp, H_Cache_Control);
-		http_CollectHdr(wrk->beresp, H_Vary);
+		http_CollectHdr(wrk->busyobj->beresp, H_Cache_Control);
+		http_CollectHdr(wrk->busyobj->beresp, H_Vary);
 
 		/*
 		 * Figure out how the fetch is supposed to happen, before the
@@ -613,7 +611,7 @@ cnt_fetch(struct sess *sp)
 		 */
 		wrk->busyobj->body_status = RFC2616_Body(sp);
 
-		sp->err_code = http_GetStatus(wrk->beresp);
+		sp->err_code = http_GetStatus(wrk->busyobj->beresp);
 
 		/*
 		 * What does RFC2616 think about TTL ?
@@ -657,8 +655,6 @@ cnt_fetch(struct sess *sp)
 		wrk->objcore = NULL;
 	}
 	VBE_DerefBusyObj(wrk, &wrk->busyobj);
-	http_Setup(wrk->bereq, NULL);
-	http_Setup(wrk->beresp, NULL);
 	sp->director = NULL;
 	wrk->storage_hint = NULL;
 
@@ -748,10 +744,10 @@ cnt_fetchbody(struct sess *sp)
 		wrk->busyobj->do_gzip = wrk->busyobj->do_gunzip = 0;
 
 	wrk->busyobj->is_gzip =
-	    http_HdrIs(wrk->beresp, H_Content_Encoding, "gzip");
+	    http_HdrIs(wrk->busyobj->beresp, H_Content_Encoding, "gzip");
 
 	wrk->busyobj->is_gunzip =
-	    !http_GetHdr(wrk->beresp, H_Content_Encoding, NULL);
+	    !http_GetHdr(wrk->busyobj->beresp, H_Content_Encoding, NULL);
 
 	/* It can't be both */
 	assert(wrk->busyobj->is_gzip == 0 || wrk->busyobj->is_gunzip == 0);
@@ -762,7 +758,7 @@ cnt_fetchbody(struct sess *sp)
 
 	/* If we do gunzip, remove the C-E header */
 	if (wrk->busyobj->do_gunzip)
-		http_Unset(wrk->beresp, H_Content_Encoding);
+		http_Unset(wrk->busyobj->beresp, H_Content_Encoding);
 
 	/* We wont gzip unless it is ungziped */
 	if (wrk->busyobj->do_gzip && !wrk->busyobj->is_gunzip)
@@ -770,7 +766,7 @@ cnt_fetchbody(struct sess *sp)
 
 	/* If we do gzip, add the C-E header */
 	if (wrk->busyobj->do_gzip)
-		http_SetHeader(wrk, sp->vsl_id, wrk->beresp,
+		http_SetHeader(wrk, sp->vsl_id, wrk->busyobj->beresp,
 		    "Content-Encoding: gzip");
 
 	/* But we can't do both at the same time */
@@ -791,13 +787,13 @@ cnt_fetchbody(struct sess *sp)
 	if (!sp->wantbody)
 		wrk->busyobj->do_stream = 0;
 
-	l = http_EstimateWS(wrk->beresp,
+	l = http_EstimateWS(wrk->busyobj->beresp,
 	    pass ? HTTPH_R_PASS : HTTPH_A_INS, &nhttp);
 
 	/* Create Vary instructions */
 	if (wrk->objcore != NULL) {
 		CHECK_OBJ_NOTNULL(wrk->objcore, OBJCORE_MAGIC);
-		vary = VRY_Create(sp, wrk->beresp);
+		vary = VRY_Create(sp, wrk->busyobj->beresp);
 		if (vary != NULL) {
 			varyl = VSB_len(vary);
 			assert(varyl > 0);
@@ -855,7 +851,7 @@ cnt_fetchbody(struct sess *sp)
 	WS_Assert(wrk->obj->ws_o);
 
 	/* Filter into object */
-	hp = wrk->beresp;
+	hp = wrk->busyobj->beresp;
 	hp2 = wrk->obj->http;
 
 	hp2->logtag = HTTP_Obj;
@@ -891,8 +887,8 @@ cnt_fetchbody(struct sess *sp)
 	/* Use unmodified headers*/
 	i = FetchBody(wrk, wrk->obj);
 
-	http_Setup(wrk->bereq, NULL);
-	http_Setup(wrk->beresp, NULL);
+	http_Setup(wrk->busyobj->bereq, NULL);
+	http_Setup(wrk->busyobj->beresp, NULL);
 	wrk->busyobj->vfp = NULL;
 	assert(WRW_IsReleased(wrk));
 	AZ(wrk->busyobj->vbc);
@@ -961,8 +957,8 @@ cnt_streambody(struct sess *sp)
 
 	i = FetchBody(wrk, wrk->obj);
 
-	http_Setup(wrk->bereq, NULL);
-	http_Setup(wrk->beresp, NULL);
+	http_Setup(wrk->busyobj->bereq, NULL);
+	http_Setup(wrk->busyobj->beresp, NULL);
 	wrk->busyobj->vfp = NULL;
 	AZ(wrk->busyobj->vbc);
 	AN(sp->director);
@@ -1075,8 +1071,8 @@ cnt_hit(struct sess *sp)
 	if (sp->handling == VCL_RET_DELIVER) {
 		/* Dispose of any body part of the request */
 		(void)FetchReqBody(sp);
-		AZ(wrk->bereq->ws);
-		AZ(wrk->beresp->ws);
+		//AZ(wrk->busyobj->bereq->ws);
+		//AZ(wrk->busyobj->beresp->ws);
 		sp->step = STP_PREPRESP;
 		return (0);
 	}
@@ -1257,17 +1253,18 @@ cnt_miss(struct sess *sp)
 	AN(wrk->objcore);
 	CHECK_OBJ_NOTNULL(wrk->busyobj, BUSYOBJ_MAGIC);
 	WS_Reset(wrk->ws, NULL);
-	http_Setup(wrk->bereq, wrk->ws);
+	wrk->busyobj = VBE_GetBusyObj(wrk);
+	http_Setup(wrk->busyobj->bereq, wrk->ws);
 	http_FilterHeader(sp, HTTPH_R_FETCH);
-	http_ForceGet(wrk->bereq);
+	http_ForceGet(wrk->busyobj->bereq);
 	if (cache_param->http_gzip_support) {
 		/*
 		 * We always ask the backend for gzip, even if the
 		 * client doesn't grok it.  We will uncompress for
 		 * the minority of clients which don't.
 		 */
-		http_Unset(wrk->bereq, H_Accept_Encoding);
-		http_SetHeader(wrk, sp->vsl_id, wrk->bereq,
+		http_Unset(wrk->busyobj->bereq, H_Accept_Encoding);
+		http_SetHeader(wrk, sp->vsl_id, wrk->busyobj->bereq,
 		    "Accept-Encoding: gzip");
 	}
 	wrk->connect_timeout = 0;
@@ -1280,7 +1277,7 @@ cnt_miss(struct sess *sp)
 	case VCL_RET_ERROR:
 		AZ(HSH_Deref(wrk, wrk->objcore, NULL));
 		wrk->objcore = NULL;
-		http_Setup(wrk->bereq, NULL);
+		http_Setup(wrk->busyobj->bereq, NULL);
 		VBE_DerefBusyObj(wrk, &wrk->busyobj);
 		sp->step = STP_ERROR;
 		return (0);
@@ -1350,7 +1347,8 @@ cnt_pass(struct sess *sp)
 
 	wrk->busyobj = VBE_GetBusyObj(wrk);
 	WS_Reset(wrk->ws, NULL);
-	http_Setup(wrk->bereq, wrk->ws);
+	wrk->busyobj = VBE_GetBusyObj(wrk);
+	http_Setup(wrk->busyobj->bereq, wrk->ws);
 	http_FilterHeader(sp, HTTPH_R_PASS);
 
 	wrk->connect_timeout = 0;
@@ -1358,7 +1356,7 @@ cnt_pass(struct sess *sp)
 	wrk->between_bytes_timeout = 0;
 	VCL_pass_method(sp);
 	if (sp->handling == VCL_RET_ERROR) {
-		http_Setup(wrk->bereq, NULL);
+		http_Setup(wrk->busyobj->bereq, NULL);
 		VBE_DerefBusyObj(wrk, &wrk->busyobj);
 		sp->step = STP_ERROR;
 		return (0);
@@ -1404,11 +1402,13 @@ cnt_pipe(struct sess *sp)
 	wrk = sp->wrk;
 	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
 	CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC);
+	AZ(wrk->busyobj);
 
 	wrk->acct_tmp.pipe++;
 	wrk->busyobj = VBE_GetBusyObj(wrk);
 	WS_Reset(wrk->ws, NULL);
-	http_Setup(wrk->bereq, wrk->ws);
+	wrk->busyobj = VBE_GetBusyObj(wrk);
+	http_Setup(wrk->busyobj->bereq, wrk->ws);
 	http_FilterHeader(sp, HTTPH_R_PIPE);
 
 	VCL_pipe_method(sp);
@@ -1419,8 +1419,8 @@ cnt_pipe(struct sess *sp)
 
 	PipeSession(sp);
 	assert(WRW_IsReleased(wrk));
+	http_Setup(wrk->busyobj->bereq, NULL);
 	VBE_DerefBusyObj(wrk, &wrk->busyobj);
-	http_Setup(wrk->bereq, NULL);
 	sp->step = STP_DONE;
 	return (0);
 }
diff --git a/bin/varnishd/cache/cache_dir_dns.c b/bin/varnishd/cache/cache_dir_dns.c
index f735ebf..56bce48 100644
--- a/bin/varnishd/cache/cache_dir_dns.c
+++ b/bin/varnishd/cache/cache_dir_dns.c
@@ -347,8 +347,8 @@ vdi_dns_find_backend(const struct sess *sp, struct vdi_dns *vs)
 	/* bereq is only present after recv et. al, otherwise use req (ie:
 	 * use req for health checks in vcl_recv and such).
 	 */
-	if (sp->wrk->bereq)
-		hp = sp->wrk->bereq;
+	if (sp->wrk->busyobj != NULL && sp->wrk->busyobj->bereq)
+		hp = sp->wrk->busyobj->bereq;
 	else
 		hp = sp->http;
 
diff --git a/bin/varnishd/cache/cache_esi_parse.c b/bin/varnishd/cache/cache_esi_parse.c
index e431a8d..8352717 100644
--- a/bin/varnishd/cache/cache_esi_parse.c
+++ b/bin/varnishd/cache/cache_esi_parse.c
@@ -499,7 +499,7 @@ vep_do_include(struct vep_state *vep, enum dowhat what)
 		VSB_printf(vep->vsb, "%c", 0);
 	} else {
 		VSB_printf(vep->vsb, "%c", 0);
-		url = vep->wrk->bereq->hd[HTTP_HDR_URL];
+		url = vep->wrk->busyobj->bereq->hd[HTTP_HDR_URL];
 		/* Look for the last / before a '?' */
 		h = NULL;
 		for (q = url.b; q < url.e && *q != '?'; q++)
diff --git a/bin/varnishd/cache/cache_fetch.c b/bin/varnishd/cache/cache_fetch.c
index 8a1ac5b..936dc30 100644
--- a/bin/varnishd/cache/cache_fetch.c
+++ b/bin/varnishd/cache/cache_fetch.c
@@ -398,7 +398,7 @@ FetchHdr(struct sess *sp, int need_host_hdr)
 		AN(sp->wrk->objcore->flags & OC_F_BUSY);
 	}
 
-	hp = wrk->bereq;
+	hp = wrk->busyobj->bereq;
 
 	sp->wrk->busyobj->vbc = VDI_GetFd(NULL, sp);
 	if (sp->wrk->busyobj->vbc == NULL) {
@@ -470,7 +470,7 @@ FetchHdr(struct sess *sp, int need_host_hdr)
 		}
 	}
 
-	hp = wrk->beresp;
+	hp = wrk->busyobj->beresp;
 
 	if (http_DissectResponse(wrk, htc, hp)) {
 		WSP(sp, SLT_FetchError, "http format error");
diff --git a/bin/varnishd/cache/cache_http.c b/bin/varnishd/cache/cache_http.c
index 267af00..4a6ba82 100644
--- a/bin/varnishd/cache/cache_http.c
+++ b/bin/varnishd/cache/cache_http.c
@@ -869,7 +869,7 @@ http_FilterHeader(const struct sess *sp, unsigned how)
 {
 	struct http *hp;
 
-	hp = sp->wrk->bereq;
+	hp = sp->wrk->busyobj->bereq;
 	CHECK_OBJ_NOTNULL(hp, HTTP_MAGIC);
 	hp->logtag = HTTP_Tx;
 
diff --git a/bin/varnishd/cache/cache_panic.c b/bin/varnishd/cache/cache_panic.c
index 9fa14e0..94a4c09 100644
--- a/bin/varnishd/cache/cache_panic.c
+++ b/bin/varnishd/cache/cache_panic.c
@@ -197,10 +197,10 @@ pan_wrk(const struct worker *wrk)
 
 	VSB_printf(pan_vsp, "  worker = %p {\n", wrk);
 	pan_ws(wrk->ws, 4);
-	if (wrk->bereq->ws != NULL)
-		pan_http("bereq", wrk->bereq, 4);
-	if (wrk->beresp->ws != NULL)
-		pan_http("beresp", wrk->beresp, 4);
+	if (wrk->busyobj != NULL && wrk->busyobj->bereq->ws != NULL)
+		pan_http("bereq", wrk->busyobj->bereq, 4);
+	if (wrk->busyobj != NULL && wrk->busyobj->beresp->ws != NULL)
+		pan_http("beresp", wrk->busyobj->beresp, 4);
 	if (wrk->resp->ws != NULL)
 		pan_http("resp", wrk->resp, 4);
 	VSB_printf(pan_vsp, "  },\n");
diff --git a/bin/varnishd/cache/cache_pipe.c b/bin/varnishd/cache/cache_pipe.c
index 5337eda..8963fb7 100644
--- a/bin/varnishd/cache/cache_pipe.c
+++ b/bin/varnishd/cache/cache_pipe.c
@@ -78,7 +78,7 @@ PipeSession(struct sess *sp)
 
 	WRW_Reserve(w, &vc->fd);
 	sp->wrk->acct_tmp.hdrbytes +=
-	    http_Write(w, sp->vsl_id, sp->wrk->bereq, 0);
+	    http_Write(w, sp->vsl_id, sp->wrk->busyobj->bereq, 0);
 
 	if (sp->htc->pipeline.b != NULL)
 		sp->wrk->acct_tmp.bodybytes +=
diff --git a/bin/varnishd/cache/cache_pool.c b/bin/varnishd/cache/cache_pool.c
index 582bb70..cf40e85 100644
--- a/bin/varnishd/cache/cache_pool.c
+++ b/bin/varnishd/cache/cache_pool.c
@@ -196,8 +196,8 @@ Pool_Work_Thread(void *priv, struct worker *w)
 		Lck_AssertHeld(&pp->mtx);
 
 		CHECK_OBJ_NOTNULL(w, WORKER_MAGIC);
-		CHECK_OBJ_NOTNULL(w->bereq, HTTP_MAGIC);
-		CHECK_OBJ_NOTNULL(w->beresp, HTTP_MAGIC);
+		CHECK_OBJ_NOTNULL(w->x_bereq, HTTP_MAGIC);
+		CHECK_OBJ_NOTNULL(w->x_beresp, HTTP_MAGIC);
 		CHECK_OBJ_NOTNULL(w->resp, HTTP_MAGIC);
 
 		WS_Reset(w->ws, NULL);
@@ -267,8 +267,7 @@ Pool_Work_Thread(void *priv, struct worker *w)
 			w->sp = NULL;
 
 			WS_Assert(w->ws);
-			AZ(w->bereq->ws);
-			AZ(w->beresp->ws);
+			AZ(w->busyobj);
 			AZ(w->resp->ws);
 			AZ(w->wrw.wfd);
 			AZ(w->storage_hint);
diff --git a/bin/varnishd/cache/cache_rfc2616.c b/bin/varnishd/cache/cache_rfc2616.c
index 599ffbb..6e7efea 100644
--- a/bin/varnishd/cache/cache_rfc2616.c
+++ b/bin/varnishd/cache/cache_rfc2616.c
@@ -73,7 +73,7 @@ RFC2616_Ttl(const struct sess *sp)
 
 	expp = &sp->wrk->busyobj->exp;
 
-	hp = sp->wrk->beresp;
+	hp = sp->wrk->busyobj->beresp;
 
 	assert(expp->entered != 0.0 && !isnan(expp->entered));
 	/* If all else fails, cache using default ttl */
@@ -183,7 +183,7 @@ RFC2616_Body(const struct sess *sp)
 	struct http *hp;
 	char *b;
 
-	hp = sp->wrk->beresp;
+	hp = sp->wrk->busyobj->beresp;
 
 	if (hp->protover < 11 && !http_HdrIs(hp, H_Connection, "keep-alive"))
 		sp->wrk->busyobj->should_close = 1;
@@ -192,7 +192,7 @@ RFC2616_Body(const struct sess *sp)
 	else
 		sp->wrk->busyobj->should_close = 0;
 
-	if (!strcasecmp(http_GetReq(sp->wrk->bereq), "head")) {
+	if (!strcasecmp(http_GetReq(sp->wrk->busyobj->bereq), "head")) {
 		/*
 		 * A HEAD request can never have a body in the reply,
 		 * no matter what the headers might say.
diff --git a/bin/varnishd/cache/cache_vrt.c b/bin/varnishd/cache/cache_vrt.c
index bbf93b5..a696f64 100644
--- a/bin/varnishd/cache/cache_vrt.c
+++ b/bin/varnishd/cache/cache_vrt.c
@@ -100,10 +100,10 @@ vrt_selecthttp(const struct sess *sp, enum gethdr_e where)
 		hp = sp->http;
 		break;
 	case HDR_BEREQ:
-		hp = sp->wrk->bereq;
+		hp = sp->wrk->busyobj->bereq;
 		break;
 	case HDR_BERESP:
-		hp = sp->wrk->beresp;
+		hp = sp->wrk->busyobj->beresp;
 		break;
 	case HDR_RESP:
 		hp = sp->wrk->resp;
diff --git a/bin/varnishd/cache/cache_vrt_var.c b/bin/varnishd/cache/cache_vrt_var.c
index cb54837..0662e26 100644
--- a/bin/varnishd/cache/cache_vrt_var.c
+++ b/bin/varnishd/cache/cache_vrt_var.c
@@ -85,15 +85,15 @@ VRT_r_##obj##_##hdr(const struct sess *sp)			\
 VRT_DO_HDR(req,   request,	sp->http,		HTTP_HDR_REQ)
 VRT_DO_HDR(req,   url,		sp->http,		HTTP_HDR_URL)
 VRT_DO_HDR(req,   proto,	sp->http,		HTTP_HDR_PROTO)
-VRT_DO_HDR(bereq, request,	sp->wrk->bereq,		HTTP_HDR_REQ)
-VRT_DO_HDR(bereq, url,		sp->wrk->bereq,		HTTP_HDR_URL)
-VRT_DO_HDR(bereq, proto,	sp->wrk->bereq,		HTTP_HDR_PROTO)
+VRT_DO_HDR(bereq, request,	sp->wrk->busyobj->bereq,	HTTP_HDR_REQ)
+VRT_DO_HDR(bereq, url,		sp->wrk->busyobj->bereq,	HTTP_HDR_URL)
+VRT_DO_HDR(bereq, proto,	sp->wrk->busyobj->bereq,	HTTP_HDR_PROTO)
 VRT_DO_HDR(obj,   proto,	sp->wrk->obj->http,		HTTP_HDR_PROTO)
 VRT_DO_HDR(obj,   response,	sp->wrk->obj->http,		HTTP_HDR_RESPONSE)
 VRT_DO_HDR(resp,  proto,	sp->wrk->resp,		HTTP_HDR_PROTO)
 VRT_DO_HDR(resp,  response,	sp->wrk->resp,		HTTP_HDR_RESPONSE)
-VRT_DO_HDR(beresp,  proto,	sp->wrk->beresp,	HTTP_HDR_PROTO)
-VRT_DO_HDR(beresp,  response,	sp->wrk->beresp,	HTTP_HDR_RESPONSE)
+VRT_DO_HDR(beresp,  proto,	sp->wrk->busyobj->beresp,	HTTP_HDR_PROTO)
+VRT_DO_HDR(beresp,  response,	sp->wrk->busyobj->beresp,	HTTP_HDR_RESPONSE)
 
 /*--------------------------------------------------------------------*/
 
@@ -115,7 +115,7 @@ VRT_r_##obj##_status(const struct sess *sp)			\
 }
 
 VRT_DO_STATUS(obj, sp->wrk->obj->http)
-VRT_DO_STATUS(beresp, sp->wrk->beresp)
+VRT_DO_STATUS(beresp, sp->wrk->busyobj->beresp)
 VRT_DO_STATUS(resp, sp->wrk->resp)
 
 /*--------------------------------------------------------------------*/
diff --git a/bin/varnishd/cache/cache_wrk.c b/bin/varnishd/cache/cache_wrk.c
index 1d80805..73eedb2 100644
--- a/bin/varnishd/cache/cache_wrk.c
+++ b/bin/varnishd/cache/cache_wrk.c
@@ -153,8 +153,8 @@ wrk_thread_real(void *priv, unsigned shm_workspace, unsigned sess_workspace,
 	w->wlb = w->wlp = wlog;
 	w->wle = wlog + (sizeof wlog) / 4;
 	w->sha256ctx = &sha256;
-	w->bereq = HTTP_create(http0, nhttp);
-	w->beresp = HTTP_create(http1, nhttp);
+	w->x_bereq = HTTP_create(http0, nhttp);
+	w->x_beresp = HTTP_create(http1, nhttp);
 	w->resp = HTTP_create(http2, nhttp);
 	w->wrw.iov = iov;
 	w->wrw.siov = siov;



More information about the varnish-commit mailing list