[master] eb985308d acceptor: create local acceptor list

Nils Goroll nils.goroll at uplex.de
Mon Sep 30 15:53:07 UTC 2024


commit eb985308d850fccc993f3cec3ddc563f8311b489
Author: Asad Sajjad Ahmed <asadsa at varnish-software.com>
Date:   Wed Sep 6 10:49:02 2023 +0200

    acceptor: create local acceptor list
    
    Now that each module is divided, we can limit the traversal of listen
    sockets to only listen sockets belonging to the respective module.
    This is done by keeping a local acceptor list of listen sockets in each module.
    
    Signed-off-by: Asad Sajjad Ahmed <asadsa at varnish-software.com>

diff --git a/bin/varnishd/acceptor/cache_acceptor.h b/bin/varnishd/acceptor/cache_acceptor.h
index 287c2e8ec..6dcc2e2f7 100644
--- a/bin/varnishd/acceptor/cache_acceptor.h
+++ b/bin/varnishd/acceptor/cache_acceptor.h
@@ -59,6 +59,7 @@ struct acceptor {
 	unsigned			magic;
 #define ACCEPTOR_MAGIC			0x0611847c
 	VTAILQ_ENTRY(acceptor)		list;
+	VTAILQ_HEAD(,listen_sock)	socks;
 	const char			*name;
 
 	acceptor_config_f		*config;
diff --git a/bin/varnishd/acceptor/cache_acceptor_tcp.c b/bin/varnishd/acceptor/cache_acceptor_tcp.c
index ad4737275..f33938405 100644
--- a/bin/varnishd/acceptor/cache_acceptor_tcp.c
+++ b/bin/varnishd/acceptor/cache_acceptor_tcp.c
@@ -319,12 +319,9 @@ vca_tcp_start(struct cli *cli)
 
 	(void)vca_tcp_sockopt_init();
 
-	VTAILQ_FOREACH(ls, &heritage.socks, list) {
+	VTAILQ_FOREACH(ls, &TCP_acceptor.socks, vcalist) {
 		CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
 
-		if (ls->uds)
-			continue;
-
 		if (vca_tcp_listen(cli, ls))
 			return;
 	}
@@ -557,12 +554,9 @@ vca_tcp_accept(struct pool *pp)
 	struct listen_sock *ls;
 	struct poolsock *ps;
 
-	VTAILQ_FOREACH(ls, &heritage.socks, list) {
+	VTAILQ_FOREACH(ls, &TCP_acceptor.socks, vcalist) {
 		CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
 
-		if (ls->uds)
-			continue;
-
 		ALLOC_OBJ(ps, POOLSOCK_MAGIC);
 		AN(ps);
 		ps->lsock = ls;
@@ -584,11 +578,11 @@ vca_tcp_update(pthread_mutex_t *shut_mtx)
 
 	PTOK(pthread_mutex_lock(shut_mtx));
 
-	VTAILQ_FOREACH(ls, &heritage.socks, list) {
+	VTAILQ_FOREACH(ls, &TCP_acceptor.socks, vcalist) {
 		CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
 
-		if (ls->sock == -2 || ls->uds)
-			continue;	// VCA_Shutdown || UDS
+		if (ls->sock == -2)
+			continue;	// VCA_Shutdown
 		assert (ls->sock > 0);
 		vca_tcp_sockopt_set(ls, NULL);
 		/* If one of the options on a socket has
@@ -613,12 +607,9 @@ vca_tcp_shutdown(void)
 	struct listen_sock *ls;
 	int i;
 
-	VTAILQ_FOREACH(ls, &heritage.socks, list) {
+	VTAILQ_FOREACH(ls, &TCP_acceptor.socks, vcalist) {
 		CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
 
-		if (ls->uds)
-			continue;
-
 		i = ls->sock;
 		ls->sock = -2;
 		(void)close(i);
diff --git a/bin/varnishd/acceptor/cache_acceptor_uds.c b/bin/varnishd/acceptor/cache_acceptor_uds.c
index c18406474..962475945 100644
--- a/bin/varnishd/acceptor/cache_acceptor_uds.c
+++ b/bin/varnishd/acceptor/cache_acceptor_uds.c
@@ -287,12 +287,9 @@ vca_uds_start(struct cli *cli)
 
 	(void)vca_uds_sockopt_init();
 
-	VTAILQ_FOREACH(ls, &heritage.socks, list) {
+	VTAILQ_FOREACH(ls, &UDS_acceptor.socks, vcalist) {
 		CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
 
-		if (!ls->uds)
-			continue;
-
 		if (vca_uds_listen(cli, ls))
 			return;
 	}
@@ -511,12 +508,9 @@ vca_uds_accept(struct pool *pp)
 	struct listen_sock *ls;
 	struct poolsock *ps;
 
-	VTAILQ_FOREACH(ls, &heritage.socks, list) {
+	VTAILQ_FOREACH(ls, &UDS_acceptor.socks, vcalist) {
 		CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
 
-		if (!ls->uds)
-			continue;
-
 		ALLOC_OBJ(ps, POOLSOCK_MAGIC);
 		AN(ps);
 		ps->lsock = ls;
@@ -538,11 +532,11 @@ vca_uds_update(pthread_mutex_t *shut_mtx)
 
 	PTOK(pthread_mutex_lock(shut_mtx));
 
-	VTAILQ_FOREACH(ls, &heritage.socks, list) {
+	VTAILQ_FOREACH(ls, &UDS_acceptor.socks, vcalist) {
 		CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
 
-		if (ls->sock == -2 || !ls->uds)
-			continue;	// VCA_Shutdown || TCP
+		if (ls->sock == -2)
+			continue;	// VCA_Shutdown
 		assert (ls->sock > 0);
 		vca_uds_sockopt_set(ls, NULL);
 		/* If one of the options on a socket has
@@ -567,12 +561,9 @@ vca_uds_shutdown(void)
 	struct listen_sock *ls;
 	int i;
 
-	VTAILQ_FOREACH(ls, &heritage.socks, list) {
+	VTAILQ_FOREACH(ls, &UDS_acceptor.socks, vcalist) {
 		CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
 
-		if (!ls->uds)
-			continue;
-
 		i = ls->sock;
 		ls->sock = -2;
 		(void)close(i);
diff --git a/bin/varnishd/acceptor/mgt_acceptor.c b/bin/varnishd/acceptor/mgt_acceptor.c
index d172b4418..8286ae71b 100644
--- a/bin/varnishd/acceptor/mgt_acceptor.c
+++ b/bin/varnishd/acceptor/mgt_acceptor.c
@@ -175,6 +175,7 @@ VCA_Add(struct acceptor *vca)
 	if (VCA_Find(vca->name) != NULL)
 		ARGV_ERR("Acceptor '%s' already exist\n", vca->name);
 
+	VTAILQ_INIT(&vca->socks);
 	VTAILQ_INSERT_TAIL(&acceptors, vca, list);
 
 	if (vca->config())
diff --git a/bin/varnishd/acceptor/mgt_acceptor_tcp.c b/bin/varnishd/acceptor/mgt_acceptor_tcp.c
index 43ba9c2f2..364b56d8f 100644
--- a/bin/varnishd/acceptor/mgt_acceptor_tcp.c
+++ b/bin/varnishd/acceptor/mgt_acceptor_tcp.c
@@ -99,10 +99,10 @@ vca_tcp_open_cb(void *priv, const struct suckaddr *sa)
 
 	CAST_OBJ_NOTNULL(la, priv, LISTEN_ARG_MAGIC);
 
-	VTAILQ_FOREACH(ls, &heritage.socks, list) {
+	VTAILQ_FOREACH(ls, &TCP_acceptor.socks, vcalist) {
 		CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
 
-		if (!ls->uds && !VSA_Compare(sa, ls->addr))
+		if (!VSA_Compare(sa, ls->addr))
 			ARGV_ERR("-a arguments %s and %s have same address\n",
 			    ls->endpoint, la->endpoint);
 	}
@@ -156,6 +156,7 @@ vca_tcp_open_cb(void *priv, const struct suckaddr *sa)
 
 	VTAILQ_INSERT_TAIL(&la->socks, ls, arglist);
 	VTAILQ_INSERT_TAIL(&heritage.socks, ls, list);
+	VTAILQ_INSERT_TAIL(&TCP_acceptor.socks, ls, vcalist);
 
 	return (0);
 }
@@ -204,12 +205,9 @@ vca_tcp_reopen(void)
 	struct listen_sock *ls;
 	int err, fail = 0;
 
-	VTAILQ_FOREACH(ls, &heritage.socks, list) {
+	VTAILQ_FOREACH(ls, &TCP_acceptor.socks, vcalist) {
 		CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
 
-		if (ls->uds)
-			continue;
-
 		VJ_master(JAIL_MASTER_PRIVPORT);
 		err = vca_tcp_opensocket(ls);
 		VJ_master(JAIL_MASTER_LOW);
diff --git a/bin/varnishd/acceptor/mgt_acceptor_uds.c b/bin/varnishd/acceptor/mgt_acceptor_uds.c
index e1b0d3242..97635b712 100644
--- a/bin/varnishd/acceptor/mgt_acceptor_uds.c
+++ b/bin/varnishd/acceptor/mgt_acceptor_uds.c
@@ -117,10 +117,10 @@ vca_uds_open_cb(void *priv, const struct sockaddr_un *uds)
 	CAST_OBJ_NOTNULL(la, priv, LISTEN_ARG_MAGIC);
 	(void) uds;
 
-	VTAILQ_FOREACH(ls, &heritage.socks, list) {
+	VTAILQ_FOREACH(ls, &UDS_acceptor.socks, vcalist) {
 		CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
 
-		if (ls->uds && strcmp(ls->endpoint, la->endpoint) == 0)
+		if (strcmp(ls->endpoint, la->endpoint) == 0)
 			ARGV_ERR("-a arguments %s and %s have same address\n",
 			    ls->endpoint, la->endpoint);
 	}
@@ -156,6 +156,7 @@ vca_uds_open_cb(void *priv, const struct sockaddr_un *uds)
 
 	VTAILQ_INSERT_TAIL(&la->socks, ls, arglist);
 	VTAILQ_INSERT_TAIL(&heritage.socks, ls, list);
+	VTAILQ_INSERT_TAIL(&UDS_acceptor.socks, ls, vcalist);
 
 	return (0);
 }
@@ -280,12 +281,9 @@ vca_uds_reopen(void)
 	struct listen_sock *ls;
 	int err, fail = 0;
 
-	VTAILQ_FOREACH(ls, &heritage.socks, list) {
+	VTAILQ_FOREACH(ls, &UDS_acceptor.socks, vcalist) {
 		CHECK_OBJ_NOTNULL(ls, LISTEN_SOCK_MAGIC);
 
-		if (!ls->uds)
-			continue;
-
 		VJ_master(JAIL_MASTER_PRIVPORT);
 		err = vca_uds_opensocket(ls);
 		VJ_master(JAIL_MASTER_LOW);


More information about the varnish-commit mailing list