From 36f339d2feb567e437eff52347eb7e976d409ad0 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 10 Jul 2025 14:47:35 +0200 Subject: [PATCH] CLEANUP: stream: use server_find_by_addr() in sticking_rule_find_target() This makes this function a bit less of a mess by no longer manipulating the low-level server address nodes nor the proxy lock. --- src/stream.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/src/stream.c b/src/stream.c index ef6ae84e4..acc157098 100644 --- a/src/stream.c +++ b/src/stream.c @@ -1252,7 +1252,7 @@ static inline void sticking_rule_find_target(struct stream *s, struct proxy *px = s->be; struct dict_entry *de; void *ptr; - struct server *srv; + struct server *srv = NULL; int id; /* Look for the server name previously stored in stick-table */ @@ -1262,21 +1262,13 @@ static inline void sticking_rule_find_target(struct stream *s, HA_RWLOCK_RDUNLOCK(STK_SESS_LOCK, &ts->lock); if (de) { - struct ebpt_node *node; - - if (t->server_key_type == STKTABLE_SRV_NAME) { + if (t->server_key_type == STKTABLE_SRV_NAME) srv = server_find_by_name(px, de->value.key); - if (srv) - goto found; - } else if (t->server_key_type == STKTABLE_SRV_ADDR) { - HA_RWLOCK_RDLOCK(PROXY_LOCK, &px->lock); - node = ebis_lookup(&px->used_server_addr, de->value.key); - HA_RWLOCK_RDUNLOCK(PROXY_LOCK, &px->lock); - if (node) { - srv = container_of(node, struct server, addr_node); - goto found; - } - } + else if (t->server_key_type == STKTABLE_SRV_ADDR) + srv = server_find_by_addr(px, de->value.key); + + if (srv) + goto found; } /* Look for the server ID */ -- 2.47.3