[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