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.
diff --git a/src/server.c b/src/server.c
index 6f3f354..bcfdbb2 100644
--- a/src/server.c
+++ b/src/server.c
@@ -74,9 +74,6 @@
.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 @@
*/
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 @@
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 @@
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 @@
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);