[master] 1608518bf vtc_server: Make the dispatch check reliable
Dridi Boukelmoune
dridi.boukelmoune at gmail.com
Wed Feb 8 14:28:05 UTC 2023
commit 1608518bf0e624e958e08bddd2e049c31ed9b886
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date: Wed Feb 8 15:23:30 2023 +0100
vtc_server: Make the dispatch check reliable
If a dispatch server instance is already done by the time we list
servers with varnish -vcl+backend we end up with the condition failing
on the fd field being negative, since the session was already closed.
Adding an explicit flag will prevet that from happening.
diff --git a/bin/varnishtest/vtc_server.c b/bin/varnishtest/vtc_server.c
index 3942ae92d..b5eccf632 100644
--- a/bin/varnishtest/vtc_server.c
+++ b/bin/varnishtest/vtc_server.c
@@ -59,6 +59,7 @@ struct server {
int depth;
int sock;
int fd;
+ unsigned is_dispatch;
char listen[256];
char aaddr[VTCP_ADDRBUFSIZE];
char aport[VTCP_PORTBUFSIZE];
@@ -361,6 +362,7 @@ server_dispatch_thread(void *priv)
bprintf(snbuf, "s%d", sn++);
vtc_log(vl, 3, "dispatch fd %d -> %s", fd, snbuf);
s2 = server_new(snbuf, vl);
+ s2->is_dispatch = 1;
s2->spec = s->spec;
bstrcpy(s2->listen, s->listen);
s2->fd = fd;
@@ -430,7 +432,7 @@ cmd_server_gen_vcl(struct vsb *vsb)
AZ(pthread_mutex_lock(&server_mtx));
VTAILQ_FOREACH(s, &servers, list) {
- if (s->sock < 0 && s->fd >= 0) /* dispatch instance */
+ if (s->is_dispatch)
continue;
if (VUS_is(s->listen))
More information about the varnish-commit
mailing list