[master] 72a19f2 Isolate req->busyobj in the state engine.

Poul-Henning Kamp phk at varnish-cache.org
Wed Aug 28 08:39:46 CEST 2013


commit 72a19f2fcfbc403c4d79b976d8f1e2eb5cf1a563
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed Aug 28 06:38:41 2013 +0000

    Isolate req->busyobj in the state engine.

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 1626351..7f1b82f 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -996,7 +996,7 @@ const char *reqbody_status_2str(enum req_body_state_e e);
 const char *sess_close_2str(enum sess_close sc, int want_desc);
 
 /* cache_pipe.c */
-void PipeRequest(struct req *req);
+void PipeRequest(struct req *req, struct busyobj *bo);
 
 /* cache_pool.c */
 void Pool_Init(void);
diff --git a/bin/varnishd/cache/cache_pipe.c b/bin/varnishd/cache/cache_pipe.c
index e76151b..b14c8af 100644
--- a/bin/varnishd/cache/cache_pipe.c
+++ b/bin/varnishd/cache/cache_pipe.c
@@ -60,19 +60,17 @@ rdf(int fd0, int fd1)
 }
 
 void
-PipeRequest(struct req *req)
+PipeRequest(struct req *req, struct busyobj *bo)
 {
 	struct vbc *vc;
 	struct worker *wrk;
 	struct pollfd fds[2];
-	struct busyobj *bo;
 	int i;
 
 	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
 	CHECK_OBJ_NOTNULL(req->sp, SESS_MAGIC);
 	wrk = req->wrk;
 	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
-	bo = req->busyobj;
 	CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
 
 	vc = VDI_GetFd(NULL, bo);
diff --git a/bin/varnishd/cache/cache_req_fsm.c b/bin/varnishd/cache/cache_req_fsm.c
index 3dca4e4..0d59693 100644
--- a/bin/varnishd/cache/cache_req_fsm.c
+++ b/bin/varnishd/cache/cache_req_fsm.c
@@ -685,23 +685,22 @@ cnt_pipe(struct worker *wrk, struct req *req)
 	AZ(req->busyobj);
 
 	req->acct_req.pipe++;
-	req->busyobj = VBO_GetBusyObj(wrk, req);
-	bo = req->busyobj;
+	bo = VBO_GetBusyObj(wrk, req);
 	HTTP_Setup(bo->bereq, bo->ws, bo->vsl, HTTP_Bereq);
 	http_FilterReq(bo->bereq, req->http, 0);	// XXX: 0 ?
 	http_PrintfHeader(bo->bereq,
 	    "X-Varnish: %u", req->vsl->wid & VSL_IDENTMASK);
 
-	VCL_pipe_method(req->vcl, wrk, req, NULL, req->http->ws);
+	VCL_pipe_method(req->vcl, wrk, req, bo, req->http->ws);
 
 	if (wrk->handling == VCL_RET_ERROR)
 		INCOMPL();
 	assert(wrk->handling == VCL_RET_PIPE);
 
-	PipeRequest(req);
+	PipeRequest(req, bo);
 	assert(WRW_IsReleased(wrk));
 	http_Teardown(bo->bereq);
-	VBO_DerefBusyObj(wrk, &req->busyobj);
+	VBO_DerefBusyObj(wrk, &bo);
 	return (REQ_FSM_DONE);
 }
 



More information about the varnish-commit mailing list