BUG/MINOR: state-file: do not store duplicates in the global tree
The global state file tree isn't configured for unique keys, so if an
entry appears multiple times, e.g. due to a bogus script that concatenates
entries multiple times, this will needlessly eat memory. Let's just drop
duplicates.
This should be backported to 2.1.
diff --git a/src/server.c b/src/server.c
index 718ca1c..466da44 100644
--- a/src/server.c
+++ b/src/server.c
@@ -75,7 +75,7 @@
};
/* tree where global state_file is loaded */
-struct eb_root state_file = EB_ROOT;
+struct eb_root state_file = EB_ROOT_UNIQUE;
int srv_downtime(const struct server *s)
{
@@ -3632,7 +3632,12 @@
goto nextline;
}
memcpy(st->name_name.key, trash.area, trash.data + 1);
- ebst_insert(&state_file, &st->name_name);
+ if (ebst_insert(&state_file, &st->name_name) != &st->name_name) {
+ /* this is a duplicate key, probably a hand-crafted file,
+ * drop it!
+ */
+ goto nextline;
+ }
/* save line */
st->line = line;