[master] 79578879b Move the file descriptor up to the vtc_sess

Poul-Henning Kamp phk at FreeBSD.org
Mon Oct 19 08:35:07 UTC 2020


commit 79578879bbe817bafa9069578dc38e64850e7538
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Oct 19 06:53:30 2020 +0000

    Move the file descriptor up to the vtc_sess

diff --git a/bin/varnishtest/vtc.h b/bin/varnishtest/vtc.h
index 23a3a6472..af2d37bd7 100644
--- a/bin/varnishtest/vtc.h
+++ b/bin/varnishtest/vtc.h
@@ -92,7 +92,7 @@ void init_syslog(void);
 struct vtc_sess *Sess_New(struct vtclog *vl, const char *name);
 void Sess_Destroy(struct vtc_sess **spp);
 int Sess_GetOpt(struct vtc_sess *, char * const **);
-int sess_process(struct vtclog *vl, const struct vtc_sess *,
+int sess_process(struct vtclog *vl, struct vtc_sess *,
     const char *spec, int sock, int *sfd, const char *addr);
 
 typedef int sess_conn_f(void *priv, struct vtclog *);
@@ -109,9 +109,6 @@ Sess_Start_Thread(
 );
 
 
-int http_process(struct vtclog *vl, const char *spec, int sock, int *sfd,
-    const char *addr, int rcvbuf);
-
 char * synth_body(const char *len, int rnd);
 
 void cmd_server_gen_vcl(struct vsb *vsb);
diff --git a/bin/varnishtest/vtc_http.c b/bin/varnishtest/vtc_http.c
index dd53bfd49..08ceabd52 100644
--- a/bin/varnishtest/vtc_http.c
+++ b/bin/varnishtest/vtc_http.c
@@ -217,7 +217,7 @@ http_write(const struct http *hp, int lvl, const char *pfx)
 
 	AZ(VSB_finish(hp->vsb));
 	vtc_dump(hp->vl, lvl, pfx, VSB_data(hp->vsb), VSB_len(hp->vsb));
-	if (VSB_tofile(hp->vsb, hp->fd))
+	if (VSB_tofile(hp->vsb, hp->sess->fd))
 		vtc_log(hp->vl, hp->fatal, "Write failed: %s",
 		    strerror(errno));
 }
@@ -495,7 +495,7 @@ http_rxchar(struct http *hp, int n, int eof)
 	struct pollfd pfd[1];
 
 	while (n > 0) {
-		pfd[0].fd = hp->fd;
+		pfd[0].fd = hp->sess->fd;
 		pfd[0].events = POLLIN;
 		pfd[0].revents = 0;
 		i = poll(pfd, 1, hp->timeout);
@@ -504,34 +504,34 @@ http_rxchar(struct http *hp, int n, int eof)
 		if (i == 0) {
 			vtc_log(hp->vl, hp->fatal,
 			    "HTTP rx timeout (fd:%d %u ms)",
-			    hp->fd, hp->timeout);
+			    hp->sess->fd, hp->timeout);
 			continue;
 		}
 		if (i < 0) {
 			vtc_log(hp->vl, hp->fatal,
 			    "HTTP rx failed (fd:%d poll: %s)",
-			    hp->fd, strerror(errno));
+			    hp->sess->fd, strerror(errno));
 			continue;
 		}
 		assert(i > 0);
 		assert(hp->rx_p + n < hp->rx_e);
-		i = read(hp->fd, hp->rx_p, n);
+		i = read(hp->sess->fd, hp->rx_p, n);
 		if (!(pfd[0].revents & POLLIN))
 			vtc_log(hp->vl, 4,
 			    "HTTP rx poll (fd:%d revents: %x n=%d, i=%d)",
-			    hp->fd, pfd[0].revents, n, i);
+			    hp->sess->fd, pfd[0].revents, n, i);
 		if (i == 0 && eof)
 			return (i);
 		if (i == 0) {
 			vtc_log(hp->vl, hp->fatal,
 			    "HTTP rx EOF (fd:%d read: %s) %d",
-			    hp->fd, strerror(errno), n);
+			    hp->sess->fd, strerror(errno), n);
 			return (-1);
 		}
 		if (i < 0) {
 			vtc_log(hp->vl, hp->fatal,
 			    "HTTP rx failed (fd:%d read: %s)",
-			    hp->fd, strerror(errno));
+			    hp->sess->fd, strerror(errno));
 			return (-1);
 		}
 		hp->rx_p += i;
