From 8b4b6a0d63c5b95d51c9502e38a0ef04f3445535 Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Mon, 15 Feb 2021 16:53:51 +0100 Subject: [PATCH] CLEANUP: server: Use a local eb-tree to store lines of the global server-state file There is no reason to use a global variable to store the lines of the global server-state file. This tree is only used during the file parsing, as a line cache. Now the eb-tree is declared as a local variable in the apply_server_state() function. --- src/server.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/server.c b/src/server.c index 6f3f35409..bcfdbb277 100644 --- a/src/server.c +++ b/src/server.c @@ -74,9 +74,6 @@ struct dict server_key_dict = { .values = EB_ROOT_UNIQUE, }; -/* tree where global state_file is loaded */ -struct eb_root state_file = EB_ROOT_UNIQUE; - int srv_downtime(const struct server *s) { if ((s->cur_state != SRV_ST_STOPPED) || s->last_change >= now.tv_sec) // ignore negative time @@ -3218,6 +3215,8 @@ static inline int srv_state_get_filepath(char *dst_path, int maxpathlen, const c */ void apply_server_state(void) { + /* tree where global state_file is loaded */ + struct eb_root global_state_tree = EB_ROOT_UNIQUE; struct proxy *curproxy; struct server *srv; struct server_state_line *st_line; @@ -3274,7 +3273,7 @@ void apply_server_state(void) goto nextline; } memcpy(st_line->node.key, trash.area, trash.data + 1); - if (ebst_insert(&state_file, &st_line->node) != &st_line->node) { + if (ebst_insert(&global_state_tree, &st_line->node) != &st_line->node) { /* this is a duplicate key, probably a hand-crafted file, * drop it! */ @@ -3318,7 +3317,7 @@ void apply_server_state(void) int ret; chunk_printf(&trash, "%s %s", curproxy->id, srv->id); - node = ebst_lookup(&state_file, trash.area); + node = ebst_lookup(&global_state_tree, trash.area); if (!node) continue; /* next server */ st_line = ebmb_entry(node, typeof(*st_line), node); @@ -3413,7 +3412,7 @@ void apply_server_state(void) fclose(f); } - node = ebmb_first(&state_file); + node = ebmb_first(&global_state_tree); while (node) { st_line = ebmb_entry(node, typeof(*st_line), node); next_node = ebmb_next(node);