[master] 87f852e Hand transport->new_session a req instead of sp, they'll all need it.

Poul-Henning Kamp phk at FreeBSD.org
Wed Feb 10 10:44:26 CET 2016


commit 87f852e175083308e7cecf85fea5e7f9558ced6f
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Wed Feb 10 08:23:49 2016 +0000

    Hand transport->new_session a req instead of sp, they'll all need it.

diff --git a/bin/varnishd/cache/cache_acceptor.c b/bin/varnishd/cache/cache_acceptor.c
index 2fecb7b..f6d6f82 100644
--- a/bin/varnishd/cache/cache_acceptor.c
+++ b/bin/varnishd/cache/cache_acceptor.c
@@ -293,6 +293,7 @@ static void __match_proto__(task_func_t)
 vca_make_session(struct worker *wrk, void *arg)
 {
 	struct sess *sp;
+	struct req *req;
 	struct wrk_accept *wa;
 	struct sockaddr_storage ss;
 	struct suckaddr *sa;
@@ -305,6 +306,13 @@ vca_make_session(struct worker *wrk, void *arg)
 	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
 	CAST_OBJ_NOTNULL(wa, arg, WRK_ACCEPT_MAGIC);
 
+	if (VTCP_blocking(wa->acceptsock)) {
+		AZ(close(wa->acceptsock));
+		wrk->stats->sess_drop++;	// XXX Better counter ?
+		WS_Release(wrk->aws, 0);
+		return;
+	}
+
 	/* Turn accepted socket into a session */
 	AN(wrk->aws->r);
 	sp = SES_New(wrk->pool);
@@ -364,9 +372,15 @@ vca_make_session(struct worker *wrk, void *arg)
 	}
 	vca_tcp_opt_set(sp->fd, 0);
 
+	req = Req_New(wrk, sp);
+	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	req->htc->fd = sp->fd;
+	SES_RxInit(req->htc, req->ws,
+	    cache_param->http_req_size, cache_param->http_req_hdr_len);
+	
 	sp->transport = wa->acceptlsock->transport;
 	wrk->task.func = sp->transport->new_session;
-	wrk->task.priv = sp;
+	wrk->task.priv = req;
 }
 
 /*--------------------------------------------------------------------
diff --git a/bin/varnishd/http1/cache_http1_fsm.c b/bin/varnishd/http1/cache_http1_fsm.c
index 7313101..e201707 100644
--- a/bin/varnishd/http1/cache_http1_fsm.c
+++ b/bin/varnishd/http1/cache_http1_fsm.c
@@ -80,24 +80,10 @@ http1_new_session(struct worker *wrk, void *arg)
 	struct sess *sp;
 	struct req *req;
 
-	CAST_OBJ_NOTNULL(sp, arg, SESS_MAGIC);
-
-	/*
-	 * Assume we're going to receive something that will likely
-	 * involve a request...
-	 */
-	if (VTCP_blocking(sp->fd)) {
-		if (errno == ECONNRESET)
-			SES_Close(sp, SC_REM_CLOSE);
-		else
-			SES_Close(sp, SC_TX_ERROR);
-		return;
-	}
-	req = Req_New(wrk, sp);
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
-	req->htc->fd = sp->fd;
-	SES_RxInit(req->htc, req->ws,
-	    cache_param->http_req_size, cache_param->http_req_hdr_len);
+	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
+	CAST_OBJ_NOTNULL(req, arg, REQ_MAGIC);
+	sp = req->sp;
+	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
 
 	sp->sess_step = S_STP_H1NEWREQ;
 	wrk->task.func = SES_Proto_Req;
@@ -108,11 +94,19 @@ static void __match_proto__(task_func_t)
 http1_unwait(struct worker *wrk, void *arg)
 {
 	struct sess *sp;
+	struct req *req;
 
 	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
 	CAST_OBJ_NOTNULL(sp, arg, SESS_MAGIC);
 	WS_Release(sp->ws, 0);
-	http1_new_session(wrk, arg);
+	req = Req_New(wrk, sp);
+	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
+	req->htc->fd = sp->fd;
+	SES_RxInit(req->htc, req->ws,
+	    cache_param->http_req_size, cache_param->http_req_hdr_len);
+	sp->sess_step = S_STP_H1NEWREQ;
+	wrk->task.func = SES_Proto_Req;
+	wrk->task.priv = req;
 }
 
 const struct transport HTTP1_transport = {
diff --git a/bin/varnishd/proxy/cache_proxy_proto.c b/bin/varnishd/proxy/cache_proxy_proto.c
index 9d1db5b..061d1be 100644
--- a/bin/varnishd/proxy/cache_proxy_proto.c
+++ b/bin/varnishd/proxy/cache_proxy_proto.c
@@ -344,13 +344,9 @@ vpx_new_session(struct worker *wrk, void *arg)
 	int i;
 
 	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
-	CAST_OBJ_NOTNULL(sp, arg, SESS_MAGIC);
-	(void)VTCP_blocking(sp->fd);		/* XXX redundant ? */
-	req = Req_New(wrk, sp);
-	CHECK_OBJ_NOTNULL(req, REQ_MAGIC);
-	req->htc->fd = sp->fd;
-	SES_RxInit(req->htc, req->ws,
-	    cache_param->http_req_size, cache_param->http_req_hdr_len);
+	CAST_OBJ_NOTNULL(req, arg, REQ_MAGIC);
+	sp = req->sp;
+	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
 
 	/* Per specification */
 	assert(sizeof vpx1_sig == 5);
@@ -384,8 +380,7 @@ vpx_new_session(struct worker *wrk, void *arg)
 		req->htc->pipeline_e = req->htc->rxbuf_e;
 	SES_RxReInit(req->htc);
 	sp->transport = &HTTP1_transport;
-	req->sp->sess_step = S_STP_H1NEWREQ;
-	wrk->task.func = SES_Proto_Req;
+	wrk->task.func = sp->transport->new_session;
 	wrk->task.priv = req;
 }
 



More information about the varnish-commit mailing list