[master] 876d42b Make sure the req always has a transport
Poul-Henning Kamp
phk at FreeBSD.org
Sun Feb 26 22:23:05 CET 2017
commit 876d42b99619a75b1356af87b795ea16a9a0f871
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Sun Feb 26 21:17:06 2017 +0000
Make sure the req always has a transport
diff --git a/bin/varnishd/cache/cache_req.c b/bin/varnishd/cache/cache_req.c
index 0a73e33..d0b4c3a 100644
--- a/bin/varnishd/cache/cache_req.c
+++ b/bin/varnishd/cache/cache_req.c
@@ -175,7 +175,6 @@ Req_Cleanup(struct sess *sp, struct worker *wrk, struct req *req)
}
req->req_bodybytes = 0;
-
if (!isnan(req->t_prev) && req->t_prev > 0.)
sp->t_idle = req->t_prev;
else
diff --git a/bin/varnishd/http1/cache_http1_fsm.c b/bin/varnishd/http1/cache_http1_fsm.c
index 7fe90ef..d386840 100644
--- a/bin/varnishd/http1/cache_http1_fsm.c
+++ b/bin/varnishd/http1/cache_http1_fsm.c
@@ -268,6 +268,7 @@ http1_dissect(struct worker *wrk, struct req *req)
CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+ CHECK_OBJ_NOTNULL(req->transport, TRANSPORT_MAGIC);
/* Allocate a new vxid now that we know we'll need it. */
AZ(req->vsl->wid);
@@ -353,9 +354,12 @@ HTTP1_Session(struct worker *wrk, struct req *req)
return;
}
+ req->transport = &HTTP1_transport;
+
while (1) {
st = http1_getstate(sp);
if (st == H1NEWREQ) {
+ CHECK_OBJ_NOTNULL(req->transport, TRANSPORT_MAGIC);
assert(isnan(req->t_prev));
assert(isnan(req->t_req));
AZ(req->vcl);
@@ -441,6 +445,7 @@ HTTP1_Session(struct worker *wrk, struct req *req)
req->req_step = R_STP_RECV;
http1_setstate(sp, H1PROC);
} else if (st == H1BUSY) {
+ CHECK_OBJ_NOTNULL(req->transport, TRANSPORT_MAGIC);
/*
* Return from waitinglist.
* Check to see if the remote has left.
@@ -456,12 +461,10 @@ HTTP1_Session(struct worker *wrk, struct req *req)
}
http1_setstate(sp, H1PROC);
} else if (st == H1PROC) {
- req->transport = &HTTP1_transport;
req->task.func = http1_req;
req->task.priv = req;
if (CNT_Request(wrk, req) == REQ_FSM_DISEMBARK)
return;
- req->transport = NULL;
req->task.func = NULL;
req->task.priv = NULL;
http1_setstate(sp, H1CLEANUP);
More information about the varnish-commit
mailing list