[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