@@ -1271,7 +1271,7 @@ cmd_http_recv(CMD_ARGS)
 	AZ(av[2]);
 	n = strtoul(av[1], NULL, 0);
 	while (n > 0) {
-		i = read(hp->fd, u, n > 32 ? 32 : n);
+		i = read(hp->sess->fd, u, n > 32 ? 32 : n);
 		if (i > 0)
 			vtc_dump(hp->vl, 4, "recv", u, i);
 		else
@@ -1299,7 +1299,7 @@ cmd_http_send(CMD_ARGS)
 	AN(av[1]);
 	AZ(av[2]);
 	vtc_dump(hp->vl, 4, "send", av[1], -1);
-	i = write(hp->fd, av[1], strlen(av[1]));
+	i = write(hp->sess->fd, av[1], strlen(av[1]));
 	if (i != strlen(av[1]))
 		vtc_log(hp->vl, hp->fatal, "Write error in http_send(): %s",
 		    strerror(errno));
@@ -1327,7 +1327,7 @@ cmd_http_send_n(CMD_ARGS)
 		vtc_dump(hp->vl, 4, "send_n", av[2], -1);
 	l = strlen(av[2]);
 	while (n--) {
-		i = write(hp->fd, av[2], l);
+		i = write(hp->sess->fd, av[2], l);
 		if (i != l)
 			vtc_log(hp->vl, hp->fatal,
 			    "Write error in http_send(): %s",
@@ -1353,7 +1353,7 @@ cmd_http_send_urgent(CMD_ARGS)
 	AN(av[1]);
 	AZ(av[2]);
 	vtc_dump(hp->vl, 4, "send_urgent", av[1], -1);
-	i = send(hp->fd, av[1], strlen(av[1]), MSG_OOB);
+	i = send(hp->sess->fd, av[1], strlen(av[1]), MSG_OOB);
 	if (i != strlen(av[1]))
 		vtc_log(hp->vl, hp->fatal,
 		    "Write error in http_send_urgent(): %s", strerror(errno));
@@ -1381,7 +1381,7 @@ cmd_http_sendhex(CMD_ARGS)
 	vsb = vtc_hex_to_bin(hp->vl, av[1]);
 	assert(VSB_len(vsb) >= 0);
 	vtc_hexdump(hp->vl, 4, "sendhex", VSB_data(vsb), VSB_len(vsb));
-	if (VSB_tofile(vsb, hp->fd))
+	if (VSB_tofile(vsb, hp->sess->fd))
 		vtc_log(hp->vl, hp->fatal, "Write failed: %s",
 		    strerror(errno));
 	VSB_destroy(&vsb);
@@ -1493,11 +1493,11 @@ cmd_http_expect_close(CMD_ARGS)
 	CAST_OBJ_NOTNULL(hp, priv, HTTP_MAGIC);
 	AZ(av[1]);
 
-	vtc_log(vl, 4, "Expecting close (fd = %d)", hp->fd);
+	vtc_log(vl, 4, "Expecting close (fd = %d)", hp->sess->fd);
 	if (hp->h2)
 		stop_h2(hp);
 	while (1) {
-		fds[0].fd = hp->fd;
+		fds[0].fd = hp->sess->fd;
 		fds[0].events = POLLIN;
 		fds[0].revents = 0;
 		i = poll(fds, 1, hp->timeout);
@@ -1509,7 +1509,7 @@ cmd_http_expect_close(CMD_ARGS)
 			vtc_log(vl, hp->fatal,
 			    "Expected close: poll = %d, revents = 0x%x",
 			    i, fds[0].revents);
-		i = read(hp->fd, &c, 1);
+		i = read(hp->sess->fd, &c, 1);
 		if (VTCP_Check(i))
 			break;
 		if (i == 1 && vct_islws(c))
@@ -1517,7 +1517,7 @@ cmd_http_expect_close(CMD_ARGS)
 		vtc_log(vl, hp->fatal,
 		    "Expecting close: read = %d, c = 0x%02x", i, c);
 	}
-	vtc_log(vl, 4, "fd=%d EOF, as expected", hp->fd);
+	vtc_log(vl, 4, "fd=%d EOF, as expected", hp->sess->fd);
 }
 
 /* SECTION: client-server.spec.close
@@ -1540,7 +1540,7 @@ cmd_http_close(CMD_ARGS)
 	assert(*hp->sfd >= 0);
 	if (hp->h2)
 		stop_h2(hp);
-	VTCP_close(&hp->fd);
+	VTCP_close(&hp->sess->fd);
 	vtc_log(vl, 4, "Closed");
 }
 
@@ -1564,13 +1564,13 @@ cmd_http_accept(CMD_ARGS)
 	assert(*hp->sfd >= 0);
 	if (hp->h2)
 		stop_h2(hp);
-	if (hp->fd >= 0)
-		VTCP_close(&hp->fd);
+	if (hp->sess->fd >= 0)
+		VTCP_close(&hp->sess->fd);
 	vtc_log(vl, 4, "Accepting");
-	hp->fd = accept(*hp->sfd, NULL, NULL);
-	if (hp->fd < 0)
+	hp->sess->fd = accept(*hp->sfd, NULL, NULL);
+	if (hp->sess->fd < 0)
 		vtc_log(vl, hp->fatal, "Accepted failed: %s", strerror(errno));
-	vtc_log(vl, 3, "Accepted socket fd is %d", hp->fd);
+	vtc_log(vl, 3, "Accepted socket fd is %d", hp->sess->fd);
 }
 
 /* SECTION: client-server.spec.fatal
@@ -1619,12 +1619,12 @@ cmd_http_txpri(CMD_ARGS)
 
 	vtc_dump(hp->vl, 4, "txpri", PREFACE, sizeof(PREFACE));
 	/* Dribble out the preface */
-	l = write(hp->fd, PREFACE, 18);
+	l = write(hp->sess->fd, PREFACE, 18);
 	if (l != 18)
 		vtc_log(vl, hp->fatal, "Write failed: (%zd vs %zd) %s",
 		    l, sizeof(PREFACE), strerror(errno));
 	usleep(10000);
-	l = write(hp->fd, PREFACE + 18, sizeof(PREFACE) - 18);
+	l = write(hp->sess->fd, PREFACE + 18, sizeof(PREFACE) - 18);
 	if (l != sizeof(PREFACE) - 18)
 		vtc_log(vl, hp->fatal, "Write failed: (%zd vs %zd) %s",
 		    l, sizeof(PREFACE), strerror(errno));
@@ -1808,8 +1808,8 @@ http_process_cleanup(void *arg)
 }
 
 int
-http_process(struct vtclog *vl, const char *spec, int sock, int *sfd,
-    const char *addr, int rcvbuf)
+http_process(struct vtclog *vl, struct vtc_sess *vsp, const char *spec,
+    int sock, int *sfd, const char *addr, int rcvbuf)
 {
 	struct http *hp;
 	int retval, oldbuf;
@@ -1818,7 +1818,8 @@ http_process(struct vtclog *vl, const char *spec, int sock, int *sfd,
 	(void)sfd;
 	ALLOC_OBJ(hp, HTTP_MAGIC);
 	AN(hp);
-	hp->fd = sock;
+	hp->sess = vsp;
+	hp->sess->fd = sock;
 	hp->timeout = vtc_maxdur * 1000 / 2;
 
 	if (rcvbuf) {
@@ -1827,12 +1828,12 @@ http_process(struct vtclog *vl, const char *spec, int sock, int *sfd,
 		hp->rcvbuf = rcvbuf;
 
 		oldbuf = 0;
-		AZ(getsockopt(hp->fd, SOL_SOCKET, SO_RCVBUF, &oldbuf, &intlen));
-		AZ(setsockopt(hp->fd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, intlen));
-		AZ(getsockopt(hp->fd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, &intlen));
+		AZ(getsockopt(hp->sess->fd, SOL_SOCKET, SO_RCVBUF, &oldbuf, &intlen));
+		AZ(setsockopt(hp->sess->fd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, intlen));
+		AZ(getsockopt(hp->sess->fd, SOL_SOCKET, SO_RCVBUF, &rcvbuf, &intlen));
 
 		vtc_log(vl, 3, "-rcvbuf fd=%d old=%d new=%d actual=%d",
-		    hp->fd, oldbuf, hp->rcvbuf, rcvbuf);
+		    hp->sess->fd, oldbuf, hp->rcvbuf, rcvbuf);
 	}
 
 	hp->nrxbuf = 2048*1024;
@@ -1868,7 +1869,7 @@ http_process(struct vtclog *vl, const char *spec, int sock, int *sfd,
 	}
 	pthread_cleanup_push(http_process_cleanup, hp);
 	parse_string(spec, http_cmds, hp, vl);
-	retval = hp->fd;
+	retval = hp->sess->fd;
 	pthread_cleanup_pop(0);
 	http_process_cleanup(hp);
 	return (retval);
diff --git a/bin/varnishtest/vtc_http.h b/bin/varnishtest/vtc_http.h
index d1690a4a3..6e5bcbdf5 100644
--- a/bin/varnishtest/vtc_http.h
+++ b/bin/varnishtest/vtc_http.h
@@ -30,11 +30,23 @@
 
 #define MAX_HDR		50
 
+struct vtc_sess {
+	unsigned		magic;
+#define VTC_SESS_MAGIC		0x932bd565
+	struct vtclog		*vl;
+	char			*name;
+	int			repeat;
+	int			keepalive;
+	int			fd;
+
+	ssize_t			rcvbuf;
+};
+
 struct http {
 	unsigned		magic;
 #define HTTP_MAGIC		0x2f02169c
-	int			fd;
 	int			*sfd;
+	struct vtc_sess		*sess;
 	int			timeout;
 	struct vtclog		*vl;
 
@@ -76,3 +88,7 @@ struct http {
 	uint64_t		iws;
 	int64_t			ws;
 };
+
+int http_process(struct vtclog *vl, struct vtc_sess *vsp, const char *spec,
+    int sock, int *sfd, const char *addr, int rcvbuf);
+
diff --git a/bin/varnishtest/vtc_http2.c b/bin/varnishtest/vtc_http2.c
index b47295af1..ebf17d23a 100644
--- a/bin/varnishtest/vtc_http2.c
+++ b/bin/varnishtest/vtc_http2.c
@@ -156,7 +156,7 @@ http_write(const struct http *hp, int lvl,
 	AN(pfx);
 
 	vtc_dump(hp->vl, lvl, pfx, buf, s);
-	l = write(hp->fd, buf, s);
+	l = write(hp->sess->fd, buf, s);
 	if (l != s)
 		vtc_log(hp->vl, hp->fatal, "Write failed: (%zd vs %d) %s",
 		    l, s, strerror(errno));
@@ -172,7 +172,7 @@ get_bytes(const struct http *hp, char *buf, int n)
 	AN(buf);
 
 	while (n > 0) {
-		pfd[0].fd = hp->fd;
+		pfd[0].fd = hp->sess->fd;
 		pfd[0].events = POLLIN;
 		pfd[0].revents = 0;
 		i = poll(pfd, 1, hp->timeout);
@@ -181,26 +181,26 @@ get_bytes(const struct http *hp, char *buf, int n)
 		if (i == 0)
 			vtc_log(hp->vl, 3,
 			    "HTTP2 rx timeout (fd:%d %u ms)",
-			    hp->fd, hp->timeout);
+			    hp->sess->fd, hp->timeout);
 		if (i < 0)
 			vtc_log(hp->vl, 3,
 			    "HTTP2 rx failed (fd:%d poll: %s)",
-			    hp->fd, strerror(errno));
+			    hp->sess->fd, strerror(errno));
 		if (i <= 0)
 			return (i);
-		i = read(hp->fd, buf, n);
+		i = read(hp->sess->fd, buf, n);
 		if (!(pfd[0].revents & POLLIN))
 			vtc_log(hp->vl, 4,
 			    "HTTP2 rx poll (fd:%d revents: %x n=%d, i=%d)",
-			    hp->fd, pfd[0].revents, n, i);
+			    hp->sess->fd, pfd[0].revents, n, i);
 		if (i == 0)
 			vtc_log(hp->vl, 3,
 			    "HTTP2 rx EOF (fd:%d read: %s)",
-			    hp->fd, strerror(errno));
+			    hp->sess->fd, strerror(errno));
 		if (i < 0)
 			vtc_log(hp->vl, 3,
 			    "HTTP2 rx failed (fd:%d read: %s)",
-			    hp->fd, strerror(errno));
+			    hp->sess->fd, strerror(errno));
 		if (i <= 0)
 			return (i);
 		n -= i;
@@ -334,14 +334,14 @@ write_frame(struct http *hp, const struct frame *f, const unsigned lock)
 
 	if (lock)
 		AZ(pthread_mutex_lock(&hp->mtx));
-	l = write(hp->fd, hdr, sizeof(hdr));
+	l = write(hp->sess->fd, hdr, sizeof(hdr));
 	if (l != sizeof(hdr))
 		vtc_log(hp->vl, hp->fatal, "Write failed: (%zd vs %zd) %s",
 		    l, sizeof(hdr), strerror(errno));
 
 	if (f->size) {
 		AN(f->data);
-		l = write(hp->fd, f->data, f->size);
+		l = write(hp->sess->fd, f->data, f->size);
 		if (l != f->size)
 			vtc_log(hp->vl, hp->fatal,
 					"Write failed: (%zd vs %d) %s",
diff --git a/bin/varnishtest/vtc_sess.c b/bin/varnishtest/vtc_sess.c
index 1b06b81dd..f1813e819 100644
--- a/bin/varnishtest/vtc_sess.c
+++ b/bin/varnishtest/vtc_sess.c
@@ -37,17 +37,7 @@
 #include <string.h>
 
 #include "vtc.h"
-
-struct vtc_sess {
-	unsigned		magic;
-#define VTC_SESS_MAGIC		0x932bd565
-	struct vtclog		*vl;
-	char			*name;
-	int			repeat;
-	int			keepalive;
-
-	ssize_t			rcvbuf;
-};
+#include "vtc_http.h"
 
 struct thread_arg {
 	unsigned		magic;
@@ -113,14 +103,14 @@ Sess_GetOpt(struct vtc_sess *vsp, char * const **avp)
 }
 
 int
-sess_process(struct vtclog *vl, const struct vtc_sess *vsp,
+sess_process(struct vtclog *vl, struct vtc_sess *vsp,
     const char *spec, int sock, int *sfd, const char *addr)
 {
 	int rv;
 
 	CHECK_OBJ_NOTNULL(vsp, VTC_SESS_MAGIC);
 
-	rv = http_process(vl, spec, sock, sfd, addr, vsp->rcvbuf);
+	rv = http_process(vl, vsp, spec, sock, sfd, addr, vsp->rcvbuf);
 	return (rv);
 }
 


More information about the varnish-commit mailing